From 111bee6ecdb260e4cf7b4d9d8c2a9538aca97a78 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 19 Mar 2026 20:31:01 +0000 Subject: [PATCH] Fix `scope->elements` iteration causing a few bugs in the doc-format --- src/check_stmt.cpp | 16 +++++++++++----- src/docs_writer.cpp | 10 ++++++---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 5775c3e53..5d740c6d2 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -788,11 +788,17 @@ gb_internal bool check_using_stmt_entity(CheckerContext *ctx, AstUsingStmt *us, rw_mutex_lock(&scope->mutex); defer (rw_mutex_unlock(&scope->mutex)); - for (auto const &entry : scope->elements) { - Entity *decl = entry.value; - if (!is_entity_exported(decl, true)) continue; - u32 hash = entry.hash; - auto interned = scope->elements.keys[hash & (scope->elements.cap-1)]; + for (u32 i = 0; i < scope->elements.cap; i++) { + if (!scope->elements.slots[i].hash) { + continue; + } + + Entity *decl = scope->elements.slots[i].value; + if (!is_entity_exported(decl, true)) { + continue; + } + u32 hash = scope->elements.slots[i].hash; + auto interned = scope->elements.keys[i]; Entity *found = scope_insert_with_name(ctx->scope, interned, hash, decl); if (found != nullptr) { diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp index ddd8144ca..a9f3a3e15 100644 --- a/src/docs_writer.cpp +++ b/src/docs_writer.cpp @@ -1042,10 +1042,12 @@ gb_internal OdinDocArray odin_doc_add_pkg_entries(OdinDocWrit auto entries = array_make(heap_allocator(), 0, w->entity_cache.count); defer (array_free(&entries)); - for (auto const &element : pkg->scope->elements) { - u32 hash = element.hash; - auto interned = pkg->scope->elements.keys[hash & (pkg->scope->elements.cap-1)]; - Entity *e = element.value; + for (isize i = 0; i < pkg->scope->elements.cap; i++) { + if (!pkg->scope->elements.slots[i].hash) { + continue; + } + auto interned = pkg->scope->elements.keys[i]; + Entity *e = pkg->scope->elements.slots[i].value; switch (e->kind) { case Entity_Invalid: case Entity_Nil: