diff options
| author | gingerBill <bill@gingerbill.org> | 2021-09-28 15:01:11 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-09-28 15:01:11 +0100 |
| commit | d452758afc2a503bc5bc04da04cfdd4af90da1ac (patch) | |
| tree | 15044c491080813957c99d7cce32ab148a7c00fa /core/encoding/json/parser.odin | |
| parent | c9330548726965ffe64f97c37b43bc96a30f4dc7 (diff) | |
Improve MJSON handling
Diffstat (limited to 'core/encoding/json/parser.odin')
| -rw-r--r-- | core/encoding/json/parser.odin | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/core/encoding/json/parser.odin b/core/encoding/json/parser.odin index 0bb4c03a5..af32e7266 100644 --- a/core/encoding/json/parser.odin +++ b/core/encoding/json/parser.odin @@ -109,63 +109,61 @@ parse_value :: proc(p: ^Parser) -> (value: Value, err: Error) { token := p.curr_token #partial switch token.kind { case .Null: - value = Null{} advance_token(p) + value = Null{} return case .False: - value = Boolean(false) advance_token(p) + value = Boolean(false) return case .True: - value = Boolean(true) advance_token(p) + value = Boolean(true) return case .Integer: + advance_token(p) i, _ := strconv.parse_i64(token.text) value = Integer(i) - advance_token(p) return case .Float: + advance_token(p) f, _ := strconv.parse_f64(token.text) value = Float(f) - advance_token(p) return + + case .Ident: + if p.spec == .MJSON { + advance_token(p) + return string(token.text), nil + } + case .String: - value = unquote_string(token, p.spec, p.allocator) or_return advance_token(p) - return + return unquote_string(token, p.spec, p.allocator) case .Open_Brace: return parse_object(p) case .Open_Bracket: return parse_array(p) - - case .Ident: - if p.spec == .MJSON { - advance_token(p) - return string(token.text), nil - } case: if p.spec != .JSON { - #partial switch token.kind { - case .Infinity: + switch { + case allow_token(p, .Infinity): inf: u64 = 0x7ff0000000000000 if token.text[0] == '-' { inf = 0xfff0000000000000 } value = transmute(f64)inf - advance_token(p) return - case .NaN: + case allow_token(p, .NaN): nan: u64 = 0x7ff7ffffffffffff if token.text[0] == '-' { nan = 0xfff7ffffffffffff } value = transmute(f64)nan - advance_token(p) return } } |