some fixes, f.i. process # in actual parameter list

This commit is contained in:
ceriel 1989-10-12 11:16:02 +00:00
parent b9bb251d60
commit 7255b1aa61
3 changed files with 18 additions and 5 deletions

View file

@ -81,6 +81,7 @@ preprocess(fn)
for (;;) {
if (c & 0200) {
if (c == EOI) {
newline();
flush(op-_obuf);
return;
}
@ -102,6 +103,7 @@ preprocess(fn)
echo(c);
}
else if (c == EOI) {
newline();
flush(op - _obuf);
return;
}
@ -149,6 +151,7 @@ preprocess(fn)
break;
}
else if (c == EOI) {
newline();
flush(op-_obuf);
return;
}
@ -161,8 +164,7 @@ preprocess(fn)
}
else if (c == '\'') escaped = 1;
}
}
while (escaped || c != stopc);
} while (escaped || c != stopc);
echo(c);
if (c == '\n')
break; /* Don't eat # */

View file

@ -67,7 +67,7 @@ replace(idef)
LoadChar(c);
c = skipspaces(c,1);
if (c != '(') { /* no replacement if no () */
error("macro %s needs arguments",
warning("macro %s needs arguments",
idef->id_text);
PushBack();
return 0;

View file

@ -16,12 +16,17 @@ skipspaces(ch, skipnl)
/* skipspaces() skips any white space and returns the first
non-space character.
*/
register int nlseen = 0;
for (;;) {
while (class(ch) == STSKIP)
while (class(ch) == STSKIP) {
nlseen = 0;
LoadChar(ch);
}
if (skipnl && class(ch) == STNL) {
LoadChar(ch);
++LineNumber;
nlseen++;
continue;
}
/* How about "\\\n"????????? */
@ -36,7 +41,13 @@ skipspaces(ch, skipnl)
return '/';
}
}
else
else if (nlseen && ch == '#') {
domacro();
LoadChar(ch);
/* ch is the first character of a line. This means
* that nlseen will still be true.
*/
} else
return ch;
}
}