diff options
Diffstat (limited to 'lib/Tree/Transform')
-rw-r--r-- | lib/Tree/Transform/Transformer.pm | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/Tree/Transform/Transformer.pm b/lib/Tree/Transform/Transformer.pm index a773f29..95448af 100644 --- a/lib/Tree/Transform/Transformer.pm +++ b/lib/Tree/Transform/Transformer.pm @@ -47,7 +47,10 @@ sub apply_rules { @nodes=$self->it->xpath_get_child_nodes(); }; - $self->enter(Tree::Transform::Context->new(node_list=>\@nodes)); + my $guard=Tree::Transform::ContextGuard->new + ($self, + Tree::Transform::Context->new(node_list=>\@nodes) + ); my @ret; for my $node (@nodes) { @@ -59,8 +62,6 @@ sub apply_rules { push @ret,$rule->{action}->($self); } - $self->leave; - return @ret; } @@ -167,5 +168,19 @@ sub rule_matches { return; } -__PACKAGE__->meta->make_immutable;no Moose;1; +__PACKAGE__->meta->make_immutable;no Moose; + +package Tree::Transform::ContextGuard; + +sub new { + my ($class,$trans,$context)=@_; + $trans->enter($context); + return bless {trans=>$trans},$class; +} + +sub DESTROY { + $_[0]->{trans}->leave(); +} + +1; __END__ |