authorgravatar for 57862114+momumi@users.noreply.github.commomumi <57862114+momumi@users.noreply.github.com> 2020-03-15 13:05:24+10:00
committergravatar for 57862114+momumi@users.noreply.github.commomumi <57862114+momumi@users.noreply.github.com> 2020-03-15 13:05:24+10:00
log925f71085269a8072ea9c49025a534fa47fbec44
treea42906884ea7db33ba7ff07b26a3666d847feb16
parent7aac21c6f59b70deea6ced617f7b6a550e92bab4

make parsing `0.0_e1` an error


2 files changed, 16 insertions(+), 0 deletions(-)

src/tokenizer.cpp+8
......@@ -1229,6 +1229,10 @@ void tokenize(Buf *buf, Tokenization *out) {
12291229 break;
12301230 }
12311231 if (is_exponent_signifier(c, t.radix)) {
1232 if (t.is_trailing_underscore) {
1233 invalid_char_error(&t, c);
1234 break;
1235 }
12321236 if (t.radix != 16 && t.radix != 10) {
12331237 invalid_char_error(&t, c);
12341238 }
......@@ -1296,6 +1300,10 @@ void tokenize(Buf *buf, Tokenization *out) {
12961300 break;
12971301 }
12981302 if (is_exponent_signifier(c, t.radix)) {
1303 if (t.is_trailing_underscore) {
1304 invalid_char_error(&t, c);
1305 break;
1306 }
12991307 t.state = TokenizeStateFloatExponentUnsigned;
13001308 t.radix = 10; // exponent is always base 10
13011309 break;
test/compile_errors.zig+8
......@@ -485,6 +485,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
485485 "tmp.zig:2:23: error: invalid character: '_'",
486486 });
487487
488 cases.add("invalid underscore placement in float literal - 14",
489 \\fn main() void {
490 \\ var bad: f128 = 0x0.0_p1;
491 \\})
492 , &[_][]const u8{
493 "tmp.zig:2:27: error: invalid character: 'p'",
494 });
495
488496 cases.add("var args without c calling conv",
489497 \\fn foo(args: ...) void {}
490498 \\comptime {