From 55a1ba710b637a676f6c6f9bb5e78e9453b959b5 Mon Sep 17 00:00:00 2001 From: Rickard Andersson Date: Mon, 2 Oct 2023 11:59:37 +0300 Subject: [PATCH] fix: use `runtime.map_insert` to not overallocate --- core/encoding/json/parser.odin | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/core/encoding/json/parser.odin b/core/encoding/json/parser.odin index a57f6bebd..1ccb948bb 100644 --- a/core/encoding/json/parser.odin +++ b/core/encoding/json/parser.odin @@ -3,6 +3,7 @@ package json import "core:mem" import "core:unicode/utf8" import "core:unicode/utf16" +import "core:runtime" import "core:strconv" Parser :: struct { @@ -263,13 +264,10 @@ parse_object_body :: proc(p: ^Parser, end_token: Token_Kind) -> (obj: Object, er return } - if len(obj) == cap(obj) { - reserve_error := reserve(&obj, max(1, cap(obj) * 2)) - if reserve_error != nil { - return nil, .Out_Of_Memory - } + insert_success := runtime.map_insert(&obj, key, elem) + if insert_success == nil { + return nil, .Out_Of_Memory } - obj[key] = elem if parse_comma(p) { break