diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 586130cbed..fca657afba 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,10 +8,16 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2003-10-21 10:23 UTC-0800 Luis Krause Mantilla + * source/vm/codebloc.c + ! Fixed detached local bug (borrowed from xharbour) + * source/rdd/dbcmd.c + ! Fixed bug in __dbLocate with When clause (borrowed from xharbour) + 2003-10-20 13:45 UTC+0100 Ryszard Glab * .cvsignore * Restored previous version - + * include/hbexpra.c * include/hbexprb.c * include/hbexprc.c @@ -21,19 +27,19 @@ * source/compiler/exproptc.c * source/compiler/harbour.sly * fixed declaration mismatch in Simplex version - * fixed generation of string's pcode + * fixed generation of string's pcode (introduced with my previous changes) - + * source/pp/ppcore.c * fixed support for stringify match markers <""> and <()> in Flex version (for example &var.1 have to be expanded into "&var.1" instead of var.1 since this is not a valid Clipper expression) NOTICE! In Simplex version this is not fixed because it is - used as a hack to correctly support macro variables in GET + used as a hack to correctly support macro variables in GET command. - + * tests/testget.prg - * MEMVAR declaration was added + * MEMVAR declaration was added 2003-10-20 11:37 UTC+0300 Alexander Kresin * include/hbapi.h diff --git a/harbour/source/rdd/dbcmd.c b/harbour/source/rdd/dbcmd.c index d6fddf3416..afb3e8032a 100644 --- a/harbour/source/rdd/dbcmd.c +++ b/harbour/source/rdd/dbcmd.c @@ -1521,6 +1521,39 @@ HB_FUNC( __DBLOCATE ) else ( ( AREAP ) s_pCurrArea->pArea )->fFound = ( bWhile && hb_itemGetL( pNewFor ) ); } + else if( pWhile ) + { + if( hb_itemType( pWhile ) == HB_IT_BLOCK ) + bWhile = hb_itemGetL( hb_vmEvalBlock( pWhile ) ); + else + bWhile = TRUE; + if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) + bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); + else + bFor = hb_itemGetL( pNewFor ); + if( pNext ) + lNext = hb_parnl( 3 ); + else + lNext = 0xffffffffu; /* maxed out */ + while( !( ( AREAP ) s_pCurrArea->pArea )->fEof && lNext-- != 0 && bWhile && !bFor ) + { + SELF_SKIP( ( AREAP ) s_pCurrArea->pArea, 1 ); + if( ( ( AREAP ) s_pCurrArea->pArea )->fEof ) + bFor = FALSE; + else + { + if( hb_itemType( pWhile ) == HB_IT_BLOCK ) + bWhile = hb_itemGetL( hb_vmEvalBlock( pWhile ) ); + else + bWhile = TRUE; + if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) + bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); + else + bFor = hb_itemGetL( pNewFor ); + } + } + ( ( AREAP ) s_pCurrArea->pArea )->fFound = bFor; + } else if( pNext ) { lNext = hb_parnl( 3 ); @@ -1582,7 +1615,7 @@ HB_FUNC( __DBLOCATE ) bFor = hb_itemGetL( pNewFor ); } } - ( ( AREAP ) s_pCurrArea->pArea )->fFound = bFor && bWhile; + ( ( AREAP ) s_pCurrArea->pArea )->fFound = bFor; } else { diff --git a/harbour/source/vm/codebloc.c b/harbour/source/vm/codebloc.c index eee37e3778..337fa80196 100644 --- a/harbour/source/vm/codebloc.c +++ b/harbour/source/vm/codebloc.c @@ -110,6 +110,11 @@ HB_CODEBLOCK_PTR hb_codeblockNew( BYTE * pBuffer, */ pLocal = hb_stackItemFromBase( *pLocalPosTable++ ); + if( HB_IS_BYREF( pLocal ) ) + { + pLocal = hb_itemUnRef( pLocal ); + } + if( ! HB_IS_MEMVAR( pLocal ) ) { /* Change the value only if this variable is not referenced