diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-03 12:36:26 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-03 12:37:36 -0500 |
commit | 24614a589336091cd57e417592e8ee53aae18288 (patch) | |
tree | 56532002a5d5a141e7b44e15d13968dce1eec92d | |
parent | 898af35396b15c98d14951ada99fedc2f087ed9e (diff) | |
download | text-handlebars-24614a589336091cd57e417592e8ee53aae18288.tar.gz text-handlebars-24614a589336091cd57e417592e8ee53aae18288.zip |
handle function calling properly
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 30 |
1 files 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(@_); } } |