2006-12-18 18:20 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
* include/hbcomp.h
+ added extern BOOL hb_compCheckUnclosedStru( HB_COMP_DECL )
* include/hbcompdf.h
+ added 'int iLastLineErr' to HB_COMP structure
* include/hbpp.h
+ added extern BOOL hb_pp_eof( PHB_PP_STATE )
* source/compiler/harbour.c
* source/compiler/harbour.y
* source/compiler/harbour.yyc
* source/compiler/harbour.yyh
* source/compiler/hbgenerr.c
* fixed reporting errors in cases of unclosed delimiters or
unclosed control structures IF/WHILE/FOR/etc
* source/pp/ppcore.c
+ added hb_pp_eof() function
This commit is contained in:
@@ -8,6 +8,27 @@
|
||||
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2006-12-18 18:20 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
|
||||
* include/hbcomp.h
|
||||
+ added extern BOOL hb_compCheckUnclosedStru( HB_COMP_DECL )
|
||||
|
||||
* include/hbcompdf.h
|
||||
+ added 'int iLastLineErr' to HB_COMP structure
|
||||
|
||||
* include/hbpp.h
|
||||
+ added extern BOOL hb_pp_eof( PHB_PP_STATE )
|
||||
|
||||
* source/compiler/harbour.c
|
||||
* source/compiler/harbour.y
|
||||
* source/compiler/harbour.yyc
|
||||
* source/compiler/harbour.yyh
|
||||
* source/compiler/hbgenerr.c
|
||||
* fixed reporting errors in cases of unclosed delimiters or
|
||||
unclosed control structures IF/WHILE/FOR/etc
|
||||
|
||||
* source/pp/ppcore.c
|
||||
+ added hb_pp_eof() function
|
||||
|
||||
2006-12-18 14:19 UTC+0200 Chen Kedem <niki@actcom.co.il>
|
||||
* doc/dirstruc.txt
|
||||
+ Add a oneliner description for: source/rdd/usrrdd, source/rtl/gtgui
|
||||
|
||||
@@ -233,6 +233,7 @@ extern void hb_compStaticDefStart( HB_COMP_DECL );
|
||||
extern void hb_compStaticDefEnd( HB_COMP_DECL );
|
||||
extern void hb_compGenStaticName( char *, HB_COMP_DECL );
|
||||
|
||||
extern BOOL hb_compCheckUnclosedStru( HB_COMP_DECL );
|
||||
|
||||
#ifdef HB_MACRO_SUPPORT
|
||||
|
||||
|
||||
@@ -592,6 +592,7 @@ typedef struct _HB_COMP
|
||||
int iVarScope; /* holds the scope for next variables to be defined */
|
||||
int iLanguage; /* default Harbour generated output language */
|
||||
int iGenCOutput; /* C code generation should be verbose (use comments) or not */
|
||||
int ilastLineErr; /* line numer with last syntax error */
|
||||
|
||||
BOOL fExit; /* force breaking compilation process */
|
||||
BOOL fQuiet; /* be quiet during compilation (-q) */
|
||||
|
||||
@@ -632,6 +632,7 @@ extern BOOL hb_pp_inFile( PHB_PP_STATE pState, char * szFileName, BOOL fSearch
|
||||
extern BOOL hb_pp_outFile( PHB_PP_STATE pState, char * szOutFileName, FILE * file_out );
|
||||
extern char * hb_pp_fileName( PHB_PP_STATE pState );
|
||||
extern int hb_pp_line( PHB_PP_STATE pState );
|
||||
extern BOOL hb_pp_eof( PHB_PP_STATE pState );
|
||||
extern int hb_pp_lineTot( PHB_PP_STATE pState );
|
||||
extern char * hb_pp_outFileName( PHB_PP_STATE pState );
|
||||
extern char * hb_pp_nextLine( PHB_PP_STATE pState, ULONG * pulLen );
|
||||
|
||||
@@ -1866,6 +1866,7 @@ void hb_compFunctionAdd( HB_COMP_DECL, char * szFunName, HB_SYMBOLSCOPE cScope,
|
||||
HB_COMP_PARAM->functions.iCount++;
|
||||
|
||||
HB_COMP_PARAM->lastLinePos = 0; /* optimization of line numbers opcode generation */
|
||||
HB_COMP_PARAM->ilastLineErr = 0; /* position of last syntax error (line number) */
|
||||
|
||||
hb_compGenPCode3( HB_P_FRAME, 0, 0, HB_COMP_PARAM ); /* frame for locals and parameters */
|
||||
hb_compGenPCode3( HB_P_SFRAME, 0, 0, HB_COMP_PARAM ); /* frame for statics variables */
|
||||
@@ -4536,6 +4537,7 @@ static int hb_compCompile( HB_COMP_DECL, char * szPrg, BOOL bSingleFile )
|
||||
}
|
||||
|
||||
hb_compparse( HB_COMP_PARAM );
|
||||
hb_compCheckUnclosedStru( HB_COMP_PARAM );
|
||||
|
||||
if( HB_COMP_PARAM->pFilePpo )
|
||||
{
|
||||
|
||||
@@ -304,7 +304,6 @@ Source : Crlf
|
||||
| Function
|
||||
| Statement
|
||||
| Line
|
||||
| ProcReq
|
||||
| error Crlf { yyclearin; yyerrok; }
|
||||
| Source Crlf
|
||||
| Source VarDefs
|
||||
@@ -314,7 +313,6 @@ Source : Crlf
|
||||
| Source Function
|
||||
| Source Statement
|
||||
| Source Line
|
||||
| Source ProcReq
|
||||
| Source error Crlf { yyclearin; yyerrok; }
|
||||
;
|
||||
|
||||
@@ -322,30 +320,6 @@ Line : LINE NUM_LONG LITERAL Crlf
|
||||
| LINE NUM_LONG LITERAL '@' LITERAL Crlf /* Xbase++ style */
|
||||
;
|
||||
|
||||
ProcReq : PROCREQ CompTimeStr ')' Crlf { HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; }
|
||||
;
|
||||
|
||||
CompTimeStr : LITERAL {
|
||||
if( $1.dealloc )
|
||||
{
|
||||
$1.string = hb_compIdentifierNew( HB_COMP_PARAM, $1.string, HB_IDENT_FREE );
|
||||
$1.dealloc = FALSE;
|
||||
}
|
||||
hb_compAutoOpenAdd( HB_COMP_PARAM, $1.string );
|
||||
}
|
||||
| LITERAL '+' LITERAL {
|
||||
{
|
||||
char szFileName[ _POSIX_PATH_MAX + 1 ];
|
||||
hb_strncat( hb_strncpy( szFileName, $1.string, _POSIX_PATH_MAX ), $3.string, _POSIX_PATH_MAX );
|
||||
hb_compAutoOpenAdd( HB_COMP_PARAM, hb_compIdentifierNew( HB_COMP_PARAM, szFileName, HB_IDENT_COPY ) );
|
||||
if( $1.dealloc )
|
||||
hb_xfree( $1.string );
|
||||
if( $3.dealloc )
|
||||
hb_xfree( $3.string );
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
Function : FunScope FUNCTION IdentName { HB_COMP_PARAM->cVarType = ' '; hb_compFunctionAdd( HB_COMP_PARAM, $3, ( HB_SYMBOLSCOPE ) $1, 0 ); } Crlf {}
|
||||
| FunScope PROCEDURE IdentName { HB_COMP_PARAM->cVarType = ' '; hb_compFunctionAdd( HB_COMP_PARAM, $3, ( HB_SYMBOLSCOPE ) $1, FUN_PROCEDURE ); } Crlf {}
|
||||
| FunScope FUNCTION IdentName { HB_COMP_PARAM->cVarType = ' '; hb_compFunctionAdd( HB_COMP_PARAM, $3, ( HB_SYMBOLSCOPE ) $1, 0 ); HB_COMP_PARAM->iVarScope = VS_PARAMETER; } '(' Params ')' Crlf {}
|
||||
@@ -494,6 +468,28 @@ Statement : ExecFlow { HB_COMP_PARAM->fDontGenLineNum = TRUE; } CrlfStmnt { }
|
||||
else
|
||||
hb_compGenWarning( HB_COMP_PARAM, hb_comp_szWarnings, 'W', HB_COMP_WARN_DUPL_ANNOUNCE, $2, NULL );
|
||||
} Crlf
|
||||
| PROCREQ CompTimeStr ')' Crlf { HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; }
|
||||
;
|
||||
|
||||
CompTimeStr : LITERAL {
|
||||
if( $1.dealloc )
|
||||
{
|
||||
$1.string = hb_compIdentifierNew( HB_COMP_PARAM, $1.string, HB_IDENT_FREE );
|
||||
$1.dealloc = FALSE;
|
||||
}
|
||||
hb_compAutoOpenAdd( HB_COMP_PARAM, $1.string );
|
||||
}
|
||||
| LITERAL '+' LITERAL {
|
||||
{
|
||||
char szFileName[ _POSIX_PATH_MAX + 1 ];
|
||||
hb_strncat( hb_strncpy( szFileName, $1.string, _POSIX_PATH_MAX ), $3.string, _POSIX_PATH_MAX );
|
||||
hb_compAutoOpenAdd( HB_COMP_PARAM, hb_compIdentifierNew( HB_COMP_PARAM, szFileName, HB_IDENT_COPY ) );
|
||||
if( $1.dealloc )
|
||||
hb_xfree( $1.string );
|
||||
if( $3.dealloc )
|
||||
hb_xfree( $3.string );
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
CrlfStmnt : { hb_compLinePushIfInside( HB_COMP_PARAM ); } Crlf
|
||||
@@ -503,7 +499,18 @@ LineStat : Crlf { $<lNumber>$ = 0; HB_COMP_PARAM->fDontGenLineNum = T
|
||||
| Statement { $<lNumber>$ = 1; }
|
||||
| Declaration { $<lNumber>$ = 1; }
|
||||
| Line { $<lNumber>$ = 1; }
|
||||
| ControlError { $<lNumber>$ = 0; hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, NULL, NULL ); }
|
||||
| ControlError { $<lNumber>$ = 0; hb_compCheckUnclosedStru( HB_COMP_PARAM ); }
|
||||
| error { int iLine = hb_pp_line( HB_COMP_PARAM->pLex->pPP );
|
||||
if( HB_COMP_PARAM->ilastLineErr && HB_COMP_PARAM->ilastLineErr == iLine )
|
||||
{
|
||||
yyclearin;
|
||||
}
|
||||
else
|
||||
{
|
||||
yyerrok;
|
||||
HB_COMP_PARAM->ilastLineErr = iLine;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
ControlError : FunScopeId FUNCTION IdentName Crlf {}
|
||||
@@ -1526,8 +1533,12 @@ IfElseIf : ELSEIF { HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE
|
||||
}
|
||||
;
|
||||
|
||||
EndIf : ENDIF { --HB_COMP_PARAM->wIfCounter; HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( /*FUN_WITH_RETURN |*/ FUN_BREAK_CODE ); }
|
||||
| END { --HB_COMP_PARAM->wIfCounter; HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( /*FUN_WITH_RETURN |*/ FUN_BREAK_CODE ); }
|
||||
EndIf : ENDIF { if( HB_COMP_PARAM->wIfCounter )
|
||||
--HB_COMP_PARAM->wIfCounter;
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( /*FUN_WITH_RETURN |*/ FUN_BREAK_CODE ); }
|
||||
| END { if( HB_COMP_PARAM->wIfCounter )
|
||||
--HB_COMP_PARAM->wIfCounter;
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( /*FUN_WITH_RETURN |*/ FUN_BREAK_CODE ); }
|
||||
;
|
||||
|
||||
DoCase : DoCaseBegin
|
||||
@@ -1548,11 +1559,13 @@ DoCase : DoCaseBegin
|
||||
;
|
||||
|
||||
EndCase : ENDCASE
|
||||
{ --HB_COMP_PARAM->wCaseCounter;
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
|
||||
}
|
||||
{ if( HB_COMP_PARAM->wCaseCounter )
|
||||
--HB_COMP_PARAM->wCaseCounter;
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
|
||||
}
|
||||
| END
|
||||
{ --HB_COMP_PARAM->wCaseCounter;
|
||||
{ if( HB_COMP_PARAM->wCaseCounter )
|
||||
--HB_COMP_PARAM->wCaseCounter;
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
|
||||
}
|
||||
;
|
||||
@@ -1612,7 +1625,9 @@ DoWhile : WhileBegin Expression Crlf
|
||||
}
|
||||
EndWhile
|
||||
{
|
||||
hb_compGenJumpHere( $<lNumber>4, HB_COMP_PARAM ); --HB_COMP_PARAM->wWhileCounter;
|
||||
hb_compGenJumpHere( $<lNumber>4, HB_COMP_PARAM );
|
||||
if( HB_COMP_PARAM->wWhileCounter )
|
||||
--HB_COMP_PARAM->wWhileCounter;
|
||||
hb_compLoopEnd( HB_COMP_PARAM );
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN;
|
||||
}
|
||||
@@ -1716,10 +1731,18 @@ StepExpr : /* default step expression */ { $<asExpr>$ = NULL; }
|
||||
| STEP Expression { $<asExpr>$ = hb_compExprReduce( $2, HB_COMP_PARAM ); }
|
||||
;
|
||||
|
||||
ForStatements : EmptyStats NEXT { hb_compLinePush( HB_COMP_PARAM ); --HB_COMP_PARAM->wForCounter; }
|
||||
| EmptyStats NEXT IdentName { hb_compLinePush( HB_COMP_PARAM ); --HB_COMP_PARAM->wForCounter; }
|
||||
| EmptyStats END { hb_compLinePush( HB_COMP_PARAM ); --HB_COMP_PARAM->wForCounter; }
|
||||
| EmptyStats END IdentName { hb_compLinePush( HB_COMP_PARAM ); --HB_COMP_PARAM->wForCounter; }
|
||||
ForStatements : EmptyStats NEXT { hb_compLinePush( HB_COMP_PARAM );
|
||||
if( HB_COMP_PARAM->wForCounter )
|
||||
--HB_COMP_PARAM->wForCounter; }
|
||||
| EmptyStats NEXT IdentName { hb_compLinePush( HB_COMP_PARAM );
|
||||
if( HB_COMP_PARAM->wForCounter )
|
||||
--HB_COMP_PARAM->wForCounter; }
|
||||
| EmptyStats END { hb_compLinePush( HB_COMP_PARAM );
|
||||
if( HB_COMP_PARAM->wForCounter )
|
||||
--HB_COMP_PARAM->wForCounter; }
|
||||
| EmptyStats END IdentName { hb_compLinePush( HB_COMP_PARAM );
|
||||
if( HB_COMP_PARAM->wForCounter )
|
||||
--HB_COMP_PARAM->wForCounter; }
|
||||
;
|
||||
|
||||
ForVar : IdentName { $$ = hb_compExprNewVarRef( $1, HB_COMP_PARAM ); }
|
||||
@@ -1795,8 +1818,8 @@ DoSwitch : SwitchBegin
|
||||
;
|
||||
|
||||
EndSwitch : END
|
||||
{
|
||||
--HB_COMP_PARAM->wSwitchCounter;
|
||||
{ if( HB_COMP_PARAM->wSwitchCounter )
|
||||
--HB_COMP_PARAM->wSwitchCounter;
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE );
|
||||
}
|
||||
;
|
||||
@@ -1859,7 +1882,7 @@ BeginSeq : BEGINSEQ { ++HB_COMP_PARAM->wSeqCounter; $<lNumber>$ = hb_compSeque
|
||||
* RECOVER clause is used
|
||||
*/
|
||||
hb_compGenJumpThere( $<lNumber>5, HB_COMP_PARAM->functions.pLast->lPCodePos, HB_COMP_PARAM );
|
||||
if( !$<lNumber>6 ) /* only if there is no RECOVER clause */
|
||||
if( !$<lNumber>6 && HB_COMP_PARAM->wSeqCounter ) /* only if there is no RECOVER clause */
|
||||
--HB_COMP_PARAM->wSeqCounter; /* RECOVER is also considered as end of sequence */
|
||||
hb_compSequenceFinish( $<lNumber>2, $<lNumber>4, HB_COMP_PARAM );
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN;
|
||||
@@ -1875,7 +1898,8 @@ RecoverEmpty : RECOVER
|
||||
{
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE;
|
||||
$<lNumber>$ = HB_COMP_PARAM->functions.pLast->lPCodePos;
|
||||
--HB_COMP_PARAM->wSeqCounter;
|
||||
if( HB_COMP_PARAM->wSeqCounter )
|
||||
--HB_COMP_PARAM->wSeqCounter;
|
||||
hb_compLinePush( HB_COMP_PARAM );
|
||||
hb_compGenPCode2( HB_P_SEQRECOVER, HB_P_POP, HB_COMP_PARAM );
|
||||
}
|
||||
@@ -1885,7 +1909,8 @@ RecoverUsing : RECOVERUSING IdentName
|
||||
{
|
||||
HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE;
|
||||
$<lNumber>$ = HB_COMP_PARAM->functions.pLast->lPCodePos;
|
||||
--HB_COMP_PARAM->wSeqCounter;
|
||||
if( HB_COMP_PARAM->wSeqCounter )
|
||||
--HB_COMP_PARAM->wSeqCounter;
|
||||
hb_compLinePush( HB_COMP_PARAM );
|
||||
hb_compGenPCode1( HB_P_SEQRECOVER, HB_COMP_PARAM );
|
||||
hb_compGenPopVar( $2, HB_COMP_PARAM );
|
||||
@@ -1943,8 +1968,8 @@ WithObject : WITHOBJECT Expression Crlf
|
||||
}
|
||||
EmptyStatements
|
||||
END
|
||||
{
|
||||
--HB_COMP_PARAM->wWithObjectCnt;
|
||||
{ if( HB_COMP_PARAM->wWithObjectCnt )
|
||||
--HB_COMP_PARAM->wWithObjectCnt;
|
||||
hb_compGenPCode1( HB_P_WITHOBJECTEND, HB_COMP_PARAM );
|
||||
}
|
||||
| WITHOBJECT Expression Crlf END { hb_compExprDelete( $2, HB_COMP_PARAM ); }
|
||||
@@ -2643,12 +2668,60 @@ static HB_EXPR_PTR hb_compCheckPassByRef( HB_COMP_DECL, HB_EXPR_PTR pExpr )
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
BOOL hb_compCheckUnclosedStru( HB_COMP_DECL )
|
||||
{
|
||||
BOOL fUnclosed = TRUE;
|
||||
|
||||
if( HB_COMP_PARAM->wIfCounter )
|
||||
{
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, "IF", NULL );
|
||||
HB_COMP_PARAM->wIfCounter = 0;
|
||||
}
|
||||
else if( HB_COMP_PARAM->wForCounter )
|
||||
{
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, "FOR", NULL );
|
||||
HB_COMP_PARAM->wForCounter = 0;
|
||||
}
|
||||
else if( HB_COMP_PARAM->wWhileCounter )
|
||||
{
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, "WHILE", NULL );
|
||||
HB_COMP_PARAM->wWhileCounter = 0;
|
||||
}
|
||||
else if( HB_COMP_PARAM->wCaseCounter )
|
||||
{
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, "CASE", NULL );
|
||||
HB_COMP_PARAM->wCaseCounter = 0;
|
||||
}
|
||||
else if( HB_COMP_PARAM->wSwitchCounter )
|
||||
{
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, "SWITCH", NULL );
|
||||
HB_COMP_PARAM->wSwitchCounter = 0;
|
||||
}
|
||||
else if( HB_COMP_PARAM->wWithObjectCnt )
|
||||
{
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, "WITH OBJECT", NULL );
|
||||
HB_COMP_PARAM->wWithObjectCnt = 0;
|
||||
}
|
||||
else if( HB_COMP_PARAM->wSeqCounter )
|
||||
{
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_UNCLOSED_STRU, "BEGIN SEQUENCE", NULL );
|
||||
HB_COMP_PARAM->wSeqCounter = 0;
|
||||
}
|
||||
else
|
||||
fUnclosed = FALSE;
|
||||
|
||||
return fUnclosed;
|
||||
}
|
||||
|
||||
void yyerror( HB_COMP_DECL, char * s )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pComp );
|
||||
|
||||
if( !HB_COMP_PARAM->pLex->lasttok || HB_COMP_PARAM->pLex->lasttok[ 0 ] == '\n' )
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_YACC, s, "<eol>" );
|
||||
{
|
||||
if( ! hb_pp_eof( HB_COMP_PARAM->pLex->pPP ) )
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_INCOMPLETE_STMT, NULL, NULL );
|
||||
}
|
||||
else
|
||||
hb_compGenError( HB_COMP_PARAM, hb_comp_szErrors, 'E', HB_COMP_ERR_YACC, s, HB_COMP_PARAM->pLex->lasttok );
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -250,7 +250,7 @@
|
||||
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
typedef union YYSTYPE
|
||||
#line 103 "harbour.y"
|
||||
#line 103 "../../harbour.y"
|
||||
{
|
||||
char * string; /* to hold a string returned by lex */
|
||||
int iNumber; /* to hold a temporary integer number */
|
||||
|
||||
@@ -47,10 +47,10 @@ char * hb_comp_szErrors[] =
|
||||
"ELSE does not match IF",
|
||||
"ELSEIF does not match IF",
|
||||
"Syntax error: '%s'",
|
||||
"Unclosed control structures",
|
||||
"Unclosed control structure: '%s'",
|
||||
"%s statement with no loop in sight",
|
||||
"Syntax error: '%s' in: '%s'",
|
||||
"Incomplete statement: %s",
|
||||
"Incomplete statement or unbalanced delimiters",
|
||||
"Incorrect number of arguments: %s %s",
|
||||
"Invalid lvalue: '%s'",
|
||||
"Invalid use of '@' (pass by reference): '%s'",
|
||||
|
||||
@@ -4739,6 +4739,14 @@ char * hb_pp_outFileName( PHB_PP_STATE pState )
|
||||
return pState->szOutFileName;
|
||||
}
|
||||
|
||||
/*
|
||||
* return if EOF was reached
|
||||
*/
|
||||
BOOL hb_pp_eof( PHB_PP_STATE pState )
|
||||
{
|
||||
return pState->pFile->fEof;
|
||||
}
|
||||
|
||||
/*
|
||||
* add new define value
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user