summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-09-28 13:21:06 -0500
committerJesse Luehrs <doy@tozt.net>2012-09-28 13:21:06 -0500
commit5d1c22c9436077c5e3dede4abe55dbc8713a1e4c (patch)
tree98096309f246e9e1589dc1a48448c254c7ee0b5a /lib
parenta6d3f4fd829ec4cb88c9cb3616718c03e428f5c7 (diff)
downloadtext-handlebars-5d1c22c9436077c5e3dede4abe55dbc8713a1e4c.tar.gz
text-handlebars-5d1c22c9436077c5e3dede4abe55dbc8713a1e4c.zip
simplify
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;