diff --git a/mie/include/mie/ir/walk.h b/mie/include/mie/ir/walk.h index 8673628..0df3c04 100644 --- a/mie/include/mie/ir/walk.h +++ b/mie/include/mie/ir/walk.h @@ -19,9 +19,11 @@ enum mie_walker_flags { MIE_WALKER_F_FORWARD = 0x00u, MIE_WALKER_F_BACKWARD = 0x02u, - MIE_WALKER_F_INCLUDE_OPS = 0x04u, - MIE_WALKER_F_INCLUDE_REGIONS = 0x08u, - MIE_WALKER_F_INCLUDE_BLOCKS = 0x10u, + MIE_WALKER_F_RECURSIVE = 0x04u, + + MIE_WALKER_F_INCLUDE_OPS = 0x08u, + MIE_WALKER_F_INCLUDE_REGIONS = 0x10u, + MIE_WALKER_F_INCLUDE_BLOCKS = 0x20u, }; struct mie_walker_item { diff --git a/mie/ir/walk.c b/mie/ir/walk.c index a3cd779..637479a 100644 --- a/mie/ir/walk.c +++ b/mie/ir/walk.c @@ -293,7 +293,9 @@ static enum mie_status step(struct mie_walker *walker) return MIE_ERR_NO_DATA; } - schedule_children(walker, cur); + if (walker->w_flags & MIE_WALKER_F_RECURSIVE || cur->i_depth == 0) { + schedule_children(walker, cur); + } b_queue_delete(&walker->w_sched, &cur->i_entry); free(cur);