summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-04 13:57:25 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-04 13:57:25 -0500
commitf6811898ebcb3a4a5853056d6bb1f5920776fbf2 (patch)
tree9f8bd9cc30f3b5239b8570a288044725a16f3302
parent0bffdc354a8eff4361b93816d29395ae2cc5b0da (diff)
downloadtext-handlebars-f6811898ebcb3a4a5853056d6bb1f5920776fbf2.tar.gz
text-handlebars-f6811898ebcb3a4a5853056d6bb1f5920776fbf2.zip
handle defaulting to variables more sanely
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm30
1 files changed, 19 insertions, 11 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index 59ece35..5ec07b5 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -196,6 +196,8 @@ sub preprocess {
sub init_symbols {
my $self = shift;
+ $self->symbol('(variable)')->set_nud($self->can('nud_variable'));
+
$self->infix('.', 256, $self->can('led_dot'));
$self->infix('/', 256, $self->can('led_dot'));
@@ -215,16 +217,11 @@ sub nud_name {
my $self = shift;
my ($symbol) = @_;
- 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(@_);
- }
+ return $self->call(
+ $self->SUPER::nud_name($symbol),
+ # XXX this won't handle multiple arguments
+ $self->expression($symbol->lbp),
+ );
}
sub nud_variable {
@@ -426,6 +423,13 @@ sub std_partial {
);
}
+sub undefined_name {
+ my $self = shift;
+ my ($name) = @_;
+
+ return $self->symbol('(variable)')->clone(id => $name);
+}
+
sub define_function {
my $self = shift;
my (@names) = @_;
@@ -442,8 +446,12 @@ sub is_valid_field {
my $self = shift;
my ($field) = @_;
+ # undefined symbols are all treated as variables - see undefined_name
+ return 1 if $field->arity eq 'variable';
+ # allow ../../foo
return 1 if $field->id eq '..';
- return $self->SUPER::is_valid_field(@_);
+
+ return;
}
sub make_field_lookup {