From: Richard Kenner Date: Fri, 29 Dec 1995 23:23:53 +0000 (-0500) Subject: (yylex, parse_c_expression, main): Likewise. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4627dc07056968b73deac81b78931c6bc612746f;p=gcc.git (yylex, parse_c_expression, main): Likewise. From-SVN: r10904 --- diff --git a/gcc/cexp.y b/gcc/cexp.y index bdc61c8d1d9..4b31a064e94 100644 --- a/gcc/cexp.y +++ b/gcc/cexp.y @@ -525,13 +525,12 @@ yylex () } switch (c) { - case 0: + case '\n': return 0; case ' ': case '\t': case '\r': - case '\n': lexptr++; goto retry; @@ -927,6 +926,8 @@ right_shift (a, b) /* Parse STRING as an expression, and complain if this fails to use up all of the contents of STRING. */ +/* STRING may contain '\0' bytes; it is terminated by the first '\n' + outside a string constant, so that we can diagnose '\0' properly. */ /* We do not support C comments. They should be removed before this function is called. */ @@ -950,7 +951,7 @@ parse_c_expression (string) if (yyparse ()) return 0; /* actually this is never reached the way things stand. */ - if (*lexptr) + if (*lexptr != '\n') error ("Junk after end of expression."); return expression_value; /* set by yyparse () */ @@ -974,11 +975,10 @@ main () for (;;) { printf ("enter expression: "); n = 0; - while ((buf[n] = getchar ()) != '\n' && buf[n] != EOF) + while ((buf[n] = c = getchar ()) != '\n' && c != EOF) n++; - if (buf[n] == EOF) + if (c == EOF) break; - buf[n] = '\0'; printf ("parser returned %ld\n", parse_c_expression (buf)); }