ChangeLog 19990815-18:45
This commit is contained in:
@@ -1,3 +1,34 @@
|
||||
19990815-18:45 GMT+2 Ryszard Glab <rglab@imid.med.pl>
|
||||
|
||||
*source/rtl/hvm.c
|
||||
* added 'hb_vm' prefix to alias/field related functions
|
||||
* some functions declared 'static'
|
||||
|
||||
*include/ctoharb.h
|
||||
- removed declarations of internal virtual machine functions
|
||||
|
||||
*source/compiler/harbour.y
|
||||
* changed an error description for incorrect use of PARAMETERS
|
||||
statement
|
||||
* added type casting to compile under C++ compilers
|
||||
* static frame is correctly generated if static variable
|
||||
is used in a codeblock only
|
||||
|
||||
*include/extend.h
|
||||
- removed obsolete declaration of hb_memvarNewSymbol()
|
||||
|
||||
*include/hb_vmpub.h
|
||||
+ added definition of callback function HB_DYNS_FUNC used
|
||||
to enumerate dynamic symbols
|
||||
|
||||
*source/vm/dynsym.c
|
||||
+ new function hb_dynsymEval() that enumerates dynamic symbols
|
||||
by calling specified HB_DYNS_FUNC * function
|
||||
|
||||
*source/rtl/memvars.c
|
||||
+ added __MVCLEAR function to release all PRIVATE and PUBLIC
|
||||
variables (this function is used in CLEAR MEMORY statement)
|
||||
|
||||
19990815-19:59 GMT+3 Alexander Kresin
|
||||
* source/rtl/tbrowse.prg
|
||||
* tests/working/testbrw.prg
|
||||
|
||||
@@ -32,13 +32,6 @@
|
||||
/* Harbour virtual machine functions */
|
||||
extern void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */
|
||||
extern void hb_vmProcessSymbols( PHB_SYMB pSymbols, WORD wSymbols ); /* statics symbols initialization */
|
||||
#ifdef HARBOUR_OBJ_GENERATION
|
||||
extern void hb_vmProcessObjSymbols ( void ); /* process Harbour generated OBJ symbols */
|
||||
#endif
|
||||
extern void hb_vmDoInitStatics( void ); /* executes all _INITSTATICS functions */
|
||||
extern void hb_vmDoInitFunctions( int argc, char * argv[] ); /* executes all defined PRGs INIT functions */
|
||||
extern void hb_vmDoExitFunctions( void ); /* executes all defined PRGs EXIT functions */
|
||||
extern void hb_vmReleaseLocalSymbols( void ); /* releases the memory of the local symbols linked list */
|
||||
|
||||
/* PCode functions */
|
||||
extern void hb_vmAnd( void ); /* performs the logical AND on the latest two values, removes them and leaves result on the stack */
|
||||
|
||||
@@ -300,6 +300,7 @@ extern PHB_DYNS hb_dynsymNew( PHB_SYMB pSymbol ); /* creates a new dynamic symbo
|
||||
extern PHB_DYNS hb_dynsymFind( char * szName ); /* finds a dynamic symbol */
|
||||
extern void hb_dynsymLog( void ); /* displays all dynamic symbols */
|
||||
extern void hb_dynsymRelease( void ); /* releases the memory of the dynamic symbol table */
|
||||
extern void hb_dynsymEval( PHB_DYNS_FUNC ); /* enumerates all dynamic symbols */
|
||||
|
||||
/* Symbol management */
|
||||
extern PHB_SYMB hb_symbolNew( char * szName );
|
||||
@@ -322,7 +323,6 @@ extern void hb_memvarValueDecRef( HB_HANDLE );
|
||||
extern void hb_memvarSetValue( PHB_SYMB, HB_ITEM_PTR );
|
||||
extern void hb_memvarGetValue( HB_ITEM_PTR, PHB_SYMB );
|
||||
extern void hb_memvarGetRefer( HB_ITEM_PTR, PHB_SYMB );
|
||||
extern void hb_memvarNewSymbol( PHB_SYMB );
|
||||
extern ULONG hb_memvarGetPrivatesBase( void );
|
||||
extern void hb_memvarSetPrivatesBase( ULONG );
|
||||
|
||||
|
||||
@@ -60,6 +60,9 @@ typedef struct _HB_DYNS
|
||||
PHB_FUNC pFunPtr; /* Pointer to the function address */
|
||||
} HB_DYNS, * PHB_DYNS, * HB_DYNS_PTR;
|
||||
|
||||
#define HB_DYNS_FUNC( hbfunc ) BOOL hbfunc( PHB_DYNS pDynSymbol )
|
||||
typedef HB_DYNS_FUNC( PHB_DYNS_FUNC );
|
||||
|
||||
/* Harbour Functions scope (SYMBOLSCOPE) */
|
||||
#define FS_PUBLIC ((SYMBOLSCOPE)0x00)
|
||||
#define FS_STATIC ((SYMBOLSCOPE)0x02)
|
||||
|
||||
@@ -313,7 +313,7 @@ char * _szCErrors[] = { "Statement not allowed outside of procedure or function"
|
||||
"Incorrect number of arguments: %s %s",
|
||||
"Invalid lvalue",
|
||||
"Invalid use of \'@\' (pass by reference): \'%s\'",
|
||||
"PARAMETERS cannot be used with local parameters"
|
||||
"Formal parameters already declared"
|
||||
};
|
||||
|
||||
/* Table with parse warnings */
|
||||
@@ -981,9 +981,9 @@ VarDefs : LOCAL { iVarScope = VS_LOCAL; Line(); } VarList Crlf { cVarType = '
|
||||
| STATIC { StaticDefStart() } VarList Crlf { StaticDefEnd( $<iNumber>3 ); }
|
||||
| PARAMETERS { if( functions.pLast->bFlags & FUN_USES_LOCAL_PARAMS )
|
||||
GenError( _szCErrors, 'E', ERR_PARAMETERS_NOT_ALLOWED, NULL, NULL );
|
||||
else
|
||||
functions.pLast->wParamNum=0; iVarScope = (VS_PRIVATE | VS_PARAMETER); }
|
||||
MemvarList Crlf
|
||||
else
|
||||
functions.pLast->wParamNum=0; iVarScope = (VS_PRIVATE | VS_PARAMETER); }
|
||||
MemvarList Crlf
|
||||
;
|
||||
|
||||
VarList : VarDef { $$ = 1; }
|
||||
@@ -1881,13 +1881,13 @@ void AddVar( char * szVarName )
|
||||
break;
|
||||
case (VS_PARAMETER | VS_PRIVATE):
|
||||
{
|
||||
BOOL bNewParameter = FALSE;
|
||||
BOOL bNewParameter = FALSE;
|
||||
|
||||
if( ++functions.pLast->wParamNum > functions.pLast->wParamCount )
|
||||
{
|
||||
functions.pLast->wParamCount =functions.pLast->wParamNum;
|
||||
bNewParameter = TRUE;
|
||||
}
|
||||
{
|
||||
functions.pLast->wParamCount =functions.pLast->wParamNum;
|
||||
bNewParameter = TRUE;
|
||||
}
|
||||
|
||||
pSym =GetSymbol( szVarName, &wPos ); /* check if symbol exists already */
|
||||
if( ! pSym )
|
||||
@@ -1896,15 +1896,15 @@ void AddVar( char * szVarName )
|
||||
GenPCode3( HB_P_PARAMETER, LOBYTE(wPos), HIBYTE(wPos) );
|
||||
GenPCode1( LOBYTE(functions.pLast->wParamNum) );
|
||||
|
||||
/* Add this variable to the local variables list - this will
|
||||
* allow to use the correct positions for real local variables.
|
||||
* The name of variable have to be hidden because we should
|
||||
* not find this name on the local variables list.
|
||||
* We have to use the new structure because it is used in
|
||||
* memvars list already.
|
||||
*/
|
||||
if( bNewParameter )
|
||||
{
|
||||
/* Add this variable to the local variables list - this will
|
||||
* allow to use the correct positions for real local variables.
|
||||
* The name of variable have to be hidden because we should
|
||||
* not find this name on the local variables list.
|
||||
* We have to use the new structure because it is used in
|
||||
* memvars list already.
|
||||
*/
|
||||
if( bNewParameter )
|
||||
{
|
||||
pVar = ( PVAR ) OurMalloc( sizeof( VAR ) );
|
||||
pVar->szName = yy_strdup( szVarName );
|
||||
pVar->szAlias = NULL;
|
||||
@@ -1974,7 +1974,7 @@ void AddVar( char * szVarName )
|
||||
if( _bDebugInfo )
|
||||
{
|
||||
GenPCode3( HB_P_LOCALNAME, LOBYTE( wLocal ), HIBYTE( wLocal ) );
|
||||
GenPCodeN( szVarName, strlen( szVarName ) );
|
||||
GenPCodeN( (BYTE *)szVarName, strlen( szVarName ) );
|
||||
GenPCode1( 0 );
|
||||
}
|
||||
}
|
||||
@@ -2329,9 +2329,9 @@ void FunDef( char * szFunName, SYMBOLSCOPE cScope, int iType )
|
||||
if( _bDebugInfo )
|
||||
{
|
||||
GenPCode1( HB_P_MODULENAME );
|
||||
GenPCodeN( files.pLast->szFileName, strlen( files.pLast->szFileName ) );
|
||||
GenPCodeN( (BYTE *)files.pLast->szFileName, strlen( files.pLast->szFileName ) );
|
||||
GenPCode1( ':' );
|
||||
GenPCodeN( szFunName, strlen( szFunName ) );
|
||||
GenPCodeN( (BYTE *)szFunName, strlen( szFunName ) );
|
||||
GenPCode1( 0 );
|
||||
}
|
||||
}
|
||||
@@ -2702,7 +2702,6 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag
|
||||
fprintf( yyc, " 0,\n" );
|
||||
lPCodePos++;
|
||||
break;
|
||||
break;
|
||||
|
||||
case HB_P_MESSAGE:
|
||||
{
|
||||
@@ -4954,6 +4953,7 @@ void CodeBlockEnd()
|
||||
pFunc = pCodeblock->pOwner;
|
||||
while( pFunc->pOwner )
|
||||
pFunc = pFunc->pOwner;
|
||||
pFunc->bFlags |= ( pCodeblock->bFlags & FUN_USES_STATICS );
|
||||
|
||||
/* generate a proper codeblock frame with a codeblock size and with
|
||||
* a number of expected parameters
|
||||
|
||||
@@ -552,6 +552,8 @@ static void hb_memvarReleaseWithMask( char *szMask, BOOL bInclude )
|
||||
}
|
||||
}
|
||||
|
||||
/* This function checks the scope of passed variable
|
||||
*/
|
||||
static int hb_memvarScope( char *szVarName, ULONG ulLength )
|
||||
{
|
||||
int iMemvar = MV_ERROR;
|
||||
@@ -595,6 +597,18 @@ static int hb_memvarScope( char *szVarName, ULONG ulLength )
|
||||
return iMemvar;
|
||||
}
|
||||
|
||||
static HB_DYNS_FUNC( hb_memvarClear )
|
||||
{
|
||||
if( pDynSymbol->hMemvar )
|
||||
{
|
||||
_globalTable[ pDynSymbol->hMemvar ].counter = 1;
|
||||
hb_memvarValueDecRef( pDynSymbol->hMemvar );
|
||||
pDynSymbol->hMemvar =0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************************************************** */
|
||||
|
||||
/* $DOC$
|
||||
@@ -886,7 +900,7 @@ HARBOUR HB___MVRELEASE( void )
|
||||
|
||||
if( pMask->item.asString.value[ 0 ] == '*' )
|
||||
bIncludeVar =TRUE; /* delete all memvar variables */
|
||||
hb_memvarReleaseWithMask( pMask->item.asString.value, bIncludeVar );
|
||||
hb_memvarReleaseWithMask( pMask->item.asString.value, bIncludeVar );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -965,3 +979,37 @@ HARBOUR HB___MVSCOPE( void )
|
||||
}
|
||||
hb_retni( iMemvar );
|
||||
}
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVCLEAR()
|
||||
* $CATEGORY$
|
||||
* Variable management
|
||||
* $ONELINER$
|
||||
* This function releases all PRIVATE and PUBLIC variables
|
||||
* $SYNTAX$
|
||||
* __MVCLEAR()
|
||||
* $ARGUMENTS$
|
||||
*
|
||||
* $RETURNS$
|
||||
* Nothing
|
||||
* $DESCRIPTION$
|
||||
* This function releases all PRIVATE and PUBLIC variables.
|
||||
* It is used to implement CLEAR MEMORY statement.
|
||||
* The memory occupied by all visible variables are released - any
|
||||
* attempt to access the variable will result in a runtime error.
|
||||
* You have to reuse PRIVATE or PUBLIC statement to create again
|
||||
* the variable that was cleared by this function.
|
||||
* $STATUS$
|
||||
*
|
||||
* $COMPLIANCE$
|
||||
*
|
||||
* $SEEALSO$
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
HARBOUR HB___MVCLEAR( void )
|
||||
{
|
||||
hb_dynsymEval( hb_memvarClear );
|
||||
}
|
||||
|
||||
@@ -188,6 +188,16 @@ PHB_DYNS hb_dynsymFind( char * szName )
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hb_dynsymEval( PHB_DYNS_FUNC pFunction )
|
||||
{
|
||||
BOOL bCont = TRUE;
|
||||
WORD i;
|
||||
|
||||
for( i=0; i < wDynSymbols && bCont; i++ )
|
||||
bCont =(pFunction)( pDynItems[ i ].pDynSym );
|
||||
}
|
||||
|
||||
|
||||
void hb_dynsymRelease( void )
|
||||
{
|
||||
WORD w;
|
||||
|
||||
@@ -73,15 +73,21 @@ HARBOUR HB_ERRORLEVEL( void );
|
||||
HARBOUR HB_PCOUNT( void );
|
||||
HARBOUR HB_PVALUE( void );
|
||||
|
||||
static void AliasPop( void ); /* pops the workarea number form the eval stack */
|
||||
static void AliasPush( void ); /* pushes the current workarea number */
|
||||
static void AliasSwap( void ); /* swaps items on the eval stack and pops the workarea number */
|
||||
static void PopAliasedField( PHB_SYMB ); /* pops an aliased field from the eval stack*/
|
||||
static void PopField( PHB_SYMB ); /* pops an unaliased field from the eval stack */
|
||||
static void PushAliasedField( PHB_SYMB ); /* pushes an aliased field on the eval stack */
|
||||
static void PushField( PHB_SYMB ); /* pushes an unaliased field on the eval stack */
|
||||
static void hb_vmAliasPop( void ); /* pops the workarea number form the eval stack */
|
||||
static void hb_vmAliasPush( void ); /* pushes the current workarea number */
|
||||
static void hb_vmAliasSwap( void ); /* swaps items on the eval stack and pops the workarea number */
|
||||
static void hb_vmPopAliasedField( PHB_SYMB ); /* pops an aliased field from the eval stack*/
|
||||
static void hb_vmPopField( PHB_SYMB ); /* pops an unaliased field from the eval stack */
|
||||
static void hb_vmPushAliasedField( PHB_SYMB ); /* pushes an aliased field on the eval stack */
|
||||
static void hb_vmPushField( PHB_SYMB ); /* pushes an unaliased field on the eval stack */
|
||||
|
||||
static void hb_vmDoInitStatics( void ); /* executes all _INITSTATICS functions */
|
||||
static void hb_vmDoInitFunctions( int argc, char * argv[] ); /* executes all defined PRGs INIT functions */
|
||||
static void hb_vmDoExitFunctions( void ); /* executes all defined PRGs EXIT functions */
|
||||
static void hb_vmReleaseLocalSymbols( void ); /* releases the memory of the local symbols linked list */
|
||||
|
||||
#ifdef HARBOUR_OBJ_GENERATION
|
||||
static void hb_vmProcessObjSymbols ( void ); /* process Harbour generated OBJ symbols */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -426,19 +432,19 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_POPALIAS:
|
||||
AliasPop();
|
||||
hb_vmAliasPop();
|
||||
w++;
|
||||
break;
|
||||
|
||||
case HB_P_POPALIASEDFIELD:
|
||||
wParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
PopAliasedField( pSymbols + wParams );
|
||||
hb_vmPopAliasedField( pSymbols + wParams );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
case HB_P_POPFIELD:
|
||||
wParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
PopField( pSymbols + wParams );
|
||||
hb_vmPopField( pSymbols + wParams );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
@@ -464,13 +470,13 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_PUSHALIAS:
|
||||
AliasPush();
|
||||
hb_vmAliasPush();
|
||||
w++;
|
||||
break;
|
||||
|
||||
case HB_P_PUSHALIASEDFIELD:
|
||||
wParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
PushAliasedField( pSymbols + wParams );
|
||||
hb_vmPushAliasedField( pSymbols + wParams );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
@@ -492,7 +498,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
|
||||
case HB_P_PUSHFIELD:
|
||||
wParams = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 );
|
||||
PushField( pSymbols + wParams );
|
||||
hb_vmPushField( pSymbols + wParams );
|
||||
w += 3;
|
||||
break;
|
||||
|
||||
@@ -561,7 +567,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
break;
|
||||
|
||||
case HB_P_SWAPALIAS:
|
||||
AliasSwap();
|
||||
hb_vmAliasSwap();
|
||||
w++;
|
||||
break;
|
||||
|
||||
@@ -610,7 +616,7 @@ void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols )
|
||||
/* Pops the item from the eval stack and uses it to select the current
|
||||
* workarea
|
||||
*/
|
||||
static void AliasPop( void )
|
||||
static void hb_vmAliasPop( void )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
|
||||
@@ -620,7 +626,7 @@ static void AliasPop( void )
|
||||
{
|
||||
case IT_INTEGER:
|
||||
/* Alias was used as integer value, for example: 4->field
|
||||
* or it was saved on the stack using AliasPush()
|
||||
* or it was saved on the stack using hb_vmAliasPush()
|
||||
* or was evaluated from an expression, (nWorkArea)->field
|
||||
*/
|
||||
/* TODO: synchronize it with RDD API
|
||||
@@ -653,12 +659,12 @@ static void AliasPop( void )
|
||||
break;
|
||||
}
|
||||
|
||||
HB_DEBUG( "AliasPop\n" );
|
||||
HB_DEBUG( "hb_vmAliasPop\n" );
|
||||
}
|
||||
|
||||
/* pushes current workarea number on the eval stack
|
||||
*/
|
||||
static void AliasPush( void )
|
||||
static void hb_vmAliasPush( void )
|
||||
{
|
||||
stack.pPos->type = IT_INTEGER;
|
||||
/* TODO: synchronize it with RDD API
|
||||
@@ -667,13 +673,13 @@ static void AliasPush( void )
|
||||
stack.pPos->item.asInteger.length = 10;
|
||||
stack.pPos->item.asInteger.decimal = 0;
|
||||
hb_stackPush();
|
||||
HB_DEBUG( "AliasPush\n" );
|
||||
HB_DEBUG( "hb_vmAliasPush\n" );
|
||||
}
|
||||
|
||||
/* Swaps two last items on the eval stack - the last item after swaping
|
||||
* is popped as current workarea number
|
||||
*/
|
||||
static void AliasSwap( void )
|
||||
static void hb_vmAliasSwap( void )
|
||||
{
|
||||
HB_ITEM_PTR pItem = stack.pPos -1;
|
||||
HB_ITEM_PTR pWorkArea = stack.pPos -2;
|
||||
@@ -685,7 +691,7 @@ static void AliasSwap( void )
|
||||
pItem->type =IT_NIL;
|
||||
hb_stackDec();
|
||||
|
||||
HB_DEBUG( "AliasSwap\n" );
|
||||
HB_DEBUG( "hb_vmAliasSwap\n" );
|
||||
}
|
||||
|
||||
|
||||
@@ -1566,13 +1572,13 @@ long hb_vmPopDate( void )
|
||||
}
|
||||
}
|
||||
|
||||
static void PopAliasedField( PHB_SYMB pSym )
|
||||
static void hb_vmPopAliasedField( PHB_SYMB pSym )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pSym );
|
||||
/* TODO: pop the proper value */
|
||||
hb_stackPop(); /* field */
|
||||
hb_stackPop(); /* alias */
|
||||
HB_DEBUG( "PopAliasedField\n" );
|
||||
HB_DEBUG( "hb_vmPopAliasedField\n" );
|
||||
}
|
||||
|
||||
double hb_vmPopDouble( WORD *pwDec )
|
||||
@@ -1607,12 +1613,12 @@ double hb_vmPopDouble( WORD *pwDec )
|
||||
return d;
|
||||
}
|
||||
|
||||
static void PopField( PHB_SYMB pSym )
|
||||
static void hb_vmPopField( PHB_SYMB pSym )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pSym );
|
||||
/* TODO: pop the proper value */
|
||||
hb_stackPop();
|
||||
HB_DEBUG( "PopField\n" );
|
||||
HB_DEBUG( "hb_vmPopField\n" );
|
||||
}
|
||||
|
||||
void hb_vmPopLocal( SHORT iLocal )
|
||||
@@ -1728,7 +1734,7 @@ void hb_vmPower( void )
|
||||
hb_vmPushNumber( pow( d1, d2 ), hb_set.HB_SET_DECIMALS );
|
||||
}
|
||||
|
||||
static void PushAliasedField( PHB_SYMB pSym )
|
||||
static void hb_vmPushAliasedField( PHB_SYMB pSym )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pSym );
|
||||
/* TODO: push the proper value */
|
||||
@@ -1737,7 +1743,7 @@ static void PushAliasedField( PHB_SYMB pSym )
|
||||
stack.pPos->item.asInteger.length = 10;
|
||||
stack.pPos->item.asInteger.decimal = 0;
|
||||
hb_stackPush();
|
||||
HB_DEBUG( "PushAliasedField\n" );
|
||||
HB_DEBUG( "hb_vmPushAliasedField\n" );
|
||||
}
|
||||
|
||||
void hb_vmPushLogical( BOOL bValue )
|
||||
@@ -1748,7 +1754,7 @@ void hb_vmPushLogical( BOOL bValue )
|
||||
HB_DEBUG( "hb_vmPushLogical\n" );
|
||||
}
|
||||
|
||||
static void PushField( PHB_SYMB pSym )
|
||||
static void hb_vmPushField( PHB_SYMB pSym )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pSym );
|
||||
/* TODO: push the proper value */
|
||||
@@ -1757,7 +1763,7 @@ static void PushField( PHB_SYMB pSym )
|
||||
stack.pPos->item.asInteger.length = 10;
|
||||
stack.pPos->item.asInteger.decimal = 0;
|
||||
hb_stackPush();
|
||||
HB_DEBUG( "PushField\n" );
|
||||
HB_DEBUG( "hb_vmPushField\n" );
|
||||
}
|
||||
|
||||
void hb_vmPushLocal( SHORT iLocal )
|
||||
@@ -2162,7 +2168,7 @@ void hb_vmProcessSymbols( PHB_SYMB pModuleSymbols, WORD wModuleSymbols ) /* modu
|
||||
}
|
||||
|
||||
#ifdef HARBOUR_OBJ_GENERATION
|
||||
void hb_vmProcessObjSymbols( void )
|
||||
static void hb_vmProcessObjSymbols( void )
|
||||
{
|
||||
POBJSYMBOLS pObjSymbols = ( POBJSYMBOLS ) &HB_FIRSTSYMBOL;
|
||||
|
||||
@@ -2180,7 +2186,7 @@ void hb_vmProcessObjSymbols( void )
|
||||
}
|
||||
#endif
|
||||
|
||||
void hb_vmReleaseLocalSymbols( void )
|
||||
static void hb_vmReleaseLocalSymbols( void )
|
||||
{
|
||||
PSYMBOLS pDestroy;
|
||||
|
||||
@@ -2197,7 +2203,7 @@ void hb_vmReleaseLocalSymbols( void )
|
||||
* this function. These two bits cannot be marked at the same
|
||||
* time for normal user defined functions.
|
||||
*/
|
||||
void hb_vmDoInitStatics( void )
|
||||
static void hb_vmDoInitStatics( void )
|
||||
{
|
||||
PSYMBOLS pLastSymbols = pSymbols;
|
||||
WORD w;
|
||||
@@ -2227,7 +2233,7 @@ void hb_vmDoInitStatics( void )
|
||||
} while( pLastSymbols );
|
||||
}
|
||||
|
||||
void hb_vmDoExitFunctions( void )
|
||||
static void hb_vmDoExitFunctions( void )
|
||||
{
|
||||
PSYMBOLS pLastSymbols = pSymbols;
|
||||
WORD w;
|
||||
@@ -2251,7 +2257,7 @@ void hb_vmDoExitFunctions( void )
|
||||
} while( pLastSymbols );
|
||||
}
|
||||
|
||||
void hb_vmDoInitFunctions( int argc, char * argv[] )
|
||||
static void hb_vmDoInitFunctions( int argc, char * argv[] )
|
||||
{
|
||||
PSYMBOLS pLastSymbols = pSymbols;
|
||||
WORD w;
|
||||
|
||||
@@ -14,7 +14,6 @@ FUNCTION Main()
|
||||
STATIC FUNCTION TestIt( cSpec )
|
||||
|
||||
LOCAL a := ADIR( cSpec )
|
||||
|
||||
LOCAL a1 := Array(a)
|
||||
LOCAL a2 := 10
|
||||
LOCAL a3 := Array(a - 1)
|
||||
|
||||
Reference in New Issue
Block a user