diff options
Diffstat (limited to 'lib/Text/Handlebars/Compiler.pm')
-rw-r--r-- | lib/Text/Handlebars/Compiler.pm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/Text/Handlebars/Compiler.pm b/lib/Text/Handlebars/Compiler.pm index 8c89b06..a358d2e 100644 --- a/lib/Text/Handlebars/Compiler.pm +++ b/lib/Text/Handlebars/Compiler.pm @@ -79,6 +79,37 @@ sub _generate_include { return $self->SUPER::_generate_include($node); } +sub _generate_call { + my $self = shift; + my ($node) = @_; + + if ($node->is_helper) { + my @args; + my @hash; + for my $arg (@{ $node->second }) { + if ($arg->arity eq 'pair') { + push @hash, $arg->first, $arg->second; + } + else { + push @args, $arg; + } + } + + my $parser = $self->parser; + + my $make_hash = $parser->symbol('(name)')->clone( + arity => 'name', + id => '(make_hash)', + line => $node->line, + ); + + push @{ $node->first->second }, $parser->call($make_hash, @hash); + $node->second(\@args); + } + + return $self->SUPER::_generate_call($node); +} + __PACKAGE__->meta->make_immutable; no Any::Moose; |