mie: ir: builder: support adding names to non-isolated op regions
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user