Version 0.40_01
[gitmo/Mouse.git] / lib / Mouse / Meta / Method / Destructor.pm
CommitLineData
bbf64e76 1package Mouse::Meta::Method::Destructor;
5124b717 2use Mouse::Util qw(get_code_ref); # enables strict and warnings
bbf64e76 3
380e1cd7 4sub _empty_DESTROY{ }
2a464664 5
380e1cd7 6sub _generate_destructor{
7 my (undef, $metaclass) = @_;
bbf64e76 8
380e1cd7 9 if(!$metaclass->name->can('DEMOLISH')){
10 return \&_empty_DESTROY;
11 }
12
13 my $demolishall = '';
14 for my $class ($metaclass->linearized_isa) {
5124b717 15 if (get_code_ref($class, 'DEMOLISH')) {
380e1cd7 16 $demolishall .= "${class}::DEMOLISH(\$self);\n";
bbf64e76 17 }
380e1cd7 18 }
bbf64e76 19
ad087d11 20 my $source = sprintf("#line %d %s\n", __LINE__, __FILE__) . <<"...";
380e1cd7 21 sub {
bbf64e76 22 my \$self = shift;
7746ba36 23 local \$?;
24
25 my \$e = do{
26 local \$@;
27 eval{
28 $demolishall;
29 };
30 \$@;
31 };
32 no warnings 'misc';
33 die \$e if \$e; # rethrow
bbf64e76 34 }
35...
bbf64e76 36
380e1cd7 37 my $code;
2a464664 38 my $e = do{
39 local $@;
380e1cd7 40 $code = eval $source;
2a464664 41 $@;
42 };
ad087d11 43 die $e if $e;
380e1cd7 44 return $code;
bbf64e76 45}
46
471;
0126c27c 48__END__
a25ca8d6 49
50=head1 NAME
51
b842ace0 52Mouse::Meta::Method::Destructor - A Mouse method generator for destructors
a25ca8d6 53
54=head1 VERSION
55
b06ce1f5 56This document describes Mouse version 0.40_01
a25ca8d6 57
58=head1 SEE ALSO
59
60L<Moose::Meta::Method::Destructor>
61
62=cut