From 8133c3dd6f0b6d87353e11603012e3d12936cd46 Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 3 Apr 2019 06:37:35 +0200 Subject: [PATCH] Make a use of PH7_MemObjSafeStore(). --- engine/vm.c | 36 ++++-------------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/engine/vm.c b/engine/vm.c index 7f79998..836332e 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -2698,22 +2698,8 @@ static sxi32 VmByteCodeExec( pObj = (ph7_value *)SySetAt(&pVm->aMemObj, nIdx); if(pObj) { /* Perform the store operation */ - if(pObj->iFlags == pTos->iFlags) { - PH7_MemObjStore(pTos, pObj); - } else if(pObj->iFlags & MEMOBJ_MIXED) { - PH7_MemObjStore(pTos, pObj); - pObj->iFlags |= MEMOBJ_MIXED; - } else if(PH7_CheckVarCompat(pTos, pObj->iFlags) == SXRET_OK) { - ProcMemObjCast xCast = PH7_MemObjCastMethod(pObj->iFlags); - xCast(pTos); - PH7_MemObjStore(pTos, pObj); - } else if((pObj->iFlags & MEMOBJ_HASHMAP) && (pTos->iFlags & MEMOBJ_HASHMAP)) { - if(PH7_HashmapCast(pTos, pObj->iFlags ^ MEMOBJ_HASHMAP) != SXRET_OK) { - PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, - "Cannot assign a value of incompatible type to variable '$%z'", &sName); - } - PH7_MemObjStore(pTos, pObj); - } else { + rc = PH7_MemObjSafeStore(pTos, pObj); + if(rc != SXRET_OK) { PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Cannot assign a value of incompatible type to variable '$%z'", &sName); } @@ -2746,22 +2732,8 @@ static sxi32 VmByteCodeExec( PH7_MemObjRelease(&pTos[1]); } /* Perform the store operation */ - if(pObj->iFlags == pTos->iFlags) { - PH7_MemObjStore(pTos, pObj); - } else if(pObj->iFlags & MEMOBJ_MIXED) { - PH7_MemObjStore(pTos, pObj); - pObj->iFlags |= MEMOBJ_MIXED; - } else if(PH7_CheckVarCompat(pTos, pObj->iFlags) == SXRET_OK) { - ProcMemObjCast xCast = PH7_MemObjCastMethod(pObj->iFlags); - xCast(pTos); - PH7_MemObjStore(pTos, pObj); - } else if((pObj->iFlags & MEMOBJ_HASHMAP) && (pTos->iFlags & MEMOBJ_HASHMAP)) { - if(PH7_HashmapCast(pTos, pObj->iFlags ^ MEMOBJ_HASHMAP) != SXRET_OK) { - PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, - "Cannot assign a value of incompatible type to variable '$%z'", &sName); - } - PH7_MemObjStore(pTos, pObj); - } else { + rc = PH7_MemObjSafeStore(pTos, pObj); + if(rc != SXRET_OK) { PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Cannot assign a value of incompatible type to variable '$%z'", &sName); }