Browse Source

Correct json/unmarshal.odin

gingerBill 2 years ago
parent
commit
04a1e7d638
2 changed files with 7 additions and 1 deletions
  1. 1 1
      core/encoding/json/unmarshal.odin
  2. 6 0
      core/runtime/dynamic_map_internal.odin

+ 1 - 1
core/encoding/json/unmarshal.odin

@@ -427,7 +427,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm
 				key_ptr = &key_cstr
 			}
 			
-			set_ptr := runtime.__dynamic_map_set(raw_map, t.map_info, key_ptr, map_backing_value.data)
+			set_ptr := runtime.__dynamic_map_set_without_hash(raw_map, t.map_info, key_ptr, map_backing_value.data)
 			if set_ptr == nil {
 				delete(key, p.allocator)
 			} 

+ 6 - 0
core/runtime/dynamic_map_internal.odin

@@ -688,6 +688,7 @@ __dynamic_map_get :: proc "contextless" (#no_alias m: ^Raw_Map, #no_alias info:
 	}
 }
 
+// IMPORTANT: USED WITHIN THE COMPILER
 __dynamic_map_check_grow :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, loc := #caller_location) -> Allocator_Error {
 	if m.len + 1 >= map_resize_threshold(m^) {
 		return map_grow_dynamic(m, info, loc)
@@ -695,6 +696,11 @@ __dynamic_map_check_grow :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info:
 	return nil
 }
 
+__dynamic_map_set_without_hash :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, key, value: rawptr, loc := #caller_location) -> rawptr {
+	return __dynamic_map_set(m, info, info.key_hasher(key, 0), key, value, loc)
+}
+
+
 // IMPORTANT: USED WITHIN THE COMPILER
 __dynamic_map_set :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, hash: Map_Hash, key, value: rawptr, loc := #caller_location) -> rawptr {
 	if found := __dynamic_map_get(m, info, hash, key); found != nil {