summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-19 03:32:22 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-19 03:32:22 -0500
commit71a5add2e54c2cddf61db1af59c0653c2b763290 (patch)
tree51154ccd7342d0fd730ed1b7885bccea2cd85d38
parent4f6debfaaabcf04e5f67e9da71eb76abd39a8266 (diff)
downloadtext-handlebars-71a5add2e54c2cddf61db1af59c0653c2b763290.tar.gz
text-handlebars-71a5add2e54c2cddf61db1af59c0653c2b763290.zip
move most of find_file into the compiler
-rw-r--r--lib/Text/Handlebars.pm8
-rw-r--r--lib/Text/Handlebars/Compiler.pm41
2 files changed, 41 insertions, 8 deletions
diff --git a/lib/Text/Handlebars.pm b/lib/Text/Handlebars.pm
index 9e3f93c..947a336 100644
--- a/lib/Text/Handlebars.pm
+++ b/lib/Text/Handlebars.pm
@@ -143,12 +143,12 @@ sub _register_builtin_methods {
my ($funcs) = @_;
weaken(my $weakself = $self);
+ $funcs->{'(suffix)'} = sub {
+ return $weakself->{suffix};
+ };
$funcs->{'(find_file)'} = sub {
my ($filename) = @_;
- return $filename if try { $weakself->find_file($filename); 1 };
- $filename .= $weakself->{suffix};
- return $filename if try { $weakself->find_file($filename); 1 };
- return 0;
+ return try { $weakself->find_file($filename); 1 };
};
$funcs->{'(make_block_helper)'} = sub {
my ($code, $raw_text, $else_raw_text, $hash) = @_;
diff --git a/lib/Text/Handlebars/Compiler.pm b/lib/Text/Handlebars/Compiler.pm
index 57a746a..4681d30 100644
--- a/lib/Text/Handlebars/Compiler.pm
+++ b/lib/Text/Handlebars/Compiler.pm
@@ -83,10 +83,7 @@ sub _generate_partial {
return (
$self->compile_ast(
- $self->save_lvar(
- $lvar_id,
- $self->call($node, '(find_file)', $node->first->clone)
- ),
+ $self->save_lvar($lvar_id, $self->find_file($node->first->clone)),
),
$self->compile_ast(
$self->make_ternary(
@@ -102,6 +99,42 @@ sub _generate_partial {
);
}
+sub find_file {
+ my $self = shift;
+ my ($filename) = @_;
+
+ return $filename->clone(
+ arity => 'find_file',
+ first => $filename,
+ );
+}
+
+sub _generate_find_file {
+ my $self = shift;
+ my ($node) = @_;
+
+ my $filename = $node->first;
+ my $with_suffix = $self->parser->symbol('~')->clone(
+ arity => 'binary',
+ first => $filename->clone,
+ second => $self->call($node, '(suffix)'),
+ );
+
+ return (
+ $self->compile_ast(
+ $self->make_ternary(
+ $self->call($node, '(find_file)', $filename->clone),
+ $filename->clone,
+ $self->make_ternary(
+ $self->call($node, '(find_file)', $with_suffix->clone),
+ $with_suffix->clone,
+ $self->literal(''),
+ ),
+ ),
+ ),
+ );
+}
+
sub _generate_for {
my $self = shift;
my ($node) = @_;