summaryrefslogtreecommitdiff
path: root/src/cmd/gc/lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/gc/lex.c')
-rw-r--r--src/cmd/gc/lex.c26
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 == '.')