@@ 205,7 205,10 @@ fn float(in: *lexer) (f64 | void | error) = {
break;
};
case floatstate::INFINITY, floatstate::NAN =>
- if (!ascii::isalpha(rn)) break;
+ if (!ascii::isalpha(rn)) {
+ unget(in, rn);
+ break;
+ };
};
strio::appendrune(&buf, rn)?;
@@ 213,8 216,12 @@ fn float(in: *lexer) (f64 | void | error) = {
let s = strio::string(&buf);
if (ascii::strcasecmp(s, "nan") == 0) return math::NAN;
- if (ascii::strcasecmp(s, "+infinity") == 0) return math::INF;
- if (ascii::strcasecmp(s, "-infinity") == 0) return -math::INF;
+ if (ascii::strcasecmp(s, "-nan") == 0) return -math::NAN;
+ if (ascii::strcasecmp(s, "+infinity") == 0 ||
+ ascii::strcasecmp(s, "infinity") == 0 ||
+ ascii::strcasecmp(s, "+inf") == 0 ||
+ ascii::strcasecmp(s, "inf") == 0) return math::INF;
+ if (ascii::strcasecmp(s, "-infinity") == 0 || ascii::strcasecmp(s, "-inf") == 0) return -math::INF;
return strconv::stof64(s)?;
};