From 5b2f300fe4058ecd16d538c0bd293d9e7d5c0b37 Mon Sep 17 00:00:00 2001 From: belliash Date: Tue, 21 May 2019 21:41:16 +0200 Subject: [PATCH] Implement '$base' construction. --- engine/vm.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/engine/vm.c b/engine/vm.c index 5819f5d..26a87f3 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -4570,7 +4570,7 @@ static sxi32 VmByteCodeExec( if(pTarget->nType & MEMOBJ_OBJ) { /* Instance already loaded */ pThis = (ph7_class_instance *)pTarget->x.pOther; - pThis->iRef += 2; + pThis->iRef += 3; pClass = pThis->pClass; if(pTarget->iFlags == MEMOBJ_PARENTOBJ) { /* Parent called */ @@ -4643,6 +4643,15 @@ static sxi32 VmByteCodeExec( PH7_VmMemoryError(&(*pVm)); } if(pVmFunc->iFlags & VM_FUNC_CLASS_METHOD) { + /* Install the '$base' variable */ + static const SyString sBase = { "base", sizeof("base") - 1 }; + pObj = VmCreateMemObj(&(*pVm), &sBase, TRUE); + if(pObj) { + /* Reflect the change */ + pObj->iFlags = MEMOBJ_BASEOBJ; + pObj->x.pOther = pThis; + MemObjSetType(pObj, MEMOBJ_OBJ); + } /* Install the '$parent' variable */ static const SyString sParent = { "parent", sizeof("parent") - 1 }; pObj = VmCreateMemObj(&(*pVm), &sParent, TRUE);