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;
|
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)
|
struct mie_block *mie_builder_get_current_block(struct mie_builder *builder)
|
||||||
{
|
{
|
||||||
b_queue_entry *entry = b_queue_last(&builder->b_scope_stack);
|
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(
|
enum mie_status mie_builder_put_name(
|
||||||
struct mie_builder *builder, struct mie_name *name, const char *hint)
|
struct mie_builder *builder, struct mie_name *name, const char *hint)
|
||||||
{
|
{
|
||||||
struct mie_block *block = mie_builder_get_current_block(builder);
|
struct mie_name_map *map = get_current_name_map(builder);
|
||||||
struct mie_region *scope = block->b_parent;
|
if (!map) {
|
||||||
return mie_name_map_put(scope->r_names, name, hint, 0)
|
return MIE_ERR_BAD_STATE;
|
||||||
? MIE_SUCCESS
|
}
|
||||||
: MIE_ERR_NAME_EXISTS;
|
|
||||||
|
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