diff --git a/core/runtime/dynamic_map_internal.odin b/core/runtime/dynamic_map_internal.odin index d9713dd67..5795ddcb6 100644 --- a/core/runtime/dynamic_map_internal.odin +++ b/core/runtime/dynamic_map_internal.odin @@ -141,8 +141,17 @@ __slice_resize :: proc(array_: ^$T/[]$E, new_count: int, allocator: Allocator, l return true; } +__dynamic_map_fix_keys :: proc(h: Map_Header) { + e := (^Map_Entry_Header)(m.entries.data); + for i in 0.. Map_Find_Resu __dynamic_map_add_entry :: proc(using h: Map_Header, hash: Map_Hash, loc := #caller_location) -> int { prev := m.entries.len; + prev_data := m.entries.data; c := __dynamic_array_append_nothing(&m.entries, entry_size, entry_align, loc); + if m.entries.data != prev_data { + __dynamic_map_fix_keys(h); + } if c != prev { end := __dynamic_map_get_entry(h, c-1); end.hash.hash = hash.hash;