From ac96248d7e5e2d640cff2c427a7dfa0c2030710e Mon Sep 17 00:00:00 2001 From: Max Wash Date: Fri, 23 Jan 2026 23:19:23 +0000 Subject: [PATCH] mie: ir: builder: support adding names to non-isolated op regions --- mie/ir/builder.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/mie/ir/builder.c b/mie/ir/builder.c index 9d911bb..42ed8c1 100644 --- a/mie/ir/builder.c +++ b/mie/ir/builder.c @@ -41,6 +41,23 @@ struct mie_ctx *mie_builder_get_ctx(struct mie_builder *builder) return builder->b_ctx; } +static struct mie_name_map *get_current_name_map(struct mie_builder *builder) +{ + b_queue_entry *cur = b_queue_last(&builder->b_scope_stack); + while (cur) { + struct builder_scope *scope + = b_unbox(struct builder_scope, cur, s_entry); + + if (scope->s_region && scope->s_region->r_names) { + return scope->s_region->r_names; + } + + cur = b_queue_prev(cur); + } + + return NULL; +} + struct mie_block *mie_builder_get_current_block(struct mie_builder *builder) { b_queue_entry *entry = b_queue_last(&builder->b_scope_stack); @@ -163,9 +180,12 @@ struct mie_op *mie_builder_put_op( enum mie_status mie_builder_put_name( struct mie_builder *builder, struct mie_name *name, const char *hint) { - struct mie_block *block = mie_builder_get_current_block(builder); - struct mie_region *scope = block->b_parent; - return mie_name_map_put(scope->r_names, name, hint, 0) - ? MIE_SUCCESS - : MIE_ERR_NAME_EXISTS; + struct mie_name_map *map = get_current_name_map(builder); + if (!map) { + return MIE_ERR_BAD_STATE; + } + + struct mie_name *result = mie_name_map_put(map, name, hint, 0); + + return result ? MIE_SUCCESS : MIE_ERR_NAME_EXISTS; }