summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-19 00:32:41 -0500
committerJesse Luehrs <doy@tozt.net>2013-01-02 13:56:20 -0600
commitb26e453b96b45ccec7fda5d1bf456f610c4a9371 (patch)
treee9c17fb182f3920478c5b3bbcafb41146e8a347a
parentadb96fb612699aacd3519fd3b5e0ec778922ca92 (diff)
downloadtext-handlebars-b26e453b96b45ccec7fda5d1bf456f610c4a9371.tar.gz
text-handlebars-b26e453b96b45ccec7fda5d1bf456f610c4a9371.zip
avoid calling find_file multiple times
-rw-r--r--lib/Text/Handlebars/Compiler.pm28
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(''),
),
);
}