authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-24 13:03:51-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-24 13:03:51-07:00
log7ad10422793e56dcd50a4254beb8fc9d6c7f5eae
treeac4020783571d4d9d94eb1a53df1b9984d566b52
parentfa6cea22bf9cd5ff6a9dd882166cf7e479acfd6c

Revert "fix parseInt failing when a correct base is given"

This reverts commit fa6cea22bf9cd5ff6a9dd882166cf7e479acfd6c. Apologies for the merge. I thought this was a bug fix, but I see that it is implementing a proposal that I intended to reject.

1 files changed, 20 insertions(+), 25 deletions(-)

lib/std/fmt.zig+20-25
......@@ -1753,14 +1753,6 @@ test "parseInt" {
17531753 try std.testing.expect((try parseInt(u8, "255", 10)) == 255);
17541754 try std.testing.expectError(error.Overflow, parseInt(u8, "256", 10));
17551755
1756 // Test different bases
1757 try std.testing.expect((try parseInt(i32, "0b10", 2)) == 0b10);
1758 try std.testing.expect((try parseInt(i32, "0o10", 8)) == 0o10);
1759 try std.testing.expect((try parseInt(i32, "0x10", 16)) == 0x10);
1760 try std.testing.expect((try parseInt(i32, "10", 2)) == 0b10);
1761 try std.testing.expect((try parseInt(i32, "10", 8)) == 0o10);
1762 try std.testing.expect((try parseInt(i32, "10", 16)) == 0x10);
1763
17641756 // +0 and -0 should work for unsigned
17651757 try std.testing.expect((try parseInt(u8, "-0", 10)) == 0);
17661758 try std.testing.expect((try parseInt(u8, "+0", 10)) == 0);
......@@ -1812,25 +1804,28 @@ fn parseWithSign(
18121804
18131805 var buf_base = base;
18141806 var buf_start = buf;
1815
1816 if (buf.len > 2 and buf[0] == '0') {
1817 switch (std.ascii.toLower(buf[1])) {
1818 'b' => {
1819 if (base == 0) buf_base = 2;
1820 buf_start = buf[2..];
1821 },
1822 'o' => {
1823 if (base == 0) buf_base = 8;
1824 buf_start = buf[2..];
1825 },
1826 'x' => {
1827 if (base == 0) buf_base = 16;
1828 buf_start = buf[2..];
1829 },
1830 else => {},
1807 if (base == 0) {
1808 // Treat is as a decimal number by default.
1809 buf_base = 10;
1810 // Detect the base by looking at buf prefix.
1811 if (buf.len > 2 and buf[0] == '0') {
1812 switch (std.ascii.toLower(buf[1])) {
1813 'b' => {
1814 buf_base = 2;
1815 buf_start = buf[2..];
1816 },
1817 'o' => {
1818 buf_base = 8;
1819 buf_start = buf[2..];
1820 },
1821 'x' => {
1822 buf_base = 16;
1823 buf_start = buf[2..];
1824 },
1825 else => {},
1826 }
18311827 }
18321828 }
1833 if (buf_base == 0) buf_base = 10;
18341829
18351830 const add = switch (sign) {
18361831 .pos => math.add,