summaryrefslogtreecommitdiffstats
path: root/lib/Text/Handlebars/Compiler.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Text/Handlebars/Compiler.pm')
-rw-r--r--lib/Text/Handlebars/Compiler.pm31
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;