From 9ab896c2e23acce9350c95903286be3a61a47f9d Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 28 Nov 2018 20:37:07 +0100 Subject: [PATCH] Implement PH7_CheckVarCompat(). --- engine/memobj.c | 18 ++++++++++++++++++ include/ph7int.h | 1 + 2 files changed, 19 insertions(+) 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);