From 21f69935cf1cc8611586e863e9008b494c56ea9e Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 27 Jun 2009 12:44:36 +0200 Subject: set global status --- lib/Tree/Template/Declare.pm | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/Tree/Template/Declare.pm b/lib/Tree/Template/Declare.pm index c56080f..fff3ccd 100644 --- a/lib/Tree/Template/Declare.pm +++ b/lib/Tree/Template/Declare.pm @@ -26,6 +26,8 @@ sub import { } } +our @nodes_stack; + sub _build_group { my ($class,$name,$args,$coll)=@_; @@ -47,50 +49,50 @@ sub _build_group { } } - my @current_node=(undef); - my $normal_exports= { tree => sub(&) { my $tree=$builder->new_tree(); - { - local $current_node[0]=$tree; - $_[0]->(caller_args(1)); - } + + unshift @nodes_stack,$tree; + $_[0]->(caller_args(1)); + shift @nodes_stack; + return $builder->finalize_tree($tree); }, node => sub (&) { my $node=$builder->new_node(); - { - local $current_node[0]=$node; - $_[0]->(caller_args(1)); - } + + unshift @nodes_stack, $node; + $_[0]->(caller_args(1)); + shift @nodes_stack; + my $scalar_context=defined wantarray && !wantarray; - if ($current_node[0] && !$scalar_context) { - $builder->add_child_node($current_node[0],$node); + if (@nodes_stack && !$scalar_context) { + $builder->add_child_node($nodes_stack[0],$node); } return $node; }, attach_nodes => sub { - if ($current_node[0]) { + if (@nodes_stack) { for my $newnode (@_) { - $builder->add_child_node($current_node[0], + $builder->add_child_node($nodes_stack[0], $newnode); } } }, name => sub ($) { - $builder->set_node_name($current_node[0],$_[0]); + $builder->set_node_name($nodes_stack[0],$_[0]); return; }, attribs => sub { my %attrs=@_; - $builder->set_node_attributes($current_node[0],\%attrs); + $builder->set_node_attributes($nodes_stack[0],\%attrs); return; }, detached => sub($) { return scalar $_[0] }, }; if ($builder->can('_munge_exports')) { - return $builder->_munge_exports($normal_exports,\@current_node); + return $builder->_munge_exports($normal_exports,\@nodes_stack); } else { return $normal_exports; -- cgit v1.2.3