mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-13 01:21:38 -07:00
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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user