use Moose;
use MooseX::Antlers::ErrorThrower;
+use aliased 'MooseX::Antlers::RefFilter';
use Scalar::Util qw(weaken refaddr);
use PadWalker qw(closed_over);
use Sub::Identify qw(sub_fullname);
use B qw(perlstring);
use namespace::clean -except => 'meta';
+use String::TT qw(tt strip);
+use Data::Dumper::Concise;
has '_original_eval_closure' => (is => 'ro', lazy_build => 1);
has '_our_eval_closure' => (is => 'ro', lazy_build => 1);
#warn Dumper($body);
}
+sub serialized_construction {
+ my ($self, $externals) = @_;
+ my $code = strip q{
+ package Class::MOP::Method::Generated;
+ use strict;
+ use warnings;
+ };
+ foreach my $recorded (@{$self->recorded_coderefs}) {
+ my ($cr, $captures, $body) = @{$recorded};
+ my $name = sub_fullname($cr);
+ my $name_string = perlstring($name);
+ my $filter = RefFilter->new(
+ external_mappings => $externals,
+ root_name => '$__captures'
+ );
+ my $filtered_captures = Dumper($filter->visit($captures));
+ my $fixup_code = $filter->fixup_code;
+ my $use_captures = $self->_generate_capture_constructor($captures);
+ $code .= strip tt q{
+ {
+ my $__captures = [% filtered_captures %];
+ [% fixup_code %]
+ [% use_captures %]
+ *[% name %] = Sub::Name::subname [% name_string %] => [% body %];
+ }
+ };
+ }
+ return $code;
+}
+
sub _generate_coderef_constructor {
my ($self, $entry) = @_;
my ($cr, $captures, $body) = @{$entry};