summaryrefslogtreecommitdiffstats
path: root/lib/Text/Xslate/Syntax/Handlebars.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Text/Xslate/Syntax/Handlebars.pm')
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index 3537952..9bd1366 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -148,6 +148,7 @@ sub init_symbols {
$self->prefix('/', 0)->is_block_end(1);
$self->prefix('&', 0)->set_nud($self->can('nud_mark_raw'));
+ $self->prefix('..', 0)->set_nud($self->can('nud_uplevel'));
}
sub nud_name {
@@ -290,6 +291,13 @@ sub nud_mark_raw {
return $self->call('mark_raw', $self->expression(0));
}
+sub nud_uplevel {
+ my $self = shift;
+ my ($symbol) = @_;
+
+ return $symbol->clone(arity => 'variable');
+}
+
sub make_field_lookup {
my $self = shift;
my ($var, $field, $dot) = @_;
@@ -307,6 +315,14 @@ sub make_field_lookup {
);
}
+sub is_valid_field {
+ my $self = shift;
+ my ($field) = @_;
+
+ return 1 if $field->id eq '..';
+ return $self->SUPER::is_valid_field(@_);
+}
+
sub make_ternary {
my $self = shift;
my ($if, $then, $else) = @_;