summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-03 12:36:26 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-03 12:37:36 -0500
commit24614a589336091cd57e417592e8ee53aae18288 (patch)
tree56532002a5d5a141e7b44e15d13968dce1eec92d
parent898af35396b15c98d14951ada99fedc2f087ed9e (diff)
downloadtext-handlebars-24614a589336091cd57e417592e8ee53aae18288.tar.gz
text-handlebars-24614a589336091cd57e417592e8ee53aae18288.zip
handle function calling properly
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm30
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(@_);
}
}