Checking in changes prior to tagging of version 0.48. Changelog diff is:
[gitmo/Mouse.git] / lib / Mouse / Meta / Method / Destructor.pm
CommitLineData
bbf64e76 1package Mouse::Meta::Method::Destructor;
3821b191 2use Mouse::Util qw(:meta); # 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) {
a5c683f6 15 if (Mouse::Util::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
02bf7ed1 56This document describes Mouse version 0.48
a25ca8d6 57
58=head1 SEE ALSO
59
60L<Moose::Meta::Method::Destructor>
61
62=cut