Fix doc writer bug caused by using an iterator rather than a for loop

This commit is contained in:
gingerBill
2024-08-14 13:02:23 +01:00
parent c98c95fcf0
commit 324d9c2284
+14 -2
View File
@@ -829,7 +829,6 @@ gb_internal OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e)
OdinDocEntityIndex doc_entity_index = odin_doc_write_item(w, &w->entities, &doc_entity, &dst); OdinDocEntityIndex doc_entity_index = odin_doc_write_item(w, &w->entities, &doc_entity, &dst);
map_set(&w->entity_cache, e, doc_entity_index); map_set(&w->entity_cache, e, doc_entity_index);
Ast *type_expr = nullptr; Ast *type_expr = nullptr;
Ast *init_expr = nullptr; Ast *init_expr = nullptr;
Ast *decl_node = nullptr; Ast *decl_node = nullptr;
@@ -997,7 +996,8 @@ gb_internal void odin_doc_update_entities(OdinDocWriter *w) {
} }
} }
for (auto const &entry : w->entity_cache) { for (u32 i = 0; i < w->entity_cache.count; i++) {
auto entry = w->entity_cache.entries[i];
Entity *e = entry.key; Entity *e = entry.key;
OdinDocEntityIndex entity_index = entry.value; OdinDocEntityIndex entity_index = entry.value;
OdinDocTypeIndex type_index = odin_doc_type(w, e->type); OdinDocTypeIndex type_index = odin_doc_type(w, e->type);
@@ -1007,6 +1007,9 @@ gb_internal void odin_doc_update_entities(OdinDocWriter *w) {
switch (e->kind) { switch (e->kind) {
case Entity_Variable: case Entity_Variable:
if (w->state == OdinDocWriterState_Writing) {
GB_ASSERT(type_index != 0);
}
foreign_library = odin_doc_add_entity(w, e->Variable.foreign_library); foreign_library = odin_doc_add_entity(w, e->Variable.foreign_library);
break; break;
case Entity_Procedure: case Entity_Procedure:
@@ -1026,8 +1029,17 @@ gb_internal void odin_doc_update_entities(OdinDocWriter *w) {
break; break;
} }
if (w->state == OdinDocWriterState_Preparing) {
GB_ASSERT(entity_index == 0);
} else {
GB_ASSERT(entity_index != 0);
}
OdinDocEntity *dst = odin_doc_get_item(w, &w->entities, entity_index); OdinDocEntity *dst = odin_doc_get_item(w, &w->entities, entity_index);
if (dst) { if (dst) {
if (dst->kind == OdinDocEntity_Variable) {
GB_ASSERT(type_index != 0);
}
dst->type = type_index; dst->type = type_index;
dst->foreign_library = foreign_library; dst->foreign_library = foreign_library;
dst->grouped_entities = grouped_entities; dst->grouped_entities = grouped_entities;