if (lex->flags.preprocessing) {
haswhite = true;
+ /*
lex_tokench(lex, '/');
lex_tokench(lex, '/');
+ */
+ lex_tokench(lex, ' ');
+ lex_tokench(lex, ' ');
}
while (ch != EOF && ch != '\n') {
if (lex->flags.preprocessing)
- lex_tokench(lex, ch);
+ lex_tokench(lex, ' '); /* ch); */
ch = lex_getch(lex);
}
if (lex->flags.preprocessing) {
/* multiline comment */
if (lex->flags.preprocessing) {
haswhite = true;
+ /*
lex_tokench(lex, '/');
lex_tokench(lex, '*');
+ */
+ lex_tokench(lex, ' ');
+ lex_tokench(lex, ' ');
}
while (ch != EOF)
ch = lex_getch(lex);
if (ch == '/') {
if (lex->flags.preprocessing) {
+ /*
lex_tokench(lex, '*');
lex_tokench(lex, '/');
+ */
+ lex_tokench(lex, ' ');
+ lex_tokench(lex, ' ');
}
break;
}
}
if (lex->flags.preprocessing) {
- lex_tokench(lex, ch);
+ lex_tokench(lex, ' '); /* ch); */
}
}
ch = ' '; /* cause TRUE in the isspace check */
if (ch == quote)
return TOKEN_STRINGCONST;
- if (!lex->flags.preprocessing && ch == '\\') {
+ if (lex->flags.preprocessing && ch == '\\') {
+ lex_tokench(lex, ch);
+ ch = lex_getch(lex);
+ if (ch == EOF) {
+ lexerror(lex, "unexpected end of file");
+ lex_ungetch(lex, EOF); /* next token to be TOKEN_EOF */
+ return (lex->tok.ttype = TOKEN_ERROR);
+ }
+ lex_tokench(lex, ch);
+ }
+ else if (ch == '\\') {
ch = lex_getch(lex);
if (ch == EOF) {
lexerror(lex, "unexpected end of file");
switch (ch) {
case '\\': break;
+ case '\'': break;
+ case '"': break;
case 'a': ch = '\a'; break;
case 'b': ch = '\b'; break;
case 'r': ch = '\r'; break;
return TOKEN_FATAL;
#endif
- ch = lex_skipwhite(lex);
+ while (true) {
+ ch = lex_skipwhite(lex);
+ if (!lex->flags.mergelines || ch != '\\')
+ break;
+ ch = lex_getch(lex);
+ if (ch != '\n') {
+ lex_ungetch(lex, ch);
+ ch = '\\';
+ break;
+ }
+ /* we reached a linemerge */
+ lex_tokench(lex, '\n');
+ continue;
+ }
+
lex->sline = lex->line;
lex->tok.ctx.line = lex->sline;
lex->tok.ctx.file = lex->name;
return (lex->tok.ttype = TOKEN_OPERATOR);
case ')':
case ';':
+ case ':':
case '{':
case '}':
case ']':