authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2026-07-14 15:00:39-07:00
committergravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2026-07-14 15:04:40-07:00
log569381f60b86293c60089780006d4ff69f527e70
treecf0d645ec36ec909ae7d44b4f372cb9efa06a6d7
parenta52363468abaf07441dcc3002e69090a9d470ffd

parseNumberLiteral: Make "invalid base for float literal" errors point to the base


2 files changed, 6 insertions(+), 1 deletions(-)

lib/std/zig/number_literal.zig+2-1
......@@ -123,7 +123,7 @@ pub fn parseNumberLiteral(bytes: []const u8) Result {
123123 '.' => {
124124 if (exponent) return .{ .failure = .{ .period_after_exponent = i } };
125125 float = true;
126 if (base != 10 and base != 16) return .{ .failure = .{ .invalid_float_base = 2 } };
126 if (base != 10 and base != 16) return .{ .failure = .{ .invalid_float_base = 1 } };
127127 if (period) return .{ .failure = .duplicate_period };
128128 period = true;
129129 if (underscore) return .{ .failure = .{ .special_after_underscore = i } };
......@@ -177,6 +177,7 @@ test parseNumberLiteral {
177177 try std.testing.expectEqual(Result{ .failure = .{ .period_after_exponent = 3 } }, parseNumberLiteral("3E2.5"));
178178 try std.testing.expectEqual(Result{ .failure = .{ .period_after_exponent = 2 } }, parseNumberLiteral("3E.5"));
179179 try std.testing.expectEqual(Result{ .failure = .{ .period_after_exponent = 3 } }, parseNumberLiteral("3E1."));
180 try std.testing.expectEqual(Result{ .failure = .{ .invalid_float_base = 1 } }, parseNumberLiteral("0o3.1"));
180181 try std.testing.expectEqual(Result{ .failure = .{ .invalid_digit = .{ .i = 3, .base = .octal } } }, parseNumberLiteral("0o3e1"));
181182}
182183
test/cases/compile_errors/invalid_number_literals.zig+4
......@@ -19,6 +19,9 @@ comptime {
1919comptime {
2020 _ = 0xP0;
2121}
22comptime {
23 _ = 0o1.0;
24}
2225
2326// error
2427//
......@@ -29,3 +32,4 @@ comptime {
2932// :14:13: error: unexpected period after exponent
3033// :17:9: error: expected a digit after base prefix
3134// :20:9: error: expected a digit after base prefix
35// :23:10: error: invalid base for float literal