diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-05 19:51:15 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-05 19:51:15 -0500 |
commit | b9fc4f4271752f0938fb806e1bd57db30f8ed0a2 (patch) | |
tree | 052090b2e07cd7f2374ae9d18dbbd55fbec4f239 /lib/Text/Handlebars/Compiler.pm | |
parent | b287985d5a389c4f5598e3f862604c36f587133e (diff) | |
download | text-handlebars-b9fc4f4271752f0938fb806e1bd57db30f8ed0a2.tar.gz text-handlebars-b9fc4f4271752f0938fb806e1bd57db30f8ed0a2.zip |
move lambda checking for keys out of the parser
Diffstat (limited to 'lib/Text/Handlebars/Compiler.pm')
-rw-r--r-- | lib/Text/Handlebars/Compiler.pm | 46 |
1 files changed, 46 insertions, 0 deletions
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) = @_; |