diff --git a/engine/memobj.c b/engine/memobj.c index 3e687a5..b765397 100644 --- a/engine/memobj.c +++ b/engine/memobj.c @@ -359,6 +359,24 @@ static ph7_real MemObjCharValue(ph7_value *pObj) { /* NOT REACHED */ return 0; } +/* + * Checks a ph7_value variable compatibility with nType data type. + */ +PH7_PRIVATE sxi32 PH7_CheckVarCompat(ph7_value *pObj, int nType) { + if(nType == MEMOBJ_REAL && (pObj->iFlags & MEMOBJ_INT)) { + return SXRET_OK; + } else if(nType == MEMOBJ_CHAR && (pObj->iFlags & MEMOBJ_INT)) { + return SXRET_OK; + } else if(nType == MEMOBJ_CHAR && (pObj->iFlags & MEMOBJ_STRING)) { + int len = SyBlobLength(&pObj->sBlob); + if(len == 0 || len == 1) { + return SXRET_OK; + } + } else if(nType == MEMOBJ_CALL && (pObj->iFlags & MEMOBJ_STRING)) { + return SXRET_OK; + } + return SXERR_NOMATCH; +} /* * Convert a ph7_value to type integer.Invalidate any prior representations. */ diff --git a/include/ph7int.h b/include/ph7int.h index 8b8fc27..55458c7 100644 --- a/include/ph7int.h +++ b/include/ph7int.h @@ -1659,6 +1659,7 @@ PH7_PRIVATE sxi32 PH7_MemObjToNull(ph7_value *pObj); PH7_PRIVATE sxi32 PH7_MemObjToReal(ph7_value *pObj); PH7_PRIVATE sxi32 PH7_MemObjToInteger(ph7_value *pObj); PH7_PRIVATE sxi32 PH7_MemObjToBool(ph7_value *pObj); +PH7_PRIVATE sxi32 PH7_CheckVarCompat(ph7_value *pObj, int nType); PH7_PRIVATE sxi64 PH7_TokenValueToInt64(SyString *pData); /* lex.c function prototypes */ PH7_PRIVATE sxi32 PH7_TokenizeRawText(const char *zInput, sxu32 nLen, SySet *pOut);