From 458ba9a07adb5634dd17a936411e738e13a74826 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.pm | 4 ---- lib/Text/Handlebars/Compiler.pm | 23 ++++++++++++++++++++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/Text/Handlebars.pm b/lib/Text/Handlebars.pm index 787ac22..9e3f93c 100644 --- a/lib/Text/Handlebars.pm +++ b/lib/Text/Handlebars.pm @@ -124,10 +124,6 @@ sub default_functions { return { %{ $class->SUPER::default_functions(@_) }, %{ $class->default_helpers }, - '(merge_hash)' => sub { - my ($left, $right) = @_; - return { %$left, %$right }; - }, }; } 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