fixed error with # && ##-operators in non function-like macro's

pass printable garbage characters on to parser
This commit is contained in:
eck 1990-09-13 15:12:13 +00:00
parent 49fd9f9377
commit 5ed44e3432
2 changed files with 11 additions and 7 deletions

View 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;

View 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");