~evan/hare-qbe

19a20ba506a155e25b86127d9a13208cace14b65 — Evan Johnston 6 months ago 900bbe0
more infinities and nans
1 files changed, 10 insertions(+), 3 deletions(-)

M qbe/lex.ha
M qbe/lex.ha => qbe/lex.ha +10 -3
@@ 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)?;
};