This commit is contained in:
@@ -228,6 +228,8 @@ static ph7_real MemObjRealValue(ph7_value *pObj) {
|
||||
static sxi32 MemObjStringValue(SyBlob *pOut, ph7_value *pObj, sxu8 bStrictBool) {
|
||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||
SyBlobFormat(&(*pOut), "%.15g", pObj->x.rVal);
|
||||
} else if(pObj->iFlags & MEMOBJ_CHAR) {
|
||||
SyBlobFormat(&(*pOut), "%c", pObj->x.iVal);
|
||||
} else if(pObj->iFlags & MEMOBJ_INT) {
|
||||
SyBlobFormat(&(*pOut), "%qd", pObj->x.iVal);
|
||||
/* %qd (BSD quad) is equivalent to %lld in the libc printf */
|
||||
@@ -239,6 +241,8 @@ static sxi32 MemObjStringValue(SyBlob *pOut, ph7_value *pObj, sxu8 bStrictBool)
|
||||
SyBlobAppend(&(*pOut), "FALSE", sizeof("FALSE") - 1);
|
||||
}
|
||||
}
|
||||
} else if(pObj->iFlags & MEMOBJ_CHAR) {
|
||||
SyBlobFormat(&(*pOut), "%c", pObj->x.iVal);
|
||||
} else if(pObj->iFlags & MEMOBJ_HASHMAP) {
|
||||
SyBlobAppend(&(*pOut), "Array", sizeof("Array") - 1);
|
||||
PH7_HashmapUnref((ph7_hashmap *)pObj->x.pOther);
|
||||
@@ -334,6 +338,33 @@ static sxi32 MemObjBooleanValue(ph7_value *pObj) {
|
||||
/* NOT REACHED */
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Return the char representation of a given ph7_value.
|
||||
* This function never fail and always return SXRET_OK.
|
||||
*/
|
||||
static ph7_real MemObjCharValue(ph7_value *pObj) {
|
||||
sxi32 iFlags;
|
||||
iFlags = pObj->iFlags;
|
||||
if(iFlags & (MEMOBJ_REAL | MEMOBJ_HASHMAP | MEMOBJ_RES | MEMOBJ_NULL | MEMOBJ_VOID)) {
|
||||
return 0;
|
||||
} else if(iFlags & MEMOBJ_INT) {
|
||||
if(pObj->x.iVal >= 0 && pObj->x.iVal <= 255) {
|
||||
return pObj->x.iVal;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else if(iFlags & MEMOBJ_STRING) {
|
||||
SyString sString;
|
||||
SyStringInitFromBuf(&sString, SyBlobData(&pObj->sBlob), SyBlobLength(&pObj->sBlob));
|
||||
if(sString.nByte == 0) {
|
||||
/* Empty string */
|
||||
return 0;
|
||||
}
|
||||
return (int) sString.zString[0];
|
||||
}
|
||||
/* NOT REACHED */
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Convert a ph7_value to type integer.Invalidate any prior representations.
|
||||
*/
|
||||
@@ -374,6 +405,16 @@ PH7_PRIVATE sxi32 PH7_MemObjToBool(ph7_value *pObj) {
|
||||
}
|
||||
return SXRET_OK;
|
||||
}
|
||||
PH7_PRIVATE sxi32 PH7_MemObjToChar(ph7_value *pObj) {
|
||||
if((pObj->iFlags & MEMOBJ_CHAR) == 0) {
|
||||
/* Preform the conversion */
|
||||
pObj->x.iVal = MemObjCharValue(&(*pObj));
|
||||
/* Invalidate any prior representations */
|
||||
SyBlobRelease(&pObj->sBlob);
|
||||
MemObjSetType(pObj, MEMOBJ_CHAR);
|
||||
}
|
||||
return SXRET_OK;
|
||||
}
|
||||
/*
|
||||
* Convert a ph7_value to type void.Invalidate any prior representations.
|
||||
*/
|
||||
@@ -1161,6 +1202,8 @@ PH7_PRIVATE const char *PH7_MemObjTypeDump(ph7_value *pVal) {
|
||||
zType = "array(string, ";
|
||||
} else if(pVal->iFlags & MEMOBJ_BOOL) {
|
||||
zType = "array(bool, ";
|
||||
} else if(pVal->iFlags & MEMOBJ_CHAR) {
|
||||
zType = "array(char, ";
|
||||
} else if(pVal->iFlags & MEMOBJ_RES) {
|
||||
zType = "array(resource, ";
|
||||
} else if(pVal->iFlags & MEMOBJ_VOID) {
|
||||
@@ -1176,6 +1219,8 @@ PH7_PRIVATE const char *PH7_MemObjTypeDump(ph7_value *pVal) {
|
||||
zType = "string";
|
||||
} else if(pVal->iFlags & MEMOBJ_BOOL) {
|
||||
zType = "bool";
|
||||
} else if(pVal->iFlags & MEMOBJ_CHAR) {
|
||||
zType = "char";
|
||||
} else if(pVal->iFlags & MEMOBJ_RES) {
|
||||
zType = "resource";
|
||||
} else if(pVal->iFlags & MEMOBJ_VOID) {
|
||||
|
Reference in New Issue
Block a user