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" {...@@ -1753,14 +1753,6 @@ test "parseInt" {
1753 try std.testing.expect((try parseInt(u8, "255", 10)) == 255);1753 try std.testing.expect((try parseInt(u8, "255", 10)) == 255);
1754 try std.testing.expectError(error.Overflow, parseInt(u8, "256", 10));1754 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
1764 // +0 and -0 should work for unsigned1756 // +0 and -0 should work for unsigned
1765 try std.testing.expect((try parseInt(u8, "-0", 10)) == 0);1757 try std.testing.expect((try parseInt(u8, "-0", 10)) == 0);
1766 try std.testing.expect((try parseInt(u8, "+0", 10)) == 0);1758 try std.testing.expect((try parseInt(u8, "+0", 10)) == 0);
...@@ -1812,25 +1804,28 @@ fn parseWithSign(...@@ -1812,25 +1804,28 @@ fn parseWithSign(
18121804
1813 var buf_base = base;1805 var buf_base = base;
1814 var buf_start = buf;1806 var buf_start = buf;
18151807 if (base == 0) {
1816 if (buf.len > 2 and buf[0] == '0') {1808 // Treat is as a decimal number by default.
1817 switch (std.ascii.toLower(buf[1])) {1809 buf_base = 10;
1818 'b' => {1810 // Detect the base by looking at buf prefix.
1819 if (base == 0) buf_base = 2;1811 if (buf.len > 2 and buf[0] == '0') {
1820 buf_start = buf[2..];1812 switch (std.ascii.toLower(buf[1])) {
1821 },1813 'b' => {
1822 'o' => {1814 buf_base = 2;
1823 if (base == 0) buf_base = 8;1815 buf_start = buf[2..];
1824 buf_start = buf[2..];1816 },
1825 },1817 'o' => {
1826 'x' => {1818 buf_base = 8;
1827 if (base == 0) buf_base = 16;1819 buf_start = buf[2..];
1828 buf_start = buf[2..];1820 },
1829 },1821 'x' => {
1830 else => {},1822 buf_base = 16;
1823 buf_start = buf[2..];
1824 },
1825 else => {},
1826 }
1831 }1827 }
1832 }1828 }
1833 if (buf_base == 0) buf_base = 10;
18341829
1835 const add = switch (sign) {1830 const add = switch (sign) {
1836 .pos => math.add,1831 .pos => math.add,