oplist#

Return every op reachable from this one in execution order.

Synopsis#

my @ops = B::main_root->oplist;

Follows op_next and also descends the side chains it does not thread through - a LOGOP’s other, a LOOP’s redoop/nextop/lastop, a substitution’s replacement, and a sort block’s comparator.

This clears op_opt on every op it visits, which is how it avoids walking a shared branch twice. Run it after the peephole optimiser, and expect B::OP::opt to read 0 afterwards.