19991117-10:51 GMT+1 Victor Szel <info@szelvesz.hu>
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
19991117-10:51 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
* source/compiler/expropt.c
|
||||
! Fixed the compile-time calculation of numeric operations with results
|
||||
larger than LONG.
|
||||
% Compile-time calculation of numeric operations - Removed doubled
|
||||
calculation code.
|
||||
|
||||
19991117-03:15 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
* source/vm/hvm.c
|
||||
! Added error substitution to hb_vmForTest(), now some more RTL_TESTs pass.
|
||||
|
||||
@@ -3911,11 +3911,11 @@ static HB_EXPR_FUNC( hb_compExprUsePlus )
|
||||
{
|
||||
case HB_ET_LONG:
|
||||
{
|
||||
double dVal = pLeft->value.asNum.lVal + pRight->value.asNum.lVal;
|
||||
double dVal = ( double ) pLeft->value.asNum.lVal + ( double ) pRight->value.asNum.lVal;
|
||||
|
||||
if( ( double )LONG_MIN <= dVal && dVal <= ( double )LONG_MAX )
|
||||
if( ( double ) LONG_MIN <= dVal && dVal <= ( double ) LONG_MAX )
|
||||
{
|
||||
pSelf->value.asNum.lVal = pLeft->value.asNum.lVal + pRight->value.asNum.lVal;
|
||||
pSelf->value.asNum.lVal = ( long ) dVal;
|
||||
pSelf->value.asNum.bDec = 0;
|
||||
pSelf->value.asNum.NumType = HB_ET_LONG;
|
||||
}
|
||||
@@ -4058,11 +4058,11 @@ static HB_EXPR_FUNC( hb_compExprUseMinus )
|
||||
{
|
||||
case HB_ET_LONG:
|
||||
{
|
||||
double dVal = pLeft->value.asNum.lVal - pRight->value.asNum.lVal;
|
||||
double dVal = ( double ) pLeft->value.asNum.lVal - ( double ) pRight->value.asNum.lVal;
|
||||
|
||||
if( ( double )LONG_MIN <= dVal && dVal <= ( double )LONG_MAX )
|
||||
if( ( double ) LONG_MIN <= dVal && dVal <= ( double ) LONG_MAX )
|
||||
{
|
||||
pSelf->value.asNum.lVal = pLeft->value.asNum.lVal - pRight->value.asNum.lVal;
|
||||
pSelf->value.asNum.lVal = ( long ) dVal;
|
||||
pSelf->value.asNum.bDec = 0;
|
||||
pSelf->value.asNum.NumType = HB_ET_LONG;
|
||||
}
|
||||
@@ -4185,11 +4185,11 @@ static HB_EXPR_FUNC( hb_compExprUseMult )
|
||||
{
|
||||
case HB_ET_LONG:
|
||||
{
|
||||
double dVal = pLeft->value.asNum.lVal * pRight->value.asNum.lVal;
|
||||
double dVal = ( double ) pLeft->value.asNum.lVal * ( double ) pRight->value.asNum.lVal;
|
||||
|
||||
if( ( double )LONG_MIN <= dVal && dVal <= ( double )LONG_MAX )
|
||||
if( ( double ) LONG_MIN <= dVal && dVal <= ( double ) LONG_MAX )
|
||||
{
|
||||
pSelf->value.asNum.lVal = pLeft->value.asNum.lVal * pRight->value.asNum.lVal;
|
||||
pSelf->value.asNum.lVal = ( long ) dVal;
|
||||
pSelf->value.asNum.bDec = 0;
|
||||
pSelf->value.asNum.NumType = HB_ET_LONG;
|
||||
}
|
||||
@@ -4306,12 +4306,12 @@ static HB_EXPR_FUNC( hb_compExprUseDiv )
|
||||
case HB_ET_LONG:
|
||||
{
|
||||
if( pRight->value.asNum.lVal )
|
||||
dVal = ( double )pLeft->value.asNum.lVal / ( double )pRight->value.asNum.lVal;
|
||||
dVal = ( double ) pLeft->value.asNum.lVal / ( double ) pRight->value.asNum.lVal;
|
||||
|
||||
if( fmod( dVal, 1.0 ) == 0.0 )
|
||||
{
|
||||
/* Return integer results as long */
|
||||
pSelf->value.asNum.lVal = dVal;
|
||||
pSelf->value.asNum.lVal = ( long ) dVal;
|
||||
pSelf->value.asNum.bDec = 0;
|
||||
pSelf->value.asNum.NumType = HB_ET_LONG;
|
||||
}
|
||||
@@ -4444,7 +4444,7 @@ static HB_EXPR_FUNC( hb_compExprUseMod )
|
||||
else
|
||||
break; /* QUESTION: should we generate a warning or error here */
|
||||
|
||||
if( ( double )LONG_MIN <= dVal && dVal <= ( double )LONG_MAX )
|
||||
if( ( double ) LONG_MIN <= dVal && dVal <= ( double ) LONG_MAX )
|
||||
{
|
||||
pSelf->value.asNum.lVal = ( long ) dVal;
|
||||
pSelf->value.asNum.bDec = 0;
|
||||
|
||||
Reference in New Issue
Block a user