my $demolishall = '';
for my $class ($metaclass->linearized_isa) {
if (Mouse::Util::get_code_ref($class, 'DEMOLISH')) {
- $demolishall .= "${class}::DEMOLISH(\$self);\n";
+ $demolishall .= sprintf "%s::DEMOLISH(\$self, \$Mouse::Util::in_global_destruction);\n",
+ $class,
}
}
- my $source = sprintf("#line %d %s\n", __LINE__, __FILE__) . <<"...";
+ my $source = sprintf(<<'END_DESTROY', __LINE__, __FILE__, $demolishall);
+#line %d %s
sub {
- my \$self = shift;
- local \$?;
-
- my \$e = do{
- local \$@;
+ my $self = shift;
+ my $e = do{
+ local $?;
+ local $@;
eval{
- $demolishall;
+ # demolishall
+ %s;
};
- \$@;
+ $@;
};
no warnings 'misc';
- die \$e if \$e; # rethrow
+ die $e if $e; # rethrow
}
-...
+END_DESTROY
my $code;
my $e = do{
=head1 VERSION
-This document describes Mouse version 0.44
+This document describes Mouse version 0.64
=head1 SEE ALSO