From 9fbbb48c912e710633a521c784c53020be053aac Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 18 Oct 2012 15:49:10 -0500 Subject: merge_hash is now an opcode --- lib/Text/Handlebars/Compiler.pm | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'lib/Text/Handlebars/Compiler.pm') diff --git a/lib/Text/Handlebars/Compiler.pm b/lib/Text/Handlebars/Compiler.pm index 6be89e7..ebcce23 100644 --- a/lib/Text/Handlebars/Compiler.pm +++ b/lib/Text/Handlebars/Compiler.pm @@ -344,6 +344,23 @@ sub _generate_save_lvar { ); } +sub _generate_merge_hash { + my $self = shift; + my ($node) = @_; + + my $lvar_id = $self->lvar_id; + local $self->{lvar_id} = $self->lvar_use(1); + + return ( + $self->compile_ast($node->first), + $self->opcode('save_to_lvar', $lvar_id), + $self->compile_ast($node->second), + $self->opcode('move_to_sb'), + $self->opcode('load_lvar', $lvar_id), + $self->opcode('merge_hash'), + ); +} + sub join { my $self = shift; my (@args) = @_; @@ -558,7 +575,11 @@ sub merge_single_hash { my $self = shift; my ($left, $right) = @_; - return $self->call($left, '(merge_hash)', $left, $right); + return $left->clone( + arity => 'merge_hash', + first => $left, + second => $right, + ); } __PACKAGE__->meta->make_immutable; -- cgit v1.2.3-54-g00ecf