diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 3f29351600..35a8713b38 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,12 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-25 12:49 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/vm/hvm.c + * harbour/source/common/expropt2.c + * cleaned casting in date and timestamp math operations to use exactly + the same conversions in all places in compiled and HVM + 2009-08-25 10:51 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * bin/postinst.bat ! Fixed to work without HB_TOP value. Regression after recent change. diff --git a/harbour/source/common/expropt2.c b/harbour/source/common/expropt2.c index c1d447c812..96adfe3035 100644 --- a/harbour/source/common/expropt2.c +++ b/harbour/source/common/expropt2.c @@ -554,9 +554,9 @@ HB_EXPR_PTR hb_compExprReduceMinus( HB_EXPR_PTR pSelf, HB_COMP_DECL ) else if( pLeft->ExprType == HB_ET_DATE && pRight->ExprType == HB_ET_NUMERIC ) { if( pRight->value.asNum.NumType == HB_ET_LONG ) - pSelf->value.asDate.lDate = ( long ) ( ( HB_LONG ) pLeft->value.asDate.lDate - pRight->value.asNum.val.l ); + pSelf->value.asDate.lDate = pLeft->value.asDate.lDate - ( long ) pRight->value.asNum.val.l; else - pSelf->value.asDate.lDate = ( long ) ( ( HB_LONG ) pLeft->value.asDate.lDate - ( HB_LONG ) pRight->value.asNum.val.d ); + pSelf->value.asDate.lDate = pLeft->value.asDate.lDate - ( long ) ( unsigned long ) pRight->value.asNum.val.d; pSelf->value.asDate.lTime = 0; pSelf->ExprType = HB_ET_DATE; pSelf->ValType = HB_EV_DATE; @@ -566,7 +566,7 @@ HB_EXPR_PTR hb_compExprReduceMinus( HB_EXPR_PTR pSelf, HB_COMP_DECL ) else if( pLeft->ExprType == HB_ET_TIMESTAMP && pRight->ExprType == HB_ET_NUMERIC ) { if( pRight->value.asNum.NumType == HB_ET_LONG ) - hb_compExprReduceTimeStampPut( pSelf, ( long ) ( pLeft->value.asDate.lDate - pRight->value.asNum.val.l ), + hb_compExprReduceTimeStampPut( pSelf, pLeft->value.asDate.lDate - ( long ) pRight->value.asNum.val.l, pLeft->value.asDate.lTime ); else hb_compExprReduceTimeStampAdd( pSelf, pLeft, - pRight->value.asNum.val.d ); @@ -757,9 +757,9 @@ HB_EXPR_PTR hb_compExprReducePlus( HB_EXPR_PTR pSelf, HB_COMP_DECL ) else if( pRight->ExprType == HB_ET_DATE ) { if( pLeft->value.asNum.NumType == HB_ET_LONG ) - pSelf->value.asDate.lDate = ( long ) ( ( HB_LONG ) pRight->value.asDate.lDate + pLeft->value.asNum.val.l ); + pSelf->value.asDate.lDate = pRight->value.asDate.lDate + ( long ) pLeft->value.asNum.val.l; else - pSelf->value.asDate.lDate = ( long ) ( ( HB_LONG ) pRight->value.asDate.lDate + ( HB_LONG ) pLeft->value.asNum.val.d ); + pSelf->value.asDate.lDate = pRight->value.asDate.lDate + ( long ) ( unsigned long ) pLeft->value.asNum.val.d; pSelf->value.asDate.lTime = 0; pSelf->ExprType = HB_ET_DATE; pSelf->ValType = HB_EV_DATE; @@ -769,7 +769,7 @@ HB_EXPR_PTR hb_compExprReducePlus( HB_EXPR_PTR pSelf, HB_COMP_DECL ) else if( pRight->ExprType == HB_ET_TIMESTAMP ) { if( pLeft->value.asNum.NumType == HB_ET_LONG ) - hb_compExprReduceTimeStampPut( pSelf, ( long ) ( pRight->value.asDate.lDate + pLeft->value.asNum.val.l ), + hb_compExprReduceTimeStampPut( pSelf, pRight->value.asDate.lDate + ( long ) pLeft->value.asNum.val.l, pRight->value.asDate.lTime ); else hb_compExprReduceTimeStampAdd( pSelf, pRight, pLeft->value.asNum.val.d ); @@ -810,9 +810,9 @@ HB_EXPR_PTR hb_compExprReducePlus( HB_EXPR_PTR pSelf, HB_COMP_DECL ) if( pLeft->ExprType == HB_ET_DATE ) { if( pRight->value.asNum.NumType == HB_ET_LONG ) - pSelf->value.asDate.lDate = ( long ) ( ( HB_LONG ) pLeft->value.asDate.lDate + pRight->value.asNum.val.l ); + pSelf->value.asDate.lDate = pLeft->value.asDate.lDate + ( long ) pRight->value.asNum.val.l; else - pSelf->value.asDate.lDate = ( long ) ( ( HB_LONG ) pLeft->value.asDate.lDate + ( HB_LONG ) pRight->value.asNum.val.d ); + pSelf->value.asDate.lDate = pLeft->value.asDate.lDate + ( long ) ( unsigned long ) pRight->value.asNum.val.d; pSelf->value.asDate.lTime = 0; pSelf->ExprType = HB_ET_DATE; pSelf->ValType = HB_EV_DATE; @@ -822,7 +822,7 @@ HB_EXPR_PTR hb_compExprReducePlus( HB_EXPR_PTR pSelf, HB_COMP_DECL ) else if( pLeft->ExprType == HB_ET_TIMESTAMP ) { if( pRight->value.asNum.NumType == HB_ET_LONG ) - hb_compExprReduceTimeStampPut( pSelf, ( long ) ( pLeft->value.asDate.lDate + pRight->value.asNum.val.l ), + hb_compExprReduceTimeStampPut( pSelf, pLeft->value.asDate.lDate + ( long ) pRight->value.asNum.val.l, pLeft->value.asDate.lTime ); else hb_compExprReduceTimeStampAdd( pSelf, pLeft, pRight->value.asNum.val.d ); diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 734cc8aba9..b608176932 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -3262,12 +3262,12 @@ static void hb_vmMinus( HB_ITEM_PTR pResult, HB_ITEM_PTR pItem1, HB_ITEM_PTR pIt } else if( HB_IS_DATETIME( pItem1 ) && HB_IS_DATETIME( pItem2 ) ) { - HB_LONG lTime = pItem1->item.asDateTime.time - - pItem2->item.asDateTime.time, - lJulian = pItem1->item.asDateTime.julian - - pItem2->item.asDateTime.julian; + long lTime = pItem1->item.asDateTime.time - + pItem2->item.asDateTime.time, + lJulian = pItem1->item.asDateTime.julian - + pItem2->item.asDateTime.julian; if( lTime != 0 ) - hb_itemPutNDDec( pResult, hb_timeStampPackDT( ( long ) lJulian, ( long ) lTime ), HB_TIMEDIFF_DEC ); + hb_itemPutNDDec( pResult, hb_timeStampPackDT( lJulian, lTime ), HB_TIMEDIFF_DEC ); else { if( HB_IS_COMPLEX( pResult ) )