Single variable cannot have many values of different types. This also saves some memory, because union allocates memory just for one of its members.
This commit is contained in:
parent
af1d59dab4
commit
eb79ed500e
@ -1217,7 +1217,7 @@ double ph7_value_to_double(ph7_value *pValue) {
|
|||||||
if(rc != PH7_OK) {
|
if(rc != PH7_OK) {
|
||||||
return (double)0;
|
return (double)0;
|
||||||
}
|
}
|
||||||
return (double)pValue->rVal;
|
return (double)pValue->x.rVal;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* [CAPIREF: ph7_value_to_string()]
|
* [CAPIREF: ph7_value_to_string()]
|
||||||
@ -1792,7 +1792,7 @@ int ph7_value_null(ph7_value *pVal) {
|
|||||||
int ph7_value_double(ph7_value *pVal, double Value) {
|
int ph7_value_double(ph7_value *pVal, double Value) {
|
||||||
/* Invalidate any prior representation */
|
/* Invalidate any prior representation */
|
||||||
PH7_MemObjRelease(pVal);
|
PH7_MemObjRelease(pVal);
|
||||||
pVal->rVal = (ph7_real)Value;
|
pVal->x.rVal = (ph7_real)Value;
|
||||||
MemObjSetType(pVal, MEMOBJ_REAL);
|
MemObjSetType(pVal, MEMOBJ_REAL);
|
||||||
return PH7_OK;
|
return PH7_OK;
|
||||||
}
|
}
|
||||||
|
@ -4668,7 +4668,7 @@ static void DoubleSum(ph7_context *pCtx, ph7_hashmap *pMap) {
|
|||||||
pObj = HashmapExtractNodeValue(pEntry);
|
pObj = HashmapExtractNodeValue(pEntry);
|
||||||
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
||||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
dSum += pObj->rVal;
|
dSum += pObj->x.rVal;
|
||||||
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
||||||
dSum += (double)pObj->x.iVal;
|
dSum += (double)pObj->x.iVal;
|
||||||
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
||||||
@ -4695,7 +4695,7 @@ static void Int64Sum(ph7_context *pCtx, ph7_hashmap *pMap) {
|
|||||||
pObj = HashmapExtractNodeValue(pEntry);
|
pObj = HashmapExtractNodeValue(pEntry);
|
||||||
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
||||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
nSum += (sxi64)pObj->rVal;
|
nSum += (sxi64)pObj->x.rVal;
|
||||||
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
||||||
nSum += pObj->x.iVal;
|
nSum += pObj->x.iVal;
|
||||||
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
||||||
@ -4769,7 +4769,7 @@ static void DoubleProd(ph7_context *pCtx, ph7_hashmap *pMap) {
|
|||||||
pObj = HashmapExtractNodeValue(pEntry);
|
pObj = HashmapExtractNodeValue(pEntry);
|
||||||
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
||||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
dProd *= pObj->rVal;
|
dProd *= pObj->x.rVal;
|
||||||
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
||||||
dProd *= (double)pObj->x.iVal;
|
dProd *= (double)pObj->x.iVal;
|
||||||
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
||||||
@ -4797,7 +4797,7 @@ static void Int64Prod(ph7_context *pCtx, ph7_hashmap *pMap) {
|
|||||||
pObj = HashmapExtractNodeValue(pEntry);
|
pObj = HashmapExtractNodeValue(pEntry);
|
||||||
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
if(pObj && (pObj->iFlags & (MEMOBJ_NULL | MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
|
||||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
nProd *= (sxi64)pObj->rVal;
|
nProd *= (sxi64)pObj->x.rVal;
|
||||||
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
} else if(pObj->iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
||||||
nProd *= pObj->x.iVal;
|
nProd *= pObj->x.iVal;
|
||||||
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
||||||
|
@ -39,7 +39,7 @@ static sxi64 MemObjRealToInt(ph7_value *pObj) {
|
|||||||
*/
|
*/
|
||||||
static const sxi64 maxInt = LARGEST_INT64;
|
static const sxi64 maxInt = LARGEST_INT64;
|
||||||
static const sxi64 minInt = SMALLEST_INT64;
|
static const sxi64 minInt = SMALLEST_INT64;
|
||||||
ph7_real r = pObj->rVal;
|
ph7_real r = pObj->x.rVal;
|
||||||
if(r < (ph7_real)minInt) {
|
if(r < (ph7_real)minInt) {
|
||||||
return minInt;
|
return minInt;
|
||||||
} else if(r > (ph7_real)maxInt) {
|
} else if(r > (ph7_real)maxInt) {
|
||||||
@ -178,7 +178,7 @@ static ph7_real MemObjRealValue(ph7_value *pObj) {
|
|||||||
sxi32 iFlags;
|
sxi32 iFlags;
|
||||||
iFlags = pObj->iFlags;
|
iFlags = pObj->iFlags;
|
||||||
if(iFlags & MEMOBJ_REAL) {
|
if(iFlags & MEMOBJ_REAL) {
|
||||||
return pObj->rVal;
|
return pObj->x.rVal;
|
||||||
} else if(iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
} else if(iFlags & (MEMOBJ_INT | MEMOBJ_BOOL)) {
|
||||||
return (ph7_real)pObj->x.iVal;
|
return (ph7_real)pObj->x.iVal;
|
||||||
} else if(iFlags & MEMOBJ_STRING) {
|
} else if(iFlags & MEMOBJ_STRING) {
|
||||||
@ -208,7 +208,7 @@ static ph7_real MemObjRealValue(ph7_value *pObj) {
|
|||||||
"__toFloat", sizeof("__toFloat") - 1, &sResult);
|
"__toFloat", sizeof("__toFloat") - 1, &sResult);
|
||||||
if(rc == SXRET_OK && (sResult.iFlags & MEMOBJ_REAL)) {
|
if(rc == SXRET_OK && (sResult.iFlags & MEMOBJ_REAL)) {
|
||||||
/* Extract method return value */
|
/* Extract method return value */
|
||||||
rVal = sResult.rVal;
|
rVal = sResult.x.rVal;
|
||||||
}
|
}
|
||||||
PH7_ClassInstanceUnref((ph7_class_instance *)pObj->x.pOther);
|
PH7_ClassInstanceUnref((ph7_class_instance *)pObj->x.pOther);
|
||||||
PH7_MemObjRelease(&sResult);
|
PH7_MemObjRelease(&sResult);
|
||||||
@ -225,7 +225,7 @@ static ph7_real MemObjRealValue(ph7_value *pObj) {
|
|||||||
*/
|
*/
|
||||||
static sxi32 MemObjStringValue(SyBlob *pOut, ph7_value *pObj, sxu8 bStrictBool) {
|
static sxi32 MemObjStringValue(SyBlob *pOut, ph7_value *pObj, sxu8 bStrictBool) {
|
||||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
SyBlobFormat(&(*pOut), "%.15g", pObj->rVal);
|
SyBlobFormat(&(*pOut), "%.15g", pObj->x.rVal);
|
||||||
} else if(pObj->iFlags & MEMOBJ_INT) {
|
} else if(pObj->iFlags & MEMOBJ_INT) {
|
||||||
SyBlobFormat(&(*pOut), "%qd", pObj->x.iVal);
|
SyBlobFormat(&(*pOut), "%qd", pObj->x.iVal);
|
||||||
/* %qd (BSD quad) is equivalent to %lld in the libc printf */
|
/* %qd (BSD quad) is equivalent to %lld in the libc printf */
|
||||||
@ -277,7 +277,7 @@ static sxi32 MemObjBooleanValue(ph7_value *pObj) {
|
|||||||
sxi32 iFlags;
|
sxi32 iFlags;
|
||||||
iFlags = pObj->iFlags;
|
iFlags = pObj->iFlags;
|
||||||
if(iFlags & MEMOBJ_REAL) {
|
if(iFlags & MEMOBJ_REAL) {
|
||||||
return pObj->rVal != 0.0 ? 1 : 0;
|
return pObj->x.rVal != 0.0 ? 1 : 0;
|
||||||
} else if(iFlags & MEMOBJ_INT) {
|
} else if(iFlags & MEMOBJ_INT) {
|
||||||
return pObj->x.iVal ? 1 : 0;
|
return pObj->x.iVal ? 1 : 0;
|
||||||
} else if(iFlags & MEMOBJ_STRING) {
|
} else if(iFlags & MEMOBJ_STRING) {
|
||||||
@ -349,7 +349,7 @@ PH7_PRIVATE sxi32 PH7_MemObjToInteger(ph7_value *pObj) {
|
|||||||
PH7_PRIVATE sxi32 PH7_MemObjToReal(ph7_value *pObj) {
|
PH7_PRIVATE sxi32 PH7_MemObjToReal(ph7_value *pObj) {
|
||||||
if((pObj->iFlags & MEMOBJ_REAL) == 0) {
|
if((pObj->iFlags & MEMOBJ_REAL) == 0) {
|
||||||
/* Preform the conversion */
|
/* Preform the conversion */
|
||||||
pObj->rVal = MemObjRealValue(&(*pObj));
|
pObj->x.rVal = MemObjRealValue(&(*pObj));
|
||||||
/* Invalidate any prior representations */
|
/* Invalidate any prior representations */
|
||||||
SyBlobRelease(&pObj->sBlob);
|
SyBlobRelease(&pObj->sBlob);
|
||||||
MemObjSetType(pObj, MEMOBJ_REAL);
|
MemObjSetType(pObj, MEMOBJ_REAL);
|
||||||
@ -554,7 +554,7 @@ PH7_PRIVATE sxi32 PH7_MemObjIsEmpty(ph7_value *pObj) {
|
|||||||
} else if(pObj->iFlags & MEMOBJ_INT) {
|
} else if(pObj->iFlags & MEMOBJ_INT) {
|
||||||
return pObj->x.iVal == 0 ? TRUE : FALSE;
|
return pObj->x.iVal == 0 ? TRUE : FALSE;
|
||||||
} else if(pObj->iFlags & MEMOBJ_REAL) {
|
} else if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
return pObj->rVal == (ph7_real)0 ? TRUE : FALSE;
|
return pObj->x.rVal == (ph7_real)0 ? TRUE : FALSE;
|
||||||
} else if(pObj->iFlags & MEMOBJ_BOOL) {
|
} else if(pObj->iFlags & MEMOBJ_BOOL) {
|
||||||
return !pObj->x.iVal;
|
return !pObj->x.iVal;
|
||||||
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
} else if(pObj->iFlags & MEMOBJ_STRING) {
|
||||||
@ -681,7 +681,7 @@ PH7_PRIVATE sxi32 PH7_MemObjInitFromReal(ph7_vm *pVm, ph7_value *pObj, ph7_real
|
|||||||
pObj->pVm = pVm;
|
pObj->pVm = pVm;
|
||||||
SyBlobInit(&pObj->sBlob, &pVm->sAllocator);
|
SyBlobInit(&pObj->sBlob, &pVm->sAllocator);
|
||||||
/* Set the desired type */
|
/* Set the desired type */
|
||||||
pObj->rVal = rVal;
|
pObj->x.rVal = rVal;
|
||||||
pObj->iFlags = MEMOBJ_REAL;
|
pObj->iFlags = MEMOBJ_REAL;
|
||||||
return SXRET_OK;
|
return SXRET_OK;
|
||||||
}
|
}
|
||||||
@ -987,11 +987,11 @@ Numeric:
|
|||||||
if((pObj1->iFlags & MEMOBJ_REAL) == 0) {
|
if((pObj1->iFlags & MEMOBJ_REAL) == 0) {
|
||||||
PH7_MemObjToReal(pObj1);
|
PH7_MemObjToReal(pObj1);
|
||||||
}
|
}
|
||||||
r1 = pObj1->rVal;
|
r1 = pObj1->x.rVal;
|
||||||
if((pObj2->iFlags & MEMOBJ_REAL) == 0) {
|
if((pObj2->iFlags & MEMOBJ_REAL) == 0) {
|
||||||
PH7_MemObjToReal(pObj2);
|
PH7_MemObjToReal(pObj2);
|
||||||
}
|
}
|
||||||
r2 = pObj2->rVal;
|
r2 = pObj2->x.rVal;
|
||||||
if(r1 > r2) {
|
if(r1 > r2) {
|
||||||
return 1;
|
return 1;
|
||||||
} else if(r1 < r2) {
|
} else if(r1 < r2) {
|
||||||
@ -1037,9 +1037,9 @@ PH7_PRIVATE sxi32 PH7_MemObjAdd(ph7_value *pObj1, ph7_value *pObj2, int bAddStor
|
|||||||
if((pObj2->iFlags & MEMOBJ_REAL) == 0) {
|
if((pObj2->iFlags & MEMOBJ_REAL) == 0) {
|
||||||
PH7_MemObjToReal(pObj2);
|
PH7_MemObjToReal(pObj2);
|
||||||
}
|
}
|
||||||
a = pObj1->rVal;
|
a = pObj1->x.rVal;
|
||||||
b = pObj2->rVal;
|
b = pObj2->x.rVal;
|
||||||
pObj1->rVal = a + b;
|
pObj1->x.rVal = a + b;
|
||||||
MemObjSetType(pObj1, MEMOBJ_REAL);
|
MemObjSetType(pObj1, MEMOBJ_REAL);
|
||||||
} else {
|
} else {
|
||||||
/* Integer arithmetic */
|
/* Integer arithmetic */
|
||||||
|
42
engine/vm.c
42
engine/vm.c
@ -2850,7 +2850,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
/* Force a numeric cast */
|
/* Force a numeric cast */
|
||||||
PH7_MemObjToNumeric(pObj);
|
PH7_MemObjToNumeric(pObj);
|
||||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
pObj->rVal++;
|
pObj->x.rVal++;
|
||||||
} else {
|
} else {
|
||||||
pObj->x.iVal++;
|
pObj->x.iVal++;
|
||||||
MemObjSetType(pTos, MEMOBJ_INT);
|
MemObjSetType(pTos, MEMOBJ_INT);
|
||||||
@ -2866,7 +2866,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
PH7_MemObjToNumeric(pTos);
|
PH7_MemObjToNumeric(pTos);
|
||||||
/* Pre-increment */
|
/* Pre-increment */
|
||||||
if(pTos->iFlags & MEMOBJ_REAL) {
|
if(pTos->iFlags & MEMOBJ_REAL) {
|
||||||
pTos->rVal++;
|
pTos->x.rVal++;
|
||||||
} else {
|
} else {
|
||||||
pTos->x.iVal++;
|
pTos->x.iVal++;
|
||||||
MemObjSetType(pTos, MEMOBJ_INT);
|
MemObjSetType(pTos, MEMOBJ_INT);
|
||||||
@ -2897,7 +2897,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
/* Force a numeric cast */
|
/* Force a numeric cast */
|
||||||
PH7_MemObjToNumeric(pObj);
|
PH7_MemObjToNumeric(pObj);
|
||||||
if(pObj->iFlags & MEMOBJ_REAL) {
|
if(pObj->iFlags & MEMOBJ_REAL) {
|
||||||
pObj->rVal--;
|
pObj->x.rVal--;
|
||||||
} else {
|
} else {
|
||||||
pObj->x.iVal--;
|
pObj->x.iVal--;
|
||||||
MemObjSetType(pTos, MEMOBJ_INT);
|
MemObjSetType(pTos, MEMOBJ_INT);
|
||||||
@ -2911,7 +2911,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
if(pInstr->iP1) {
|
if(pInstr->iP1) {
|
||||||
/* Pre-decrement */
|
/* Pre-decrement */
|
||||||
if(pTos->iFlags & MEMOBJ_REAL) {
|
if(pTos->iFlags & MEMOBJ_REAL) {
|
||||||
pTos->rVal--;
|
pTos->x.rVal--;
|
||||||
} else {
|
} else {
|
||||||
pTos->x.iVal--;
|
pTos->x.iVal--;
|
||||||
MemObjSetType(pTos, MEMOBJ_INT);
|
MemObjSetType(pTos, MEMOBJ_INT);
|
||||||
@ -2934,7 +2934,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
/* Force a numeric (integer,real or both) cast */
|
/* Force a numeric (integer,real or both) cast */
|
||||||
PH7_MemObjToNumeric(pTos);
|
PH7_MemObjToNumeric(pTos);
|
||||||
if(pTos->iFlags & MEMOBJ_REAL) {
|
if(pTos->iFlags & MEMOBJ_REAL) {
|
||||||
pTos->rVal = -pTos->rVal;
|
pTos->x.rVal = -pTos->x.rVal;
|
||||||
}
|
}
|
||||||
if(pTos->iFlags & MEMOBJ_INT) {
|
if(pTos->iFlags & MEMOBJ_INT) {
|
||||||
pTos->x.iVal = -pTos->x.iVal;
|
pTos->x.iVal = -pTos->x.iVal;
|
||||||
@ -2954,7 +2954,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
/* Force a numeric (integer,real or both) cast */
|
/* Force a numeric (integer,real or both) cast */
|
||||||
PH7_MemObjToNumeric(pTos);
|
PH7_MemObjToNumeric(pTos);
|
||||||
if(pTos->iFlags & MEMOBJ_REAL) {
|
if(pTos->iFlags & MEMOBJ_REAL) {
|
||||||
pTos->rVal = +pTos->rVal;
|
pTos->x.rVal = +pTos->x.rVal;
|
||||||
}
|
}
|
||||||
if(pTos->iFlags & MEMOBJ_INT) {
|
if(pTos->iFlags & MEMOBJ_INT) {
|
||||||
pTos->x.iVal = +pTos->x.iVal;
|
pTos->x.iVal = +pTos->x.iVal;
|
||||||
@ -3023,11 +3023,11 @@ static sxi32 VmByteCodeExec(
|
|||||||
if((pNos->iFlags & MEMOBJ_REAL) == 0) {
|
if((pNos->iFlags & MEMOBJ_REAL) == 0) {
|
||||||
PH7_MemObjToReal(pNos);
|
PH7_MemObjToReal(pNos);
|
||||||
}
|
}
|
||||||
a = pNos->rVal;
|
a = pNos->x.rVal;
|
||||||
b = pTos->rVal;
|
b = pTos->x.rVal;
|
||||||
r = a * b;
|
r = a * b;
|
||||||
/* Push the result */
|
/* Push the result */
|
||||||
pNos->rVal = r;
|
pNos->x.rVal = r;
|
||||||
MemObjSetType(pNos, MEMOBJ_REAL);
|
MemObjSetType(pNos, MEMOBJ_REAL);
|
||||||
} else {
|
} else {
|
||||||
/* Integer arithmetic */
|
/* Integer arithmetic */
|
||||||
@ -3153,11 +3153,11 @@ static sxi32 VmByteCodeExec(
|
|||||||
if((pNos->iFlags & MEMOBJ_REAL) == 0) {
|
if((pNos->iFlags & MEMOBJ_REAL) == 0) {
|
||||||
PH7_MemObjToReal(pNos);
|
PH7_MemObjToReal(pNos);
|
||||||
}
|
}
|
||||||
a = pNos->rVal;
|
a = pNos->x.rVal;
|
||||||
b = pTos->rVal;
|
b = pTos->x.rVal;
|
||||||
r = a - b;
|
r = a - b;
|
||||||
/* Push the result */
|
/* Push the result */
|
||||||
pNos->rVal = r;
|
pNos->x.rVal = r;
|
||||||
MemObjSetType(pNos, MEMOBJ_REAL);
|
MemObjSetType(pNos, MEMOBJ_REAL);
|
||||||
} else {
|
} else {
|
||||||
/* Integer arithmetic */
|
/* Integer arithmetic */
|
||||||
@ -3195,11 +3195,11 @@ static sxi32 VmByteCodeExec(
|
|||||||
if((pNos->iFlags & MEMOBJ_REAL) == 0) {
|
if((pNos->iFlags & MEMOBJ_REAL) == 0) {
|
||||||
PH7_MemObjToReal(pNos);
|
PH7_MemObjToReal(pNos);
|
||||||
}
|
}
|
||||||
a = pTos->rVal;
|
a = pTos->x.rVal;
|
||||||
b = pNos->rVal;
|
b = pNos->x.rVal;
|
||||||
r = a - b;
|
r = a - b;
|
||||||
/* Push the result */
|
/* Push the result */
|
||||||
pNos->rVal = r;
|
pNos->x.rVal = r;
|
||||||
MemObjSetType(pNos, MEMOBJ_REAL);
|
MemObjSetType(pNos, MEMOBJ_REAL);
|
||||||
} else {
|
} else {
|
||||||
/* Integer arithmetic */
|
/* Integer arithmetic */
|
||||||
@ -3329,8 +3329,8 @@ static sxi32 VmByteCodeExec(
|
|||||||
PH7_MemObjToReal(pNos);
|
PH7_MemObjToReal(pNos);
|
||||||
}
|
}
|
||||||
/* Perform the requested operation */
|
/* Perform the requested operation */
|
||||||
a = pNos->rVal;
|
a = pNos->x.rVal;
|
||||||
b = pTos->rVal;
|
b = pTos->x.rVal;
|
||||||
if(b == 0) {
|
if(b == 0) {
|
||||||
/* Division by zero */
|
/* Division by zero */
|
||||||
r = 0;
|
r = 0;
|
||||||
@ -3339,7 +3339,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
} else {
|
} else {
|
||||||
r = a / b;
|
r = a / b;
|
||||||
/* Push the result */
|
/* Push the result */
|
||||||
pNos->rVal = r;
|
pNos->x.rVal = r;
|
||||||
MemObjSetType(pNos, MEMOBJ_REAL);
|
MemObjSetType(pNos, MEMOBJ_REAL);
|
||||||
}
|
}
|
||||||
VmPopOperand(&pTos, 1);
|
VmPopOperand(&pTos, 1);
|
||||||
@ -3370,8 +3370,8 @@ static sxi32 VmByteCodeExec(
|
|||||||
PH7_MemObjToReal(pNos);
|
PH7_MemObjToReal(pNos);
|
||||||
}
|
}
|
||||||
/* Perform the requested operation */
|
/* Perform the requested operation */
|
||||||
a = pTos->rVal;
|
a = pTos->x.rVal;
|
||||||
b = pNos->rVal;
|
b = pNos->x.rVal;
|
||||||
if(b == 0) {
|
if(b == 0) {
|
||||||
/* Division by zero */
|
/* Division by zero */
|
||||||
r = 0;
|
r = 0;
|
||||||
@ -3380,7 +3380,7 @@ static sxi32 VmByteCodeExec(
|
|||||||
} else {
|
} else {
|
||||||
r = a / b;
|
r = a / b;
|
||||||
/* Push the result */
|
/* Push the result */
|
||||||
pNos->rVal = r;
|
pNos->x.rVal = r;
|
||||||
MemObjSetType(pNos, MEMOBJ_REAL);
|
MemObjSetType(pNos, MEMOBJ_REAL);
|
||||||
}
|
}
|
||||||
if(pTos->nIdx == SXU32_HIGH) {
|
if(pTos->nIdx == SXU32_HIGH) {
|
||||||
|
@ -619,9 +619,9 @@ struct SHA1Context {
|
|||||||
* of the same value.
|
* of the same value.
|
||||||
*/
|
*/
|
||||||
struct ph7_value {
|
struct ph7_value {
|
||||||
ph7_real rVal; /* Real value */
|
|
||||||
union {
|
union {
|
||||||
sxi64 iVal; /* Integer value */
|
sxi64 iVal; /* Integer value */
|
||||||
|
ph7_real rVal; /* Real value */
|
||||||
void *pOther; /* Other values (Object, Array, Resource, Namespace, etc.) */
|
void *pOther; /* Other values (Object, Array, Resource, Namespace, etc.) */
|
||||||
} x;
|
} x;
|
||||||
sxi32 iFlags; /* Control flags (see below) */
|
sxi32 iFlags; /* Control flags (see below) */
|
||||||
|
Loading…
Reference in New Issue
Block a user