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