From 24614a589336091cd57e417592e8ee53aae18288 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 3 Oct 2012 12:36:26 -0500 Subject: handle function calling properly --- lib/Text/Xslate/Syntax/Handlebars.pm | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index e10e52b..6b3d2d7 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -146,8 +146,6 @@ sub init_symbols { my $self = shift; my $name = $self->symbol('(name)'); - $name->set_led($self->can('led_name')); - $name->lbp(1); my $for = $self->symbol('(for)'); $for->arity('for'); @@ -168,27 +166,31 @@ sub init_symbols { $self->prefix('..', 0)->set_nud($self->can('nud_uplevel')); } -sub nud_name { +sub define_function { my $self = shift; - my ($symbol) = @_; + my (@names) = @_; - if ($symbol->is_defined) { - return $self->SUPER::nud_name(@_); - } - else { - return $self->nud_variable(@_); + $self->SUPER::define_function(@_); + for my $name (@names) { + $self->symbol($name)->set_nud($self->can('nud_name')); } + + return; } -sub led_name { +sub nud_name { my $self = shift; - my ($symbol, $left) = @_; + my ($symbol) = @_; - if ($left->arity eq 'name') { - return $self->call($left, $symbol->nud($self)); + if ($symbol->is_defined) { + return $self->call( + $self->SUPER::nud_name($symbol), + # XXX this won't handle multiple arguments + $self->expression($symbol->lbp), + ); } else { - ... + return $self->nud_variable(@_); } } -- cgit v1.2.3-54-g00ecf