Permit parsing of incomplete infinity but do not return true

To clarify, `parse_f64` will indeed take `infi` to mean `+Inf` and
return that as the value, but it will not return `ok = true`. It treats
it as `inf` followed by any other trailing character.

`parse_f64_prefix` is the lenient one which will return true so long as
it finds some meaningful value.
This commit is contained in:
Feoramund
2024-06-04 18:50:08 -04:00
parent 1fc6ff91b2
commit 25feff3eb4
2 changed files with 26 additions and 29 deletions
+8 -2
View File
@@ -879,9 +879,15 @@ parse_f64_prefix :: proc(str: string) -> (value: f64, nr: int, ok: bool) {
fallthrough
case 'i', 'I':
m := common_prefix_len_ignore_case(s, "infinity")
if m == 3 || m == 8 { // "inf" or "infinity"
if 3 <= m && m < 9 { // "inf" to "infinity"
f = 0h7ff00000_00000000 if sign == 1 else 0hfff00000_00000000
n = nsign + m
if m == 8 {
// We only count the entire prefix if it is precisely "infinity".
n = nsign + m
} else {
// The string was either only "inf" or incomplete.
n = nsign + 3
}
ok = true
return
}