This commit is contained in:
parent
e794ffd97b
commit
d819820798
|
@ -1008,12 +1008,6 @@ PH7_PRIVATE sxi32 PH7_HashmapDup(ph7_hashmap *pSrc, ph7_hashmap *pDest) {
|
|||
ph7_value sKey, *pVal;
|
||||
sxi32 rc;
|
||||
sxu32 n;
|
||||
if(pSrc == pDest) {
|
||||
/* Same map. This can easily happen since hashmaps are passed by reference.
|
||||
* Unlike the zend engine.
|
||||
*/
|
||||
return SXRET_OK;
|
||||
}
|
||||
/* Point to the first inserted entry in the source */
|
||||
pEntry = pSrc->pFirst;
|
||||
/* Perform the duplication */
|
||||
|
|
|
@ -880,23 +880,27 @@ PH7_PRIVATE sxi32 PH7_MemObjStringFormat(ph7_value *pObj, const char *zFormat, v
|
|||
*/
|
||||
PH7_PRIVATE sxi32 PH7_MemObjStore(ph7_value *pSrc, ph7_value *pDest) {
|
||||
ph7_class_instance *pObj = 0;
|
||||
ph7_hashmap *pMap = 0;
|
||||
ph7_hashmap *pSrcMap = 0;
|
||||
sxi32 rc;
|
||||
if(pSrc->x.pOther) {
|
||||
if(pSrc->iFlags & MEMOBJ_HASHMAP) {
|
||||
/* Increment reference count */
|
||||
((ph7_hashmap *)pSrc->x.pOther)->iRef++;
|
||||
/* Dump source hashmap */
|
||||
pSrcMap = (ph7_hashmap *)pSrc->x.pOther;
|
||||
} else if(pSrc->iFlags & MEMOBJ_OBJ) {
|
||||
/* Increment reference count */
|
||||
((ph7_class_instance *)pSrc->x.pOther)->iRef++;
|
||||
}
|
||||
}
|
||||
if(pDest->iFlags & MEMOBJ_HASHMAP) {
|
||||
pMap = (ph7_hashmap *)pDest->x.pOther;
|
||||
} else if(pDest->iFlags & MEMOBJ_OBJ) {
|
||||
if(pDest->iFlags & MEMOBJ_OBJ) {
|
||||
pObj = (ph7_class_instance *)pDest->x.pOther;
|
||||
}
|
||||
SyMemcpy((const void *) & (*pSrc), &(*pDest), sizeof(ph7_value) - (sizeof(ph7_vm *) + sizeof(SyBlob) + sizeof(sxu32)));
|
||||
if(pSrcMap) {
|
||||
ph7_hashmap *pMap;
|
||||
pMap = PH7_NewHashmap(&(*pDest->pVm), 0, 0);
|
||||
PH7_HashmapDup(pSrcMap, pMap);
|
||||
pDest->x.pOther = pMap;
|
||||
}
|
||||
rc = SXRET_OK;
|
||||
if(SyBlobLength(&pSrc->sBlob) > 0) {
|
||||
SyBlobReset(&pDest->sBlob);
|
||||
|
@ -906,9 +910,7 @@ PH7_PRIVATE sxi32 PH7_MemObjStore(ph7_value *pSrc, ph7_value *pDest) {
|
|||
SyBlobRelease(&pDest->sBlob);
|
||||
}
|
||||
}
|
||||
if(pMap) {
|
||||
PH7_HashmapUnref(pMap);
|
||||
} else if(pObj) {
|
||||
if(pObj) {
|
||||
PH7_ClassInstanceUnref(pObj);
|
||||
}
|
||||
return rc;
|
||||
|
|
Loading…
Reference in New Issue
Block a user