diff options
| author | gingerBill <bill@gingerbill.org> | 2019-01-06 22:25:02 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2019-01-06 22:25:02 +0000 |
| commit | 08598b9425ebaf06805cbf9b2fb09acbc29a3a64 (patch) | |
| tree | 435182aaf09aca0068d8ae54591140064732cc55 /core/encoding/json/parser.odin | |
| parent | 6295f6747fbbeeb849c2334c489d774051d78f6e (diff) | |
Support NaN and Infinity for JSON5
Diffstat (limited to 'core/encoding/json/parser.odin')
| -rw-r--r-- | core/encoding/json/parser.odin | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/core/encoding/json/parser.odin b/core/encoding/json/parser.odin index 2c7d79465..aa041ba5e 100644 --- a/core/encoding/json/parser.odin +++ b/core/encoding/json/parser.odin @@ -93,6 +93,28 @@ parse_value :: proc(p: ^Parser) -> (value: Value, err: Error) { case Kind.Open_Bracket: return parse_array(p); + + case: + if p.spec == Specification.JSON5 { + switch token.kind { + case Kind.Infinity: + inf: u64 = 0x7ff0000000000000; + if token.text[0] == '-' { + inf = 0xfff0000000000000; + } + value.value = transmute(f64)inf; + advance_token(p); + return; + case Kind.NaN: + nan: u64 = 0x7ff7ffffffffffff; + if token.text[0] == '-' { + nan = 0xfff7ffffffffffff; + } + value.value = transmute(f64)nan; + advance_token(p); + return; + } + } } err = Error.Unexpected_Token; |