2008-09-23 15:38 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/vm/codebloc.c
* updated old and not longer valid comment
* harbour/source/vm/memvars.c
* minor code formatting
* harbour/source/common/expropt2.c
! fixed bug in power math expression optimization caused
by two lines left in the code by mistake. Many thanks to
Maurilio for locating the problem.
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* harbour/source/vm/hvm.c
% added support for buffering hb_stack TLS access be preloading
the stack pointer into C stack function local variables.
Please make speed tests for MT mode with different C compilers
and different platforms.
This commit is contained in:
@@ -8,6 +8,26 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
|
||||
*/
|
||||
|
||||
2008-09-23 15:38 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/vm/codebloc.c
|
||||
* updated old and not longer valid comment
|
||||
|
||||
* harbour/source/vm/memvars.c
|
||||
* minor code formatting
|
||||
|
||||
* harbour/source/common/expropt2.c
|
||||
! fixed bug in power math expression optimization caused
|
||||
by two lines left in the code by mistake. Many thanks to
|
||||
Maurilio for locating the problem.
|
||||
|
||||
* harbour/include/hbstack.h
|
||||
* harbour/source/vm/estack.c
|
||||
* harbour/source/vm/hvm.c
|
||||
% added support for buffering hb_stack TLS access be preloading
|
||||
the stack pointer into C stack function local variables.
|
||||
Please make speed tests for MT mode with different C compilers
|
||||
and different platforms.
|
||||
|
||||
2008-09-23 14:50 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* contrib/rddads/adsmgmnt.c
|
||||
* Minor.
|
||||
|
||||
@@ -64,7 +64,7 @@ HB_EXTERN_BEGIN
|
||||
|
||||
#if defined( HB_MT_VM )
|
||||
# include "hbthread.h"
|
||||
# if !defined( HB_USE_TLS ) && !defined( HB_OS_OS2 )
|
||||
# if !defined( HB_USE_TLS ) && !defined( HB_OS_OS2 ) && 0
|
||||
# undef HB_STACK_MACROS
|
||||
# endif
|
||||
#endif
|
||||
@@ -199,11 +199,19 @@ typedef struct
|
||||
extern HB_TLS_KEY hb_stack_key;
|
||||
# define hb_stack_ptr ( ( PHB_STACK ) hb_tls_get( hb_stack_key ) )
|
||||
# endif
|
||||
# define hb_stack ( * hb_stack_ptr )
|
||||
# ifdef HB_STACK_PRELOAD
|
||||
# define HB_STACK_TLS_PRELOAD PHB_STACK _hb_stack_ptr_ = hb_stack_ptr;
|
||||
# define hb_stack ( * _hb_stack_ptr_ )
|
||||
# else
|
||||
# define hb_stack ( * hb_stack_ptr )
|
||||
# endif
|
||||
# else
|
||||
extern HB_STACK hb_stack;
|
||||
# endif
|
||||
#endif
|
||||
#ifndef HB_STACK_TLS_PRELOAD
|
||||
# define HB_STACK_TLS_PRELOAD
|
||||
#endif
|
||||
|
||||
#endif /* _HB_API_INTERNAL_ */
|
||||
|
||||
|
||||
@@ -364,8 +364,6 @@ HB_EXPR_PTR hb_compExprReducePower( HB_EXPR_PTR pSelf, HB_COMP_DECL )
|
||||
break;
|
||||
|
||||
default:
|
||||
pSelf->value.asNum.val.d = pow( pLeft->value.asNum.val.d,
|
||||
pRight->value.asNum.val.d );
|
||||
if( pLeft->value.asNum.NumType == HB_ET_DOUBLE )
|
||||
pSelf->value.asNum.val.d = pow( pLeft->value.asNum.val.d,
|
||||
( double ) pRight->value.asNum.val.l );
|
||||
|
||||
@@ -163,13 +163,12 @@ HB_CODEBLOCK_PTR hb_codeblockNew( const BYTE * pBuffer,
|
||||
|
||||
/* Create a table that will store the values of local variables
|
||||
* accessed in a codeblock
|
||||
* The element 0 is used as the counter of references to this table
|
||||
* The element 0 is unused
|
||||
* NOTE: This table can be shared by codeblocks created during
|
||||
* evaluation of this codeblock
|
||||
*/
|
||||
pLocals = ( PHB_ITEM ) hb_xgrab( ( uiLocals + 1 ) * sizeof( HB_ITEM ) );
|
||||
pLocals[ 0 ].type = HB_IT_LONG;
|
||||
pLocals[ 0 ].item.asLong.value = 1;
|
||||
pLocals[ 0 ].type = HB_IT_NIL;
|
||||
|
||||
do
|
||||
{
|
||||
|
||||
@@ -50,8 +50,11 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define HB_STACK_PRELOAD
|
||||
|
||||
#define INCL_DOSPROCESS
|
||||
|
||||
|
||||
#include "hbvmopt.h"
|
||||
#include "hbapi.h"
|
||||
#include "hbapicls.h"
|
||||
@@ -73,6 +76,8 @@
|
||||
|
||||
/* ------------------------------- */
|
||||
|
||||
#undef HB_STACK_TLS_PRELOAD
|
||||
|
||||
#if defined( HB_MT_VM )
|
||||
|
||||
# include "hbthread.h"
|
||||
@@ -123,8 +128,12 @@
|
||||
#endif /* HB_USE_TLS */
|
||||
|
||||
# undef hb_stack
|
||||
# define hb_stack ( * hb_stack_ptr )
|
||||
|
||||
# ifdef HB_STACK_PRELOAD
|
||||
# define HB_STACK_TLS_PRELOAD PHB_STACK _hb_stack_ptr_ = hb_stack_ptr;
|
||||
# define hb_stack ( * _hb_stack_ptr_ )
|
||||
# else
|
||||
# define hb_stack ( * hb_stack_ptr )
|
||||
# endif
|
||||
#else
|
||||
|
||||
/* no MT mode */
|
||||
@@ -140,6 +149,9 @@
|
||||
|
||||
#endif /* HB_MT_VM */
|
||||
|
||||
#ifndef HB_STACK_TLS_PRELOAD
|
||||
# define HB_STACK_TLS_PRELOAD
|
||||
#endif
|
||||
|
||||
/* ------------------------------- */
|
||||
|
||||
@@ -211,12 +223,12 @@ static void hb_stack_free( PHB_STACK pStack )
|
||||
|
||||
hb_stack_destroy_TSD( pStack );
|
||||
|
||||
if( hb_stack.privates.stack )
|
||||
if( pStack->privates.stack )
|
||||
{
|
||||
hb_xfree( hb_stack.privates.stack );
|
||||
hb_stack.privates.stack = NULL;
|
||||
hb_stack.privates.size = hb_stack.privates.count =
|
||||
hb_stack.privates.base = 0;
|
||||
hb_xfree( pStack->privates.stack );
|
||||
pStack->privates.stack = NULL;
|
||||
pStack->privates.size = pStack->privates.count =
|
||||
pStack->privates.base = 0;
|
||||
}
|
||||
i = pStack->wItems - 1;
|
||||
while( i >= 0 )
|
||||
@@ -240,6 +252,8 @@ static void hb_stack_free( PHB_STACK pStack )
|
||||
|
||||
void hb_stackDestroyTSD( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackDestroyTSD()"));
|
||||
|
||||
hb_stack_destroy_TSD( &hb_stack );
|
||||
@@ -247,6 +261,8 @@ void hb_stackDestroyTSD( void )
|
||||
|
||||
void * hb_stackGetTSD( PHB_TSD pTSD )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackGetTSD(%p)", pTSD));
|
||||
|
||||
#if defined( HB_MT_VM )
|
||||
@@ -298,6 +314,8 @@ void * hb_stackGetTSD( PHB_TSD pTSD )
|
||||
|
||||
void * hb_stackTestTSD( PHB_TSD pTSD )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackTestTSD(%p)", pTSD));
|
||||
|
||||
#if defined( HB_MT_VM )
|
||||
@@ -315,12 +333,16 @@ void hb_stackInit( void )
|
||||
#if defined( HB_MT_VM )
|
||||
hb_stack_alloc();
|
||||
#endif
|
||||
|
||||
hb_stack_init( &hb_stack );
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack_init( &hb_stack );
|
||||
}
|
||||
}
|
||||
|
||||
void hb_stackFree( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackFree()"));
|
||||
|
||||
hb_stack_free( &hb_stack );
|
||||
@@ -335,6 +357,8 @@ void hb_stackFree( void )
|
||||
#undef hb_stackList
|
||||
void * hb_stackList( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackList()"));
|
||||
|
||||
return hb_stack.pStackLst;
|
||||
@@ -343,6 +367,8 @@ void * hb_stackList( void )
|
||||
#undef hb_stackListSet
|
||||
void hb_stackListSet( void * pStackLst )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackListSet(%p)", pStackLst));
|
||||
|
||||
hb_stack.pStackLst = pStackLst;
|
||||
@@ -356,6 +382,7 @@ void hb_stackIdSetActionRequest( void * pStackId, USHORT uiAction )
|
||||
|
||||
PHB_DYN_HANDLES hb_stackGetDynHandle( PHB_DYNS pDynSym )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
int iDynSym;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackGetDynHandle()"));
|
||||
@@ -376,24 +403,28 @@ PHB_DYN_HANDLES hb_stackGetDynHandle( PHB_DYNS pDynSym )
|
||||
#undef hb_stackQuitState
|
||||
BOOL hb_stackQuitState( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.uiQuitState != 0;
|
||||
}
|
||||
|
||||
#undef hb_stackSetQuitState
|
||||
void hb_stackSetQuitState( USHORT uiState )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack.uiQuitState = uiState;
|
||||
}
|
||||
|
||||
#undef hb_stackUnlock
|
||||
int hb_stackUnlock( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return ++hb_stack.iUnlocked;
|
||||
}
|
||||
|
||||
#undef hb_stackLock
|
||||
int hb_stackLock( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return --hb_stack.iUnlocked;
|
||||
}
|
||||
#endif
|
||||
@@ -401,6 +432,8 @@ int hb_stackLock( void )
|
||||
#undef hb_stackGetPrivateStack
|
||||
PHB_PRIVATE_STACK hb_stackGetPrivateStack( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackGetPrivateStack()"));
|
||||
|
||||
return &hb_stack.privates;
|
||||
@@ -409,6 +442,8 @@ PHB_PRIVATE_STACK hb_stackGetPrivateStack( void )
|
||||
#undef hb_stackSetStruct
|
||||
PHB_SET_STRUCT hb_stackSetStruct( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackSetStruct()"));
|
||||
|
||||
return &hb_stack.set;
|
||||
@@ -417,6 +452,8 @@ PHB_SET_STRUCT hb_stackSetStruct( void )
|
||||
#undef hb_stackId
|
||||
void * hb_stackId( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackId()"));
|
||||
|
||||
return ( void * ) &hb_stack;
|
||||
@@ -425,6 +462,8 @@ void * hb_stackId( void )
|
||||
#undef hb_stackPop
|
||||
void hb_stackPop( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackPop()"));
|
||||
|
||||
if( --hb_stack.pPos <= hb_stack.pBase )
|
||||
@@ -437,6 +476,8 @@ void hb_stackPop( void )
|
||||
#undef hb_stackPopReturn
|
||||
void hb_stackPopReturn( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackPopReturn()"));
|
||||
|
||||
if( HB_IS_COMPLEX( &hb_stack.Return ) )
|
||||
@@ -451,6 +492,8 @@ void hb_stackPopReturn( void )
|
||||
#undef hb_stackDec
|
||||
void hb_stackDec( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackDec()"));
|
||||
|
||||
if( --hb_stack.pPos <= hb_stack.pBase )
|
||||
@@ -460,6 +503,8 @@ void hb_stackDec( void )
|
||||
#undef hb_stackDecrease
|
||||
void hb_stackDecrease( ULONG ulItems )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackDecrease()"));
|
||||
|
||||
if( ( hb_stack.pPos -= ulItems ) <= hb_stack.pBase )
|
||||
@@ -469,6 +514,8 @@ void hb_stackDecrease( ULONG ulItems )
|
||||
#undef hb_stackPush
|
||||
void hb_stackPush( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackPush()"));
|
||||
|
||||
/* enough room for another item ? */
|
||||
@@ -479,6 +526,8 @@ void hb_stackPush( void )
|
||||
#undef hb_stackAllocItem
|
||||
HB_ITEM_PTR hb_stackAllocItem( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackAllocItem()"));
|
||||
|
||||
if( ++hb_stack.pPos == hb_stack.pEnd )
|
||||
@@ -490,6 +539,8 @@ HB_ITEM_PTR hb_stackAllocItem( void )
|
||||
#undef hb_stackPushReturn
|
||||
void hb_stackPushReturn( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackPushReturn()"));
|
||||
|
||||
hb_itemRawMove( * hb_stack.pPos, &hb_stack.Return );
|
||||
@@ -501,6 +552,7 @@ void hb_stackPushReturn( void )
|
||||
|
||||
void hb_stackIncrease( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
LONG BaseIndex; /* index of stack base */
|
||||
LONG CurrIndex; /* index of current top item */
|
||||
LONG EndIndex; /* index of current top item */
|
||||
@@ -531,6 +583,7 @@ void hb_stackIncrease( void )
|
||||
|
||||
void hb_stackRemove( LONG lUntilPos )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
HB_ITEM_PTR * pEnd = hb_stack.pItems + lUntilPos;
|
||||
|
||||
while( hb_stack.pPos > pEnd )
|
||||
@@ -543,6 +596,7 @@ void hb_stackRemove( LONG lUntilPos )
|
||||
|
||||
HB_ITEM_PTR hb_stackNewFrame( PHB_STACK_STATE pFrame, USHORT uiParams )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
HB_ITEM_PTR * pBase, pItem;
|
||||
|
||||
pBase = hb_stack.pPos - uiParams - 2;
|
||||
@@ -572,6 +626,7 @@ HB_ITEM_PTR hb_stackNewFrame( PHB_STACK_STATE pFrame, USHORT uiParams )
|
||||
|
||||
void hb_stackOldFrame( PHB_STACK_STATE pFrame )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
if( hb_stack.pPos <= hb_stack.pBase )
|
||||
hb_errInternal( HB_EI_STACKUFLOW, NULL, NULL, NULL );
|
||||
|
||||
@@ -591,6 +646,7 @@ void hb_stackOldFrame( PHB_STACK_STATE pFrame )
|
||||
#undef hb_stackItem
|
||||
HB_ITEM_PTR hb_stackItem( LONG iItemPos )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
if( iItemPos < 0 )
|
||||
hb_errInternal( HB_EI_STACKUFLOW, NULL, NULL, NULL );
|
||||
|
||||
@@ -600,6 +656,7 @@ HB_ITEM_PTR hb_stackItem( LONG iItemPos )
|
||||
#undef hb_stackItemFromTop
|
||||
HB_ITEM_PTR hb_stackItemFromTop( int iFromTop )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
if( iFromTop >= 0 )
|
||||
hb_errInternal( HB_EI_STACKUFLOW, NULL, NULL, NULL );
|
||||
|
||||
@@ -609,6 +666,7 @@ HB_ITEM_PTR hb_stackItemFromTop( int iFromTop )
|
||||
#undef hb_stackItemFromBase
|
||||
HB_ITEM_PTR hb_stackItemFromBase( int iFromBase )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
if( iFromBase < 0 )
|
||||
hb_errInternal( HB_EI_STACKUFLOW, NULL, NULL, NULL );
|
||||
|
||||
@@ -618,6 +676,7 @@ HB_ITEM_PTR hb_stackItemFromBase( int iFromBase )
|
||||
#undef hb_stackLocalVariable
|
||||
HB_ITEM_PTR hb_stackLocalVariable( int *piFromBase )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
HB_ITEM_PTR pBase = *hb_stack.pBase;
|
||||
|
||||
/*
|
||||
@@ -641,6 +700,7 @@ HB_ITEM_PTR hb_stackLocalVariable( int *piFromBase )
|
||||
#undef hb_stackBaseItem
|
||||
HB_ITEM_PTR hb_stackBaseItem( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return * hb_stack.pBase;
|
||||
}
|
||||
|
||||
@@ -649,12 +709,15 @@ HB_ITEM_PTR hb_stackBaseItem( void )
|
||||
#undef hb_stackSelfItem
|
||||
HB_ITEM_PTR hb_stackSelfItem( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return * ( hb_stack.pBase + 1 );
|
||||
}
|
||||
|
||||
#undef hb_stackReturnItem
|
||||
HB_ITEM_PTR hb_stackReturnItem( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackReturnItem()"));
|
||||
|
||||
return &hb_stack.Return;
|
||||
@@ -663,29 +726,38 @@ HB_ITEM_PTR hb_stackReturnItem( void )
|
||||
#undef hb_stackTopOffset
|
||||
LONG hb_stackTopOffset( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
return hb_stack.pPos - hb_stack.pItems;
|
||||
}
|
||||
|
||||
#undef hb_stackBaseOffset
|
||||
LONG hb_stackBaseOffset( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
return hb_stack.pBase - hb_stack.pItems + 1;
|
||||
}
|
||||
|
||||
#undef hb_stackTotalItems
|
||||
LONG hb_stackTotalItems( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
return hb_stack.wItems;
|
||||
}
|
||||
|
||||
#undef hb_stackDateBuffer
|
||||
char * hb_stackDateBuffer( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
|
||||
return hb_stack.szDate;
|
||||
}
|
||||
|
||||
BYTE * hb_stackDirBuffer( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
#if defined( HB_MT_VM )
|
||||
if( hb_stack_ready() )
|
||||
{
|
||||
@@ -699,6 +771,7 @@ BYTE * hb_stackDirBuffer( void )
|
||||
|
||||
PHB_IOERRORS hb_stackIOErrors( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
#if defined( HB_MT_VM )
|
||||
if( hb_stack_ready() )
|
||||
return &hb_stack.IOErrors;
|
||||
@@ -708,6 +781,7 @@ PHB_IOERRORS hb_stackIOErrors( void )
|
||||
|
||||
PHB_STACKRDD hb_stackRDD( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return &hb_stack.rdd;
|
||||
}
|
||||
|
||||
@@ -715,42 +789,49 @@ PHB_STACKRDD hb_stackRDD( void )
|
||||
#undef hb_stackGetStaticsBase
|
||||
LONG hb_stackGetStaticsBase( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.lStatics;
|
||||
}
|
||||
|
||||
#undef hb_stackSetStaticsBase
|
||||
void hb_stackSetStaticsBase( LONG lBase )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack.lStatics = lBase;
|
||||
}
|
||||
|
||||
#undef hb_stackGetRecoverBase
|
||||
LONG hb_stackGetRecoverBase( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.lRecoverBase;
|
||||
}
|
||||
|
||||
#undef hb_stackSetRecoverBase
|
||||
void hb_stackSetRecoverBase( LONG lBase )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack.lRecoverBase = lBase;
|
||||
}
|
||||
|
||||
#undef hb_stackGetActionRequest
|
||||
USHORT hb_stackGetActionRequest( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.uiActionRequest;
|
||||
}
|
||||
|
||||
#undef hb_stackSetActionRequest
|
||||
void hb_stackSetActionRequest( USHORT uiAction )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack.uiActionRequest = uiAction;
|
||||
}
|
||||
|
||||
#undef hb_stackWithObjectItem
|
||||
PHB_ITEM hb_stackWithObjectItem( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.lWithObject ?
|
||||
* ( hb_stack.pItems + hb_stack.lWithObject ) : NULL;
|
||||
}
|
||||
@@ -758,47 +839,55 @@ PHB_ITEM hb_stackWithObjectItem( void )
|
||||
#undef hb_stackWithObjectOffset
|
||||
LONG hb_stackWithObjectOffset( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.lWithObject;
|
||||
}
|
||||
|
||||
#undef hb_stackWithObjectSetOffset
|
||||
void hb_stackWithObjectSetOffset( LONG lOffset )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack.lWithObject = lOffset;
|
||||
}
|
||||
|
||||
#undef hb_stackGetCDP
|
||||
void * hb_stackGetCDP( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.pCDP;
|
||||
}
|
||||
|
||||
#undef hb_stackSetCDP
|
||||
void hb_stackSetCDP( void * pCDP )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack.pCDP = pCDP;
|
||||
}
|
||||
|
||||
#undef hb_stackGetLang
|
||||
void * hb_stackGetLang( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return hb_stack.pLang;
|
||||
}
|
||||
|
||||
#undef hb_stackSetLang
|
||||
void hb_stackSetLang( void * pLang )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
hb_stack.pLang = pLang;
|
||||
}
|
||||
|
||||
#undef hb_stackItemBasePtr
|
||||
PHB_ITEM ** hb_stackItemBasePtr( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
return &hb_stack.pItems;
|
||||
}
|
||||
|
||||
void hb_stackClearMevarsBase( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
PHB_ITEM pBase;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackClearMevarsBase()"));
|
||||
@@ -814,6 +903,7 @@ void hb_stackClearMevarsBase( void )
|
||||
|
||||
int hb_stackCallDepth( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
LONG lOffset = hb_stack.pBase - hb_stack.pItems;
|
||||
int iLevel = 0;
|
||||
|
||||
@@ -828,6 +918,7 @@ int hb_stackCallDepth( void )
|
||||
|
||||
LONG hb_stackBaseProcOffset( int iLevel )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
LONG lOffset = hb_stack.pBase - hb_stack.pItems;
|
||||
|
||||
while( iLevel-- > 0 && lOffset > 0 )
|
||||
@@ -841,6 +932,7 @@ LONG hb_stackBaseProcOffset( int iLevel )
|
||||
|
||||
void hb_stackBaseProcInfo( char * szProcName, USHORT * puiProcLine )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
/*
|
||||
* This function is called by FM module and has to be ready for execution
|
||||
* before hb_stack initialization, [druzus]
|
||||
@@ -867,6 +959,7 @@ void hb_stackBaseProcInfo( char * szProcName, USHORT * puiProcLine )
|
||||
/* NOTE: DEBUG function */
|
||||
void hb_stackDispLocal( void )
|
||||
{
|
||||
HB_STACK_TLS_PRELOAD
|
||||
PHB_ITEM * pBase;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_stackDispLocal()"));
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -271,10 +271,11 @@ static void hb_memvarAddPrivate( PHB_DYNS pDynSym, PHB_ITEM pValue )
|
||||
*/
|
||||
ULONG hb_memvarGetPrivatesBase( void )
|
||||
{
|
||||
ULONG ulBase = hb_stackGetPrivateStack()->base;
|
||||
ULONG ulBase;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_memvarGetPrivatesBase()"));
|
||||
|
||||
ulBase = hb_stackGetPrivateStack()->base;
|
||||
hb_stackGetPrivateStack()->base = hb_stackGetPrivateStack()->count;
|
||||
return ulBase;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user