diff --git a/Op.pm b/Op.pm index 157f0c51..83414d32 100644 --- a/Op.pm +++ b/Op.pm @@ -769,7 +769,8 @@ use CgOp; } sub statement_level { - Op::CallSub->new(invocant => $_[0]); + Op::CallSub->new(invocant => Op::SubDef->new(var => $_[0]->var, + body => $_[0]->body, once => 1)); } __PACKAGE__->meta->make_immutable; diff --git a/Optimizer/Beta.pm b/Optimizer/Beta.pm index fbdb35bb..b9e8737f 100644 --- a/Optimizer/Beta.pm +++ b/Optimizer/Beta.pm @@ -94,8 +94,12 @@ sub beta_optimize { positionals => \@pos), $ib->do]); - for my $ke (reverse map { $_->used_slots(0) } @{ $ib->decls }) { - $nop = Op::Let->new(var => $ke->[0], type => $ke->[1], in => $nop); + for my $d (reverse @{ $ib->decls }) { + my $to = $d->hash ? CgOp::newblankhash : + $d->list ? CgOp::newblanklist : + CgOp::newblankrwscalar; + $nop = Op::Let->new(var => $d->slot, + to => Op::CgOp->new(op => $to), in => $nop); } for my $a (reverse @args) {