This commit is contained in:
@@ -137,7 +137,7 @@ static sxi64 MemObjIntValue(ph7_value *pObj) {
|
||||
return pObj->x.iVal;
|
||||
} else if(iFlags & MEMOBJ_STRING) {
|
||||
return MemObjStringToInt(&(*pObj));
|
||||
} else if(iFlags & MEMOBJ_NULL) {
|
||||
} else if(iFlags & (MEMOBJ_NULL | MEMOBJ_VOID)) {
|
||||
return 0;
|
||||
} else if(iFlags & MEMOBJ_HASHMAP) {
|
||||
ph7_hashmap *pMap = (ph7_hashmap *)pObj->x.pOther;
|
||||
@@ -192,7 +192,7 @@ static ph7_real MemObjRealValue(ph7_value *pObj) {
|
||||
SyStrToReal(sString.zString, sString.nByte, (void *)&rVal, 0);
|
||||
}
|
||||
return rVal;
|
||||
} else if(iFlags & MEMOBJ_NULL) {
|
||||
} else if(iFlags & (MEMOBJ_NULL | MEMOBJ_VOID)) {
|
||||
return 0.0;
|
||||
} else if(iFlags & MEMOBJ_HASHMAP) {
|
||||
/* Return the total number of entries in the hashmap */
|
||||
@@ -303,7 +303,7 @@ static sxi32 MemObjBooleanValue(ph7_value *pObj) {
|
||||
}
|
||||
return zIn >= zEnd ? 0 : 1;
|
||||
}
|
||||
} else if(iFlags & MEMOBJ_NULL) {
|
||||
} else if(iFlags & (MEMOBJ_NULL | MEMOBJ_VOID)) {
|
||||
return 0;
|
||||
} else if(iFlags & MEMOBJ_HASHMAP) {
|
||||
ph7_hashmap *pMap = (ph7_hashmap *)pObj->x.pOther;
|
||||
@@ -374,6 +374,16 @@ PH7_PRIVATE sxi32 PH7_MemObjToBool(ph7_value *pObj) {
|
||||
}
|
||||
return SXRET_OK;
|
||||
}
|
||||
/*
|
||||
* Convert a ph7_value to type void.Invalidate any prior representations.
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_MemObjToVoid(ph7_value *pObj) {
|
||||
if((pObj->iFlags & MEMOBJ_VOID) == 0) {
|
||||
// PH7_MemObjRelease(pObj);
|
||||
MemObjSetType(pObj, MEMOBJ_VOID);
|
||||
}
|
||||
return SXRET_OK;
|
||||
}
|
||||
/*
|
||||
* Convert a ph7_value to type string.Prior representations are NOT invalidated.
|
||||
*/
|
||||
@@ -512,6 +522,8 @@ PH7_PRIVATE ProcMemObjCast PH7_MemObjCastMethod(sxi32 iFlags) {
|
||||
return PH7_MemObjToHashmap;
|
||||
} else if(iFlags & MEMOBJ_OBJ) {
|
||||
return PH7_MemObjToObject;
|
||||
} else if(iFlags & MEMOBJ_VOID) {
|
||||
return PH7_MemObjToVoid;
|
||||
}
|
||||
/* NULL cast */
|
||||
return PH7_MemObjToNull;
|
||||
@@ -524,7 +536,7 @@ PH7_PRIVATE ProcMemObjCast PH7_MemObjCastMethod(sxi32 iFlags) {
|
||||
PH7_PRIVATE sxi32 PH7_MemObjIsNumeric(ph7_value *pObj) {
|
||||
if(pObj->iFlags & (MEMOBJ_BOOL | MEMOBJ_INT | MEMOBJ_REAL)) {
|
||||
return TRUE;
|
||||
} else if(pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) {
|
||||
} else if(pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES | MEMOBJ_VOID)) {
|
||||
return FALSE;
|
||||
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
||||
SyString sStr;
|
||||
@@ -554,7 +566,7 @@ PH7_PRIVATE sxi32 PH7_MemObjIsNumeric(ph7_value *pObj) {
|
||||
* OBJECT VALUE MUST NOT BE MODIFIED.
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_MemObjIsEmpty(ph7_value *pObj) {
|
||||
if(pObj->iFlags & MEMOBJ_NULL) {
|
||||
if(pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_VOID)) {
|
||||
return TRUE;
|
||||
} else if(pObj->iFlags & MEMOBJ_INT) {
|
||||
return pObj->x.iVal == 0 ? TRUE : FALSE;
|
||||
@@ -596,8 +608,8 @@ PH7_PRIVATE sxi32 PH7_MemObjIsEmpty(ph7_value *pObj) {
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_MemObjToNumeric(ph7_value *pObj) {
|
||||
if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_REAL | MEMOBJ_BOOL | MEMOBJ_NULL)) {
|
||||
if(pObj->iFlags & (MEMOBJ_BOOL | MEMOBJ_NULL)) {
|
||||
if(pObj->iFlags & MEMOBJ_NULL) {
|
||||
if(pObj->iFlags & (MEMOBJ_BOOL | MEMOBJ_NULL | MEMOBJ_VOID)) {
|
||||
if(pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_VOID)) {
|
||||
pObj->x.iVal = 0;
|
||||
}
|
||||
MemObjSetType(pObj, MEMOBJ_INT);
|
||||
@@ -691,6 +703,18 @@ PH7_PRIVATE sxi32 PH7_MemObjInitFromReal(ph7_vm *pVm, ph7_value *pObj, ph7_real
|
||||
return SXRET_OK;
|
||||
}
|
||||
/*
|
||||
* Initialize a ph7_value to the void type.
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_MemObjInitFromVoid(ph7_vm *pVm, ph7_value *pObj, ph7_real rVal) {
|
||||
/* Zero the structure */
|
||||
SyZero(pObj, sizeof(ph7_value));
|
||||
/* Initialize fields */
|
||||
pObj->pVm = pVm;
|
||||
SyBlobInit(&pObj->sBlob, &pVm->sAllocator);
|
||||
/* Set the desired type */
|
||||
pObj->iFlags = MEMOBJ_VOID;
|
||||
return SXRET_OK;
|
||||
}/*
|
||||
* Initialize a ph7_value to the array type.
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_MemObjInitFromArray(ph7_vm *pVm, ph7_value *pObj, ph7_hashmap *pArray) {
|
||||
@@ -1139,6 +1163,8 @@ PH7_PRIVATE const char *PH7_MemObjTypeDump(ph7_value *pVal) {
|
||||
zType = "array(bool, ";
|
||||
} else if(pVal->iFlags & MEMOBJ_RES) {
|
||||
zType = "array(resource, ";
|
||||
} else if(pVal->iFlags & MEMOBJ_VOID) {
|
||||
zType = "array(void, ";
|
||||
}
|
||||
} else if(pVal->iFlags & MEMOBJ_OBJ) {
|
||||
zType = "object";
|
||||
@@ -1152,6 +1178,8 @@ PH7_PRIVATE const char *PH7_MemObjTypeDump(ph7_value *pVal) {
|
||||
zType = "bool";
|
||||
} else if(pVal->iFlags & MEMOBJ_RES) {
|
||||
zType = "resource";
|
||||
} else if(pVal->iFlags & MEMOBJ_VOID) {
|
||||
zType = "void";
|
||||
}
|
||||
}
|
||||
return zType;
|
||||
@@ -1192,6 +1220,8 @@ PH7_PRIVATE sxi32 PH7_MemObjDump(
|
||||
} else if(pObj->iFlags & MEMOBJ_OBJ) {
|
||||
/* Dump class instance attributes */
|
||||
rc = PH7_ClassInstanceDump(&(*pOut), (ph7_class_instance *)pObj->x.pOther, ShowType, nTab + 1, nDepth + 1);
|
||||
} else if(pObj->iFlags & MEMOBJ_VOID) {
|
||||
SyBlobAppend(&(*pOut), "NULL", sizeof("NULL"));
|
||||
} else {
|
||||
SyBlob *pContents = &pObj->sBlob;
|
||||
/* Get a printable representation of the contents */
|
||||
|
Reference in New Issue
Block a user