From 91b0989ef6b76a65e56a59420aa9a85a5bfa5ba5 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Thu, 28 Dec 1995 07:21:45 -0500 Subject: (yylex): Improve error message for bogus numbers. Consolidate duplicated code. From-SVN: r10892 --- gcc/c-lex.c | 49 ++++++++++--------------------------------------- 1 file changed, 10 insertions(+), 39 deletions(-) (limited to 'gcc') diff --git a/gcc/c-lex.c b/gcc/c-lex.c index edb7075..210c365 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -1282,7 +1282,7 @@ yylex () if (floatflag != NOT_FLOAT) { tree type = double_type_node; - int garbage_chars = 0, exceeds_double = 0; + int exceeds_double = 0; int imag = 0; REAL_VALUE_TYPE value; jmp_buf handler; @@ -1418,19 +1418,6 @@ yylex () } } #endif - garbage_chars = 0; - while (isalnum (c) || c == '.' || c == '_' - || (!flag_traditional && (c == '+' || c == '-') - && (p[-1] == 'e' || p[-1] == 'E'))) - { - if (p >= token_buffer + maxtoken - 3) - p = extend_token_buffer (p); - *p++ = c; - c = getc (finput); - garbage_chars++; - } - if (garbage_chars > 0) - error ("garbage at end of number"); /* If the result is not a number, assume it must have been due to some error message above, so silently convert @@ -1444,9 +1431,6 @@ yylex () build_real (type, value)); else yylval.ttype = build_real (type, value); - - ungetc (c, finput); - *p = 0; } else { @@ -1487,32 +1471,13 @@ yylex () spec_imag = 1; } else - { - if (isalnum (c) || c == '.' || c == '_' - || (!flag_traditional && (c == '+' || c == '-') - && (p[-1] == 'e' || p[-1] == 'E'))) - { - error ("garbage at end of number"); - while (isalnum (c) || c == '.' || c == '_' - || (!flag_traditional && (c == '+' || c == '-') - && (p[-1] == 'e' || p[-1] == 'E'))) - { - if (p >= token_buffer + maxtoken - 3) - p = extend_token_buffer (p); - *p++ = c; - c = getc (finput); - } - } - break; - } + break; if (p >= token_buffer + maxtoken - 3) p = extend_token_buffer (p); *p++ = c; c = getc (finput); } - ungetc (c, finput); - /* If the constant is not long long and it won't fit in an unsigned long, or if the constant is long long and won't fit in an unsigned long long, then warn that the constant is out @@ -1648,10 +1613,16 @@ yylex () } else TREE_TYPE (yylval.ttype) = type; - - *p = 0; } + ungetc (c, finput); + *p = 0; + + if (isalnum (c) || c == '.' || c == '_' + || (!flag_traditional && (c == '-' || c == '+') + && (p[-1] == 'e' || p[-1] == 'E'))) + error ("missing white space after number `%s'", token_buffer); + value = CONSTANT; break; } -- cgit v1.1