authorgravatar for marc@tiehu.isMarc Tiehuis <marc@tiehu.is> 2022-05-03 19:04:16+12:00
committergravatar for marc@tiehu.isMarc Tiehuis <marc@tiehu.is> 2022-05-03 19:04:16+12:00
log02209d8a5f7b26d503ca5c3a73219fa8839243f6
treed8f4036a45f1a1034292aee9364a957a1861763d
parent5fbda2c579f584c770eadc0e236ed0933be739a8

fix aarch64 f16 nan parse test failure


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

lib/std/fmt/parse_float/parse.zig+4-6
...@@ -240,14 +240,15 @@ pub fn parseNumber(comptime T: type, s: []const u8, negative: bool) ?Number(T) {...@@ -240,14 +240,15 @@ pub fn parseNumber(comptime T: type, s: []const u8, negative: bool) ?Number(T) {
240 return null;240 return null;
241}241}
242242
243fn parsePartialInfOrNan(comptime T: type, s: []const u8, n: *usize) ?T {243fn parsePartialInfOrNan(comptime T: type, s: []const u8, negative: bool, n: *usize) ?T {
244 // inf/infinity; infxxx should only consume inf.244 // inf/infinity; infxxx should only consume inf.
245 if (std.ascii.startsWithIgnoreCase(s, "inf")) {245 if (std.ascii.startsWithIgnoreCase(s, "inf")) {
246 n.* = 3;246 n.* = 3;
247 if (std.ascii.startsWithIgnoreCase(s[3..], "inity")) {247 if (std.ascii.startsWithIgnoreCase(s[3..], "inity")) {
248 n.* = 8;248 n.* = 8;
249 }249 }
250 return std.math.inf(T);250
251 return if (!negative) std.math.inf(T) else -std.math.inf(T);
251 }252 }
252253
253 if (std.ascii.startsWithIgnoreCase(s, "nan")) {254 if (std.ascii.startsWithIgnoreCase(s, "nan")) {
...@@ -260,11 +261,8 @@ fn parsePartialInfOrNan(comptime T: type, s: []const u8, n: *usize) ?T {...@@ -260,11 +261,8 @@ fn parsePartialInfOrNan(comptime T: type, s: []const u8, n: *usize) ?T {
260261
261pub fn parseInfOrNan(comptime T: type, s: []const u8, negative: bool) ?T {262pub fn parseInfOrNan(comptime T: type, s: []const u8, negative: bool) ?T {
262 var consumed: usize = 0;263 var consumed: usize = 0;
263 if (parsePartialInfOrNan(T, s, &consumed)) |special| {264 if (parsePartialInfOrNan(T, s, negative, &consumed)) |special| {
264 if (s.len == consumed) {265 if (s.len == consumed) {
265 if (negative) {
266 return -1 * special;
267 }
268 return special;266 return special;
269 }267 }
270 }268 }