diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 11ff5a7da2..66404f5bc7 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,12 @@ +19991021-15:35 GMT+2 Ryszard Glab + + *include/extend.h + *source/rtl/memvars.c + *source/vm/hvm.c + * new function hb_memvarNewParameter() used to create a variable + listed on PARAMETER statement (corrected bug - private variables + are created instead of reusing existing ones) + 19991021-16:02 GMT+3 Alexander Kresin * contrib/odbc/todbc.prg * there was an infinite loop in TOdbc():New(), diff --git a/harbour/include/extend.h b/harbour/include/extend.h index 6014837db1..bcf2603c2a 100644 --- a/harbour/include/extend.h +++ b/harbour/include/extend.h @@ -397,6 +397,7 @@ extern void hb_memvarGetValue( HB_ITEM_PTR, PHB_SYMB ); extern void hb_memvarGetRefer( HB_ITEM_PTR, PHB_SYMB ); extern ULONG hb_memvarGetPrivatesBase( void ); extern void hb_memvarSetPrivatesBase( ULONG ); +extern void hb_memvarNewParameter( PHB_SYMB, HB_ITEM_PTR ); /* console I/O subsystem */ extern void hb_consoleInitialize( void ); diff --git a/harbour/source/rtl/memvars.c b/harbour/source/rtl/memvars.c index e8292d323b..520dcaea90 100644 --- a/harbour/source/rtl/memvars.c +++ b/harbour/source/rtl/memvars.c @@ -498,6 +498,13 @@ void hb_memvarGetRefer( HB_ITEM_PTR pItem, PHB_SYMB pMemvarSymb ) hb_errInternal( 9999, "Invalid symbol item passed as memvar %s", pMemvarSymb->szName, NULL ); } +/* + */ +void hb_memvarNewParameter( PHB_SYMB pSymbol, PHB_ITEM pValue ) +{ + hb_memvarCreateFromDynSymbol( pSymbol->pDynSym, MV_PRIVATE, pValue ); +} + /* * This function creates a value for memvar variable diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index e68c77afba..087cc29ba5 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -540,7 +540,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols ) case HB_P_PARAMETER: uiParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ); - hb_memvarSetValue( pSymbols + uiParams, hb_stack.pBase + 1 + pCode[ w + 3 ] ); + hb_memvarNewParameter( pSymbols + uiParams, hb_stack.pBase + 1 + pCode[ w + 3 ] ); HB_DEBUG( "(hb_vmPopParameter)\n" ); w += 4; break;