fixed error with # && ##-operators in non function-like macro's
authoreck <none@none>
Thu, 13 Sep 1990 15:12:13 +0000 (15:12 +0000)
committereck <none@none>
Thu, 13 Sep 1990 15:12:13 +0000 (15:12 +0000)
pass printable garbage characters on to parser

lang/cem/cemcom.ansi/LLlex.c
lang/cem/cemcom.ansi/replace.c

index 14838cb..fc1342a 100644 (file)
@@ -178,10 +178,11 @@ firstline:
 #ifndef        NOPP
 garbage:
 #endif
-               if (040 < ch && ch < 0177)
-                       lexerror("garbage char %c", ch);
-               else
+               if (040 < ch && ch < 0177) {
+                       return ptok->tk_symb = ch;
+               } else {
                        lexerror("garbage char \\%03o", ch);
+               }
                goto again;
        case STSIMP:    /* a simple character, no part of compound token*/
                return ptok->tk_symb = ch;
index 3d62f36..8543388 100644 (file)
@@ -548,6 +548,7 @@ macro2buffer(repl, idf, args)
        */
        register char *ptr = idf->id_macro->mc_text;
        int err = 0;
+       int func = idf->id_macro->mc_nps != -1;
        char *stringify();
 
        ASSERT(ptr[idf->id_macro->mc_length] == '\0');
@@ -566,7 +567,7 @@ macro2buffer(repl, idf, args)
                    ptr++;
                } while (*ptr != delim || *ptr == '\0');
                add2repl(repl, *ptr++);
-           } else if (*ptr == '#') {
+           } else if (func && *ptr == '#') {
                if (*++ptr == '#') {
                    register int tmpindex;
                        /* ## - paste operator */
@@ -631,8 +632,9 @@ macro2buffer(repl, idf, args)
                                        repl->r_text[tmpindex] = TOKSEP;
                            }
                    }
-               } else                  /* # operator */
-                   ptr = stringify(repl, ptr, args);
+               } else {                        /* # operator */
+                       ptr = stringify(repl, ptr, args);
+               }
            } else if (*ptr & FORMALP) {
                /* insert actual parameter */
                register int n = *ptr++ & 0177;
@@ -658,8 +660,9 @@ macro2buffer(repl, idf, args)
 
                if (*(repl->r_ptr - 1) != TOKSEP)
                        add2repl(repl, TOKSEP);
-           } else
+           } else {
                add2repl(repl, *ptr++);
+           }
        }
        if (err)
                lexerror("illegal use of the ## operator");