From 253fe327ef168852af55fe6322fe215153acc8bf Mon Sep 17 00:00:00 2001 From: belliash Date: Sun, 31 Mar 2019 14:04:19 +0200 Subject: [PATCH] Automatically fallback mixed variable to void (NULL). --- engine/vm.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/engine/vm.c b/engine/vm.c index 627ff7a..ad68062 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -2431,15 +2431,19 @@ static sxi32 VmByteCodeExec( PH7_MemObjRelease(pTos); } else { pObj = VmExtractMemObj(&(*pVm), &sName, FALSE, TRUE); - if(pInstr->iP2 & MEMOBJ_HASHMAP) { - ph7_hashmap *pMap; - pMap = PH7_NewHashmap(&(*pVm), 0, 0); - if(pMap == 0) { - PH7_VmMemoryError(&(*pVm)); + if(pInstr->iP2 & MEMOBJ_MIXED && (pInstr->iP2 & MEMOBJ_HASHMAP) == 0) { + pObj->iFlags = MEMOBJ_MIXED | MEMOBJ_VOID; + } else { + if(pInstr->iP2 & MEMOBJ_HASHMAP) { + ph7_hashmap *pMap; + pMap = PH7_NewHashmap(&(*pVm), 0, 0); + if(pMap == 0) { + PH7_VmMemoryError(&(*pVm)); + } + pObj->x.pOther = pMap; } - pObj->x.pOther = pMap; + MemObjSetType(pObj, pInstr->iP2); } - MemObjSetType(pObj, pInstr->iP2); } pTos->nIdx = SXU32_HIGH; /* Mark as constant */ break;