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:
Przemyslaw Czerpak
2010-03-04 10:06:32 +00:00
parent eebfaee54d
commit 7da18ea3dc
11 changed files with 140 additions and 90 deletions

View File

@@ -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;
}