From 4815007ac198900896c0021e33bbfb19bd5695dd Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 22 Apr 2026 09:09:41 -0700 Subject: [PATCH] use fully qualified type names in unpacked eval types - fixes namespaced type views --- src/eval/eval_types.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/eval/eval_types.c b/src/eval/eval_types.c index 7a395e3b..ad6a1935 100644 --- a/src/eval/eval_types.c +++ b/src/eval/eval_types.c @@ -714,7 +714,7 @@ e_push_type_from_key(Arena *arena, E_TypeKey key) type = push_array(arena, E_Type, 1); type->kind = e_type_kind_from_key(node->key); type->flags = node->params.flags; - type->name = push_str8_copy(arena, node->params.name); + type->name = str8_copy(arena, node->params.name); type->direct_type_key = node->params.direct_key; type->count = node->params.count; type->depth = node->params.depth; @@ -775,9 +775,10 @@ e_push_type_from_key(Arena *arena, E_TypeKey key) //- rjf: record types => unpack name * members & produce if(RDI_TypeKind_FirstRecord <= rdi_type->kind && rdi_type->kind <= RDI_TypeKind_LastRecord) { + Temp scratch = scratch_begin(&arena, 1); + // rjf: unpack name - String8 name = {0}; - name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); + String8 name = fully_qualified_str8_from_rdi_type(scratch.arena, rdi, rdi_type); // rjf: unpack UDT info RDI_UDT *udt = rdi_element_from_name_idx(rdi, UDTs, rdi_type->user_defined.udt_idx); @@ -810,19 +811,22 @@ e_push_type_from_key(Arena *arena, E_TypeKey key) // rjf: produce type = push_array(arena, E_Type, 1); type->kind = kind; - type->name = push_str8_copy(arena, name); + type->name = str8_copy(arena, name); type->byte_size = (U64)rdi_type->byte_size; type->count = members_count; type->arch = arch; type->members = members; + + scratch_end(scratch); } //- rjf: enum types => unpack name * values & produce else if(rdi_type->kind == RDI_TypeKind_Enum) { + Temp scratch = scratch_begin(&arena, 1); + // rjf: unpack name - String8 name = {0}; - name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); + String8 name = fully_qualified_str8_from_rdi_type(scratch.arena, rdi, rdi_type); // rjf: unpack direct type E_TypeKey direct_type_key = zero_struct; @@ -861,6 +865,8 @@ e_push_type_from_key(Arena *arena, E_TypeKey key) type->arch = arch; type->enum_vals = enum_vals; type->direct_type_key = direct_type_key; + + scratch_end(scratch); } //- rjf: constructed types @@ -1019,9 +1025,10 @@ e_push_type_from_key(Arena *arena, E_TypeKey key) //- rjf: alias types else if(rdi_type->kind == RDI_TypeKind_Alias) { + Temp scratch = scratch_begin(&arena, 1); + // rjf: unpack name - String8 name = {0}; - name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); + String8 name = fully_qualified_str8_from_rdi_type(scratch.arena, rdi, rdi_type); // rjf: unpack direct type E_TypeKey direct_type_key = zero_struct; @@ -1041,6 +1048,8 @@ e_push_type_from_key(Arena *arena, E_TypeKey key) type->byte_size = direct_type_byte_size; type->direct_type_key = direct_type_key; type->arch = arch; + + scratch_end(scratch); } //- rjf: bitfields @@ -1070,17 +1079,19 @@ e_push_type_from_key(Arena *arena, E_TypeKey key) //- rjf: incomplete types else if(RDI_TypeKind_FirstIncomplete <= rdi_type->kind && rdi_type->kind <= RDI_TypeKind_LastIncomplete) { + Temp scratch = scratch_begin(&arena, 1); + // rjf: unpack name - String8 name = {0}; - name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); + String8 name = fully_qualified_str8_from_rdi_type(scratch.arena, rdi, rdi_type); // rjf: produce type = push_array(arena, E_Type, 1); type->kind = kind; type->name = push_str8_copy(arena, name); type->arch = arch; + + scratch_end(scratch); } - } } }break;