2010-03-04 11:06 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
* harbour/src/vm/macro.c
% changed HB_PCODE_INFO structure to eliminate one memory allocation
in macro compiler
* harbour/include/hbapi.h
* harbour/include/hbvm.h
* harbour/src/vm/codebloc.c
* harbour/src/vm/itemapi.c
* harbour/src/vm/hvm.c
* changed second parameter in hb_codeblockGet*() function to 'int'
* merged codeblock execution context setting into one function
hb_vmDoBlock() and removed hb_codeblockEvaluate()
+ added new internal function hb_vmEval()
* harbour/src/vm/arrays.c
% use hb_vmEval()
* harbour/src/macro/macrolex.c
* added missing const to maro text declaration
* harbour/tests/speedtst.prg
! fixed to work with CLIP and xHarbour after we changed
SECONDSCPU() to HB_SECONDSCPU() - all these compilers and FlagShip
have SECONDSCPU() function
This commit is contained in:
@@ -293,29 +293,13 @@ HB_CODEBLOCK_PTR hb_codeblockMacroNew( const HB_BYTE * pBuffer, HB_SIZE ulLen )
|
||||
return pCBlock;
|
||||
}
|
||||
|
||||
/* Evaluate passed codeblock
|
||||
* Before evaluation we have to switch to a static variable base that
|
||||
* was defined when the codeblock was created.
|
||||
* (The codeblock can only see the static variables defined in a module
|
||||
* where the codeblock was created)
|
||||
*/
|
||||
void hb_codeblockEvaluate( HB_ITEM_PTR pItem )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_codeblockEvaluate(%p)", pItem));
|
||||
|
||||
hb_stackSetStaticsBase( pItem->item.asBlock.value->pStatics );
|
||||
hb_vmExecute( pItem->item.asBlock.value->pCode, pItem->item.asBlock.value->pSymbols );
|
||||
}
|
||||
|
||||
/* Get local variable referenced in a codeblock
|
||||
*/
|
||||
PHB_ITEM hb_codeblockGetVar( PHB_ITEM pItem, HB_LONG iItemPos )
|
||||
PHB_ITEM hb_codeblockGetVar( PHB_ITEM pItem, int iItemPos )
|
||||
{
|
||||
HB_CODEBLOCK_PTR pCBlock = pItem->item.asBlock.value;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_codeblockGetVar(%p, %ld)", pItem, iItemPos));
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_codeblockGetVar(%p, %d)", pItem, iItemPos));
|
||||
|
||||
/* local variables accessed in a codeblock are always stored as reference */
|
||||
return hb_itemUnRef( pCBlock->pLocals - iItemPos );
|
||||
@@ -323,9 +307,9 @@ PHB_ITEM hb_codeblockGetVar( PHB_ITEM pItem, HB_LONG iItemPos )
|
||||
|
||||
/* Get local variable passed by reference
|
||||
*/
|
||||
PHB_ITEM hb_codeblockGetRef( HB_CODEBLOCK_PTR pCBlock, HB_LONG iItemPos )
|
||||
PHB_ITEM hb_codeblockGetRef( HB_CODEBLOCK_PTR pCBlock, int iItemPos )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_codeblockGetRef(%p, %ld)", pCBlock, iItemPos));
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_codeblockGetRef(%p, %d)", pCBlock, iItemPos));
|
||||
|
||||
return pCBlock->pLocals - iItemPos;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user