diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-18 15:49:10 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-01-02 13:56:20 -0600 |
commit | 458ba9a07adb5634dd17a936411e738e13a74826 (patch) | |
tree | c24b1e840cd83167e1abbd6e129745935f589ad7 /lib/Text | |
parent | 174ac6de8d5e349b32480ffd8e0f0c3feae87a62 (diff) | |
download | text-handlebars-458ba9a07adb5634dd17a936411e738e13a74826.tar.gz text-handlebars-458ba9a07adb5634dd17a936411e738e13a74826.zip |
merge_hash is now an opcode
Diffstat (limited to 'lib/Text')
-rw-r--r-- | lib/Text/Handlebars.pm | 4 | ||||
-rw-r--r-- | 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; |