summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm28
1 files changed, 18 insertions, 10 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index 40aba9b..3f63f68 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -159,22 +159,30 @@ sub led_dot {
my $self = shift;
my ($symbol, $left) = @_;
- my $token = $self->token;
- if (!$self->is_valid_field($token)) {
- $self->_unexpected("a field name", $token);
- }
-
- my $dot = $symbol->clone(
- arity => 'field',
- first => $left,
- second => $token->clone(arity => 'literal'),
- );
+ my $dot = $self->make_field_lookup($left, $self->token, $symbol);
$self->advance;
return $dot;
}
+sub make_field_lookup {
+ my $self = shift;
+ my ($var, $field, $dot) = @_;
+
+ if (!$self->is_valid_field($field)) {
+ $self->_unexpected("a field name", $field);
+ }
+
+ $dot ||= $self->symbol('.');
+
+ return $dot->clone(
+ arity => 'field',
+ first => $var,
+ second => $field->clone(arity => 'literal'),
+ );
+}
+
if (0) {
require Devel::STDERR::Indent;
my @stack;