diff options
Diffstat (limited to 'src/cmd/gc/lex.c')
-rw-r--r-- | src/cmd/gc/lex.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 5aa12c328..2642bc88e 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -550,7 +550,7 @@ tnum: } *cp++ = c; c = getc(); - if(c == 'x' || c == 'X') + if(c == 'x' || c == 'X') { for(;;) { *cp++ = c; c = getc(); @@ -564,16 +564,24 @@ tnum: yyerror("malformed hex constant"); goto ncu; } - if(c < '0' || c > '7') - goto dc; + } + + c1 = 0; for(;;) { - if(c >= '0' && c <= '7') { - *cp++ = c; - c = getc(); - continue; - } - goto ncu; + if(!isdigit(c)) + break; + if(c < '0' || c > '7') + c1 = 1; // not octal + *cp++ = c; + c = getc(); } + if(c == '.') + goto casedot; + if(c == 'e' || c == 'E') + goto casee; + if(c1) + yyerror("malformed octal constant"); + goto ncu; dc: if(c == '.') |