diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-08 15:05:02 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-08 15:05:02 -0500 |
commit | 0a45bee673aa48c56607eb7f5f06c7a4b6bbca03 (patch) | |
tree | a20ed8a8aabc6326c1a747f52f91200fda9b3724 /lib/Text/Xslate/Syntax | |
parent | 27d3275ba73eedd3ebc831d7faa3ae15eb1080bf (diff) | |
download | text-handlebars-0a45bee673aa48c56607eb7f5f06c7a4b6bbca03.tar.gz text-handlebars-0a45bee673aa48c56607eb7f5f06c7a4b6bbca03.zip |
move more code into the compiler
Diffstat (limited to 'lib/Text/Xslate/Syntax')
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 98 |
1 files changed, 5 insertions, 93 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index d90f7c2..54e7447 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -405,74 +405,12 @@ sub std_block { $self->advance(';'); - if ($name->arity eq 'call') { - $name = $name->clone( - first => $self->call( - '(make_block_helper)', - $name->first, - $block{if}{raw_text}->clone, - ($block{else} - ? $block{else}{raw_text}->clone - : $self->literal('')), - ), - ); - return $self->print_raw($name); - } - - my $iterations = $self->make_ternary( - $self->call('(is_falsy)', $name->clone), - $self->call('(make_array)', $self->literal(1)), - $self->make_ternary( - $self->call('(is_array)', $name->clone), - $name->clone, - $self->call('(make_array)', $self->literal(1)), - ), - ); - - my $loop_var = $self->symbol('(loop_var)')->clone(arity => 'variable'); - - my $body_block = [ - $self->make_ternary( - $self->call('(is_falsy)', $name->clone), - $symbol->clone( - arity => 'block_body', - first => undef, - second => [ $block{else}{body} ], - ), - $symbol->clone( - arity => 'block_body', - first => [ - $self->call( - '(new_vars_for)', - $self->vars, - $name->clone, - $self->iterator_index, - ), - ], - second => [ $block{if}{body} ], - ), - ), - ]; - - my $var = $name->clone(arity => 'variable'); return $self->print_raw( - $self->make_ternary( - $self->call('(is_code)', $var->clone), - $self->call( - '(run_code)', - $var->clone, - $self->vars, - $block{if}{open_tag}->clone, - $block{if}{close_tag}->clone, - $block{if}{raw_text}->clone, - ), - $self->symbol('(for)')->clone( - arity => 'for', - first => $iterations, - second => [$loop_var], - third => $body_block, - ), - ) + $name->clone( + arity => 'block', + first => $name, + second => \%block, + ), ); } @@ -629,43 +567,17 @@ sub make_field_lookup { ); } -sub make_ternary { - my $self = shift; - my ($if, $then, $else) = @_; - return $self->symbol('?:')->clone( - arity => 'if', - first => $if, - second => $then, - third => $else, - ); -} - sub print_raw { my $self = shift; return $self->print(@_)->clone(id => 'print_raw'); } -sub vars { - my $self = shift; - return $self->symbol('(vars)')->clone(arity => 'vars'); -} - sub literal { my $self = shift; my ($value) = @_; return $self->symbol('(literal)')->clone(id => $value); } -sub iterator_index { - my $self = shift; - - return $self->symbol('(iterator)')->clone( - arity => 'iterator', - id => '$~(loop_var)', - first => $self->symbol('(loop_var)')->clone, - ), -} - sub _field_to_string { my $self = shift; my ($symbol) = @_; |