[Plib-cvs] plib/src/psl pslCompiler.h,1.11,1.12 pslToken.cxx,1.13,1.14
Brought to you by:
sjbaker
From: Steve B. <sj...@us...> - 2002-09-11 05:28:02
|
Update of /cvsroot/plib/plib/src/psl In directory usw-pr-cvs1:/tmp/cvs-serv30442/plib/src/psl Modified Files: pslCompiler.h pslToken.cxx Log Message: Added #define/#undef Index: pslCompiler.h =================================================================== RCS file: /cvsroot/plib/plib/src/psl/pslCompiler.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- pslCompiler.h 10 Sep 2002 04:37:39 -0000 1.11 +++ pslCompiler.h 11 Sep 2002 05:27:58 -0000 1.12 @@ -49,9 +49,17 @@ /* File I/O and preprocessor */ int getChar () ; + void doIncludeStatement () ; + void doDefineStatement () ; + void doIfdefStatement () ; + void doUndefStatement () ; + void doIfndefStatement () ; + void doElseStatement () ; + void doEndifStatement () ; + int doPreProcessorCommand () ; - void getToken ( char *s ) ; + void getToken ( char *s, int define_sub = TRUE ) ; void ungetToken ( const char *s ) ; @@ -132,10 +140,16 @@ int pushGlobalDeclaration () ; void pushProgram () ; - /* The symbol tables for variables and code */ + /* The symbol tables for variables, code and define's */ int next_label ; int next_code_symbol ; + int next_define ; + + char *define_token [ MAX_SYMBOL ] ; + char *define_replacement [ MAX_SYMBOL ] ; + + int searchDefines ( char *s ) ; pslSymbol symtab [ MAX_SYMBOL ] ; pslSymbol code_symtab [ MAX_SYMBOL ] ; @@ -240,6 +254,8 @@ for ( int i = 0 ; i < MAX_SYMBOL ; i++ ) { + define_token [ i ] = NULL ; + define_replacement [ i ] = NULL ; symtab [ i ] . symbol = NULL ; forward_ref [ i ] . symbol = NULL ; code_symtab [ i ] . symbol = NULL ; @@ -252,6 +268,8 @@ { for ( int i = 0 ; i < MAX_SYMBOL ; i++ ) { + delete [] define_token [ i ] ; + delete [] define_replacement [ i ] ; delete [] symtab [ i ] . symbol ; delete [] code_symtab [ i ] . symbol ; delete [] forward_ref [ i ] . symbol ; @@ -270,6 +288,8 @@ for ( i = 0 ; i < MAX_SYMBOL ; i++ ) { + delete [] define_token [ i ] ; define_token [ i ] = NULL ; + delete [] define_replacement [ i ] ; define_replacement [ i ] = NULL ; delete [] symtab [ i ] . symbol ; symtab [ i ] . symbol = NULL ; delete [] code_symtab [ i ] . symbol ; code_symtab [ i ] . symbol = NULL ; delete [] forward_ref [ i ] . symbol ; forward_ref [ i ] . symbol = NULL ; @@ -279,6 +299,7 @@ locality_sp = 0 ; + next_define = 0 ; next_continue = 0 ; next_break = 0 ; next_tmp_label= 0 ; Index: pslToken.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/psl/pslToken.cxx,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- pslToken.cxx 10 Sep 2002 23:02:08 -0000 1.13 +++ pslToken.cxx 11 Sep 2002 05:27:58 -0000 1.14 @@ -54,6 +54,87 @@ } +int pslCompiler::searchDefines ( char *token ) +{ + for ( int i = 0 ; i < next_define ; i++ ) + if ( define_token [ i ] != NULL && + strcmp ( token, define_token [ i ] ) == 0 ) + return i ; + + return -1 ; [...157 lines suppressed...] + + if ( def == -1 ) + return ; + + /* + If there is a replacement for this token, un-get it so it's the + next thing we'll read. + */ + + for ( int i = strlen ( define_replacement [ def ] ) - 1 ; i >= 0 ; i-- ) + _pslUnGetChar ( define_replacement [ def ][ i ] ) ; + + /* + Then have another try at reading the token. + */ + + getToken ( res ) ; } |