diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-09-28 13:21:06 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-09-28 13:21:06 -0500 |
commit | 5d1c22c9436077c5e3dede4abe55dbc8713a1e4c (patch) | |
tree | 98096309f246e9e1589dc1a48448c254c7ee0b5a /lib | |
parent | a6d3f4fd829ec4cb88c9cb3616718c03e428f5c7 (diff) | |
download | text-handlebars-5d1c22c9436077c5e3dede4abe55dbc8713a1e4c.tar.gz text-handlebars-5d1c22c9436077c5e3dede4abe55dbc8713a1e4c.zip |
simplify
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 28 |
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; |