From b9fc4f4271752f0938fb806e1bd57db30f8ed0a2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 5 Oct 2012 19:51:15 -0500 Subject: move lambda checking for keys out of the parser --- lib/Text/Handlebars/Compiler.pm | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'lib/Text/Handlebars/Compiler.pm') diff --git a/lib/Text/Handlebars/Compiler.pm b/lib/Text/Handlebars/Compiler.pm index 184b9b6..dd70e65 100644 --- a/lib/Text/Handlebars/Compiler.pm +++ b/lib/Text/Handlebars/Compiler.pm @@ -23,6 +23,52 @@ sub _generate_block { return @compiled; } +sub _generate_key { + my $self = shift; + my ($node) = @_; + + my $var = $node->clone(arity => 'variable'); + + return $self->compile_ast($self->_check_lambda($var)); +} + +sub _generate_key_field { + my $self = shift; + my ($node) = @_; + + my $field = $node->clone(arity => 'field'); + + return $self->compile_ast($self->_check_lambda($field)); +} + +sub _check_lambda { + my $self = shift; + my ($var) = @_; + + my $parser = $self->parser; + + my $is_code = $parser->symbol('(name)')->clone( + arity => 'name', + id => '(is_code)', + line => $var->line, + ); + my $run_code = $parser->symbol('(name)')->clone( + arity => 'name', + id => '(run_code)', + line => $var->line, + ); + + return $parser->make_ternary( + $parser->call($is_code, $var->clone), + $parser->call( + $run_code, + $var->clone, + $parser->vars, + ), + $var, + ); +} + sub _generate_include { my $self = shift; my ($node) = @_; -- cgit v1.2.3-54-g00ecf