From 4b79636b8f64790539b74238180e2a8140c70cdb Mon Sep 17 00:00:00 2001 From: ceriel Date: Tue, 8 Mar 1988 11:42:00 +0000 Subject: [PATCH] fixed a problem with #ifdef/#else/#endif --- lang/cem/cemcom/domacro.c | 12 +++++++----- lang/cem/cemcom/file_info.h | 4 ++-- lang/cem/cemcom/input.c | 6 ++++-- lang/cem/cemcom/main.c | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lang/cem/cemcom/domacro.c b/lang/cem/cemcom/domacro.c index 9b9fc9697..b2f2ea955 100644 --- a/lang/cem/cemcom/domacro.c +++ b/lang/cem/cemcom/domacro.c @@ -32,6 +32,8 @@ PRIVATE char ifstack[IFDEPTH]; /* if-stack: the content of an entry is */ /* 1 if a corresponding ELSE has been */ /* encountered. */ +int nestlevel = -1; + PRIVATE struct idf * GetIdentifier() { @@ -184,7 +186,7 @@ skip_block() } break; case K_ENDIF: - ASSERT(nestlevel >= 0); + ASSERT(nestlevel > nestlow); if (nestlevel == skiplevel) { SkipRestOfLine(); nestlevel--; @@ -249,7 +251,7 @@ do_include() File_Inserted = 1; FileName = result; LineNumber = 0; - nestlevel = -1; + nestlow = nestlevel; } } } @@ -314,7 +316,7 @@ push_if() PRIVATE do_elif() { - if (nestlevel < 0 || (ifstack[nestlevel])) { + if (nestlevel <= nestlow || (ifstack[nestlevel])) { lexerror("#elif without corresponding #if"); SkipRestOfLine(); } @@ -329,7 +331,7 @@ PRIVATE do_else() { SkipRestOfLine(); - if (nestlevel < 0 || (ifstack[nestlevel])) + if (nestlevel <= nestlow || (ifstack[nestlevel])) lexerror("#else without corresponding #if"); else { /* mark this level as else-d */ ++(ifstack[nestlevel]); @@ -341,7 +343,7 @@ PRIVATE do_endif() { SkipRestOfLine(); - if (nestlevel < 0) { + if (nestlevel <= nestlow) { lexerror("#endif without corresponding #if"); } else nestlevel--; diff --git a/lang/cem/cemcom/file_info.h b/lang/cem/cemcom/file_info.h index 21bdd9db1..ef2892b4a 100644 --- a/lang/cem/cemcom/file_info.h +++ b/lang/cem/cemcom/file_info.h @@ -7,12 +7,12 @@ struct file_info { unsigned int fil_lino; - int fil_nestlevel; + int fil_nestlow; char *fil_name; char *fil_wdir; }; -#define nestlevel finfo.fil_nestlevel +#define nestlow finfo.fil_nestlow #define LineNumber finfo.fil_lino #define FileName finfo.fil_name #define WorkingDir finfo.fil_wdir diff --git a/lang/cem/cemcom/input.c b/lang/cem/cemcom/input.c index 70f335815..f3154bd7c 100644 --- a/lang/cem/cemcom/input.c +++ b/lang/cem/cemcom/input.c @@ -10,6 +10,7 @@ #define INP_TYPE struct file_info #define INP_VAR finfo struct file_info finfo; +extern int nestlevel; #include "nopp.h" #include @@ -44,7 +45,7 @@ int NoUnstack; AtEoIT() { #ifndef NOPP - if (NoUnstack) lexwarning("unexpected EOF"); + /* if (NoUnstack) lexwarning("unexpected EOF"); ??? */ DoUnstack(); #endif NOPP return 0; @@ -54,9 +55,10 @@ AtEoIF() { #ifndef NOPP - if (nestlevel != -1) lexwarning("missing #endif"); + if (nestlevel != nestlow) lexwarning("missing #endif"); else #endif NOPP if (NoUnstack) lexwarning("unexpected EOF"); + nestlevel = nestlow; return 0; } diff --git a/lang/cem/cemcom/main.c b/lang/cem/cemcom/main.c index 3a81a931c..66d41b7f4 100644 --- a/lang/cem/cemcom/main.c +++ b/lang/cem/cemcom/main.c @@ -171,7 +171,7 @@ compile(argc, argv) File_Inserted = 1; init(); LineNumber = 0; - nestlevel = -1; + nestlow = -1; #ifndef NOPP WorkingDir = getwdir(source); #endif NOPP -- 2.34.1