From af1d59dab45174594635127f620e83714ae0343b Mon Sep 17 00:00:00 2001 From: belliash Date: Fri, 7 Sep 2018 06:49:50 +0200 Subject: [PATCH] Don't try to get an integer representation of float. --- engine/api.c | 2 -- engine/memobj.c | 36 ------------------------------------ engine/vm.c | 18 ------------------ include/ph7int.h | 1 - 4 files changed, 57 deletions(-) diff --git a/engine/api.c b/engine/api.c index 03aa354..496463e 100644 --- a/engine/api.c +++ b/engine/api.c @@ -1794,8 +1794,6 @@ int ph7_value_double(ph7_value *pVal, double Value) { PH7_MemObjRelease(pVal); pVal->rVal = (ph7_real)Value; MemObjSetType(pVal, MEMOBJ_REAL); - /* Try to get an integer representation also */ - PH7_MemObjTryInteger(pVal); return PH7_OK; } /* diff --git a/engine/memobj.c b/engine/memobj.c index 0c77a34..a089df1 100644 --- a/engine/memobj.c +++ b/engine/memobj.c @@ -329,29 +329,6 @@ static sxi32 MemObjBooleanValue(ph7_value *pObj) { /* NOT REACHED */ return 0; } -/* - * If the ph7_value is of type real,try to make it an integer also. - */ -static sxi32 MemObjTryIntger(ph7_value *pObj) { - pObj->x.iVal = MemObjRealToInt(&(*pObj)); - /* Only mark the value as an integer if - ** - ** (1) the round-trip conversion real->int->real is a no-op, and - ** (2) The integer is neither the largest nor the smallest - ** possible integer - ** - ** The second and third terms in the following conditional enforces - ** the second condition under the assumption that addition overflow causes - ** values to wrap around. On x86 hardware, the third term is always - ** true and could be omitted. But we leave it in because other - ** architectures might behave differently. - */ - if(pObj->rVal == (ph7_real)pObj->x.iVal && pObj->x.iVal > SMALLEST_INT64 - && pObj->x.iVal < LARGEST_INT64) { - pObj->iFlags |= MEMOBJ_INT; - } - return SXRET_OK; -} /* * Convert a ph7_value to type integer.Invalidate any prior representations. */ @@ -653,17 +630,6 @@ PH7_PRIVATE sxi32 PH7_MemObjToNumeric(ph7_value *pObj) { } return SXRET_OK; } -/* - * Try a get an integer representation of the given ph7_value. - * If the ph7_value is not of type real,this function is a no-op. - */ -PH7_PRIVATE sxi32 PH7_MemObjTryInteger(ph7_value *pObj) { - if(pObj->iFlags & MEMOBJ_REAL) { - /* Work only with reals */ - MemObjTryIntger(&(*pObj)); - } - return SXRET_OK; -} /* * Initialize a ph7_value to the null type. */ @@ -1075,8 +1041,6 @@ PH7_PRIVATE sxi32 PH7_MemObjAdd(ph7_value *pObj1, ph7_value *pObj2, int bAddStor b = pObj2->rVal; pObj1->rVal = a + b; MemObjSetType(pObj1, MEMOBJ_REAL); - /* Try to get an integer representation also */ - MemObjTryIntger(&(*pObj1)); } else { /* Integer arithmetic */ sxi64 a, b; diff --git a/engine/vm.c b/engine/vm.c index 9715c55..917bea0 100644 --- a/engine/vm.c +++ b/engine/vm.c @@ -2851,8 +2851,6 @@ static sxi32 VmByteCodeExec( PH7_MemObjToNumeric(pObj); if(pObj->iFlags & MEMOBJ_REAL) { pObj->rVal++; - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pTos); } else { pObj->x.iVal++; MemObjSetType(pTos, MEMOBJ_INT); @@ -2869,8 +2867,6 @@ static sxi32 VmByteCodeExec( /* Pre-increment */ if(pTos->iFlags & MEMOBJ_REAL) { pTos->rVal++; - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pTos); } else { pTos->x.iVal++; MemObjSetType(pTos, MEMOBJ_INT); @@ -2902,8 +2898,6 @@ static sxi32 VmByteCodeExec( PH7_MemObjToNumeric(pObj); if(pObj->iFlags & MEMOBJ_REAL) { pObj->rVal--; - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pTos); } else { pObj->x.iVal--; MemObjSetType(pTos, MEMOBJ_INT); @@ -2918,8 +2912,6 @@ static sxi32 VmByteCodeExec( /* Pre-decrement */ if(pTos->iFlags & MEMOBJ_REAL) { pTos->rVal--; - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pTos); } else { pTos->x.iVal--; MemObjSetType(pTos, MEMOBJ_INT); @@ -3037,8 +3029,6 @@ static sxi32 VmByteCodeExec( /* Push the result */ pNos->rVal = r; MemObjSetType(pNos, MEMOBJ_REAL); - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pNos); } else { /* Integer arithmetic */ sxi64 a, b, r; @@ -3169,8 +3159,6 @@ static sxi32 VmByteCodeExec( /* Push the result */ pNos->rVal = r; MemObjSetType(pNos, MEMOBJ_REAL); - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pNos); } else { /* Integer arithmetic */ sxi64 a, b, r; @@ -3213,8 +3201,6 @@ static sxi32 VmByteCodeExec( /* Push the result */ pNos->rVal = r; MemObjSetType(pNos, MEMOBJ_REAL); - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pNos); } else { /* Integer arithmetic */ sxi64 a, b, r; @@ -3355,8 +3341,6 @@ static sxi32 VmByteCodeExec( /* Push the result */ pNos->rVal = r; MemObjSetType(pNos, MEMOBJ_REAL); - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pNos); } VmPopOperand(&pTos, 1); break; @@ -3398,8 +3382,6 @@ static sxi32 VmByteCodeExec( /* Push the result */ pNos->rVal = r; MemObjSetType(pNos, MEMOBJ_REAL); - /* Try to get an integer representation */ - PH7_MemObjTryInteger(pNos); } if(pTos->nIdx == SXU32_HIGH) { PH7_VmThrowError(&(*pVm), PH7_CTX_ERR, "Cannot perform assignment on a constant class attribute"); diff --git a/include/ph7int.h b/include/ph7int.h index 427a6ed..69cec31 100644 --- a/include/ph7int.h +++ b/include/ph7int.h @@ -1642,7 +1642,6 @@ PH7_PRIVATE sxi32 PH7_MemObjStore(ph7_value *pSrc, ph7_value *pDest); PH7_PRIVATE sxi32 PH7_MemObjLoad(ph7_value *pSrc, ph7_value *pDest); PH7_PRIVATE sxi32 PH7_MemObjRelease(ph7_value *pObj); PH7_PRIVATE sxi32 PH7_MemObjToNumeric(ph7_value *pObj); -PH7_PRIVATE sxi32 PH7_MemObjTryInteger(ph7_value *pObj); PH7_PRIVATE ProcMemObjCast PH7_MemObjCastMethod(sxi32 iFlags); PH7_PRIVATE sxi32 PH7_MemObjIsNumeric(ph7_value *pObj); PH7_PRIVATE sxi32 PH7_MemObjIsEmpty(ph7_value *pObj);