X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FB%2FB%2FBblock.pm;h=fe7fc52139ce9f380b6d3ebe569106782659c3ff;hb=1e1dbab6eed49955498a66ce3beedbd7ea33dc21;hp=ae47cf9e04fba1556d582226fc53142f21cff0be;hpb=1a67a97c0300941ac67bfb1dd421467b8c59e21c;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/B/B/Bblock.pm b/ext/B/B/Bblock.pm index ae47cf9..fe7fc52 100644 --- a/ext/B/B/Bblock.pm +++ b/ext/B/B/Bblock.pm @@ -90,9 +90,9 @@ sub B::LOOP::mark_if_leader { sub B::LOGOP::mark_if_leader { my $op = shift; - my $ppaddr = $op->ppaddr; + my $opname = $op->name; mark_leader($op->next); - if ($ppaddr eq "pp_entertry") { + if ($opname eq "entertry") { mark_leader($op->other->next); } else { mark_leader($op->other); @@ -102,10 +102,10 @@ sub B::LOGOP::mark_if_leader { sub B::LISTOP::mark_if_leader { my $op = shift; my $first=$op->first; - $first=$first->next while ($first->ppaddr eq "pp_null"); + $first=$first->next while ($first->name eq "null"); mark_leader($op->first) unless (exists( $bblock->{$$first})); mark_leader($op->next); - if ($op->ppaddr eq "pp_sort" and $op->flags & OPf_SPECIAL + if ($op->name eq "sort" and $op->flags & OPf_SPECIAL and $op->flags & OPf_STACKED){ my $root=$op->first->sibling->first; my $leader=$root->first; @@ -115,7 +115,7 @@ sub B::LISTOP::mark_if_leader { sub B::PMOP::mark_if_leader { my $op = shift; - if ($op->ppaddr ne "pp_pushre") { + if ($op->name ne "pushre") { my $replroot = $op->pmreplroot; if ($$replroot) { mark_leader($replroot); @@ -129,6 +129,7 @@ sub B::PMOP::mark_if_leader { sub compile { my @options = @_; + B::clearsym(); if (@options) { return sub { my $objname; @@ -168,7 +169,9 @@ B::Bblock - Walk basic blocks =head1 DESCRIPTION -See F. +This module is used by the B::CC back end. It walks "basic blocks". +A basic block is a series of operations which is known to execute from +start to finish, with no possiblity of branching or halting. =head1 AUTHOR