summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@sardina.(none)>2009-06-27 12:44:36 +0200
committerdakkar <dakkar@sardina.(none)>2009-06-27 12:44:36 +0200
commit21f69935cf1cc8611586e863e9008b494c56ea9e (patch)
tree04c018e703c0fbb25aec53eec2767d3837233754
parentbetter perl version requirements (diff)
downloadTree-Template-Declare-21f69935cf1cc8611586e863e9008b494c56ea9e.tar.gz
Tree-Template-Declare-21f69935cf1cc8611586e863e9008b494c56ea9e.tar.bz2
Tree-Template-Declare-21f69935cf1cc8611586e863e9008b494c56ea9e.zip
set global status
-rw-r--r--lib/Tree/Template/Declare.pm36
1 files 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;