diff options
Diffstat (limited to 'lib/Tree/Transform/Transformer.pm')
-rw-r--r-- | lib/Tree/Transform/Transformer.pm | 32 |
1 files changed, 10 insertions, 22 deletions
diff --git a/lib/Tree/Transform/Transformer.pm b/lib/Tree/Transform/Transformer.pm index c188b29..a773f29 100644 --- a/lib/Tree/Transform/Transformer.pm +++ b/lib/Tree/Transform/Transformer.pm @@ -84,25 +84,25 @@ sub call_rule { sub find_rule { my ($self,$context)=@_; - my $ret=$self->find_rule_in_package($self->rules_package,$context); - - if (!$ret) { - croak "No valid rule"; + for my $pack (Tree::Transform::Utils::_get_inheritance + ($self->rules_package)) { + my $ret=$self->find_rule_in_package($pack,$context); + return $ret if $ret; } - return $ret; + croak "No valid rule"; } sub find_rule_by_name { my ($self,$name,$context)=@_; - my $ret=$self->find_rule_by_name_in_package($self->rules_package,$name,$context); - - if (!$ret) { - croak "No rule named $name"; + for my $pack (Tree::Transform::Utils::_get_inheritance + ($self->rules_package)) { + my $ret=$self->find_rule_by_name_in_package($pack,$name,$context); + return $ret if $ret; } - return $ret; + croak "No rule named $name"; } sub find_rule_in_package { @@ -125,12 +125,6 @@ sub find_rule_in_package { elsif (@candidates >= 1) { return $candidates[0]; } - - my @inherited=Tree::Transform::Utils::_get_isa($package); - for my $inh_pack (@inherited) { - my $ret=$self->find_rule_in_package($inh_pack,$context); - return $ret if $ret; - } } sub find_rule_by_name_in_package { @@ -145,12 +139,6 @@ sub find_rule_by_name_in_package { if (exists $rules->{$name}) { return $rules->{$name}; } - - my @inherited=Tree::Transform::Utils::_get_isa($package); - for my $inh_pack (@inherited) { - my $ret=$self->find_rule_by_name_in_package($inh_pack,$name,$context); - return $ret if $ret; - } } sub rule_matches { |