From 65b534b633b40260fdd4e276a65f163463b1c20b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 19 Oct 2012 00:32:41 -0500 Subject: avoid calling find_file multiple times --- lib/Text/Handlebars/Compiler.pm | 28 ++++++++++++++++++++-------- 1 file 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(''), ), ); } -- cgit v1.2.3