diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-19 00:32:41 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-01-02 13:56:20 -0600 |
commit | b26e453b96b45ccec7fda5d1bf456f610c4a9371 (patch) | |
tree | e9c17fb182f3920478c5b3bbcafb41146e8a347a /lib/Text | |
parent | adb96fb612699aacd3519fd3b5e0ec778922ca92 (diff) | |
download | text-handlebars-b26e453b96b45ccec7fda5d1bf456f610c4a9371.tar.gz text-handlebars-b26e453b96b45ccec7fda5d1bf456f610c4a9371.zip |
avoid calling find_file multiple times
Diffstat (limited to 'lib/Text')
-rw-r--r-- | lib/Text/Handlebars/Compiler.pm | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/lib/Text/Handlebars/Compiler.pm b/lib/Text/Handlebars/Compiler.pm index 40314b2..55913dc 100644 --- a/lib/Text/Handlebars/Compiler.pm +++ b/lib/Text/Handlebars/Compiler.pm @@ -77,15 +77,27 @@ sub _generate_partial { my $self = shift; my ($node) = @_; - return $self->compile_ast( - $self->make_ternary( - $self->call($node, '(find_file)', $node->first->clone), - $node->clone( - arity => 'include', - id => 'include', - first => $self->call($node, '(find_file)', $node->first), + my $lvar_id = $self->lvar_id; + local $self->{lvar_id} = $self->lvar_use(1); + my $lvar = $node->clone(arity => 'lvar', id => $lvar_id); + + return ( + $self->compile_ast( + $self->save_lvar( + $lvar_id, + $self->call($node, '(find_file)', $node->first->clone) + ), + ), + $self->compile_ast( + $self->make_ternary( + $lvar->clone, + $node->clone( + arity => 'include', + id => 'include', + first => $lvar->clone, + ), + $self->parser->literal(''), ), - $self->parser->literal(''), ), ); } |