Checking in changes prior to tagging of version 0.38. Changelog diff is:
[gitmo/Mouse.git] / lib / Mouse / Meta / Method / Destructor.pm
CommitLineData
bbf64e76 1package Mouse::Meta::Method::Destructor;
bc69ee88 2use Mouse::Util; # 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) {
15 no strict 'refs';
16 if (*{$class . '::DEMOLISH'}{CODE}) {
17 $demolishall .= "${class}::DEMOLISH(\$self);\n";
bbf64e76 18 }
380e1cd7 19 }
bbf64e76 20
ad087d11 21 my $source = sprintf("#line %d %s\n", __LINE__, __FILE__) . <<"...";
380e1cd7 22 sub {
bbf64e76 23 my \$self = shift;
7746ba36 24 local \$?;
25
26 my \$e = do{
27 local \$@;
28 eval{
29 $demolishall;
30 };
31 \$@;
32 };
33 no warnings 'misc';
34 die \$e if \$e; # rethrow
bbf64e76 35 }
36...
bbf64e76 37
380e1cd7 38 my $code;
2a464664 39 my $e = do{
40 local $@;
380e1cd7 41 $code = eval $source;
2a464664 42 $@;
43 };
ad087d11 44 die $e if $e;
380e1cd7 45 return $code;
bbf64e76 46}
47
481;
0126c27c 49__END__
a25ca8d6 50
51=head1 NAME
52
53Mouse::Meta::Method::Accessor - A Mouse method generator for destructors
54
55=head1 VERSION
56
06a970ab 57This document describes Mouse version 0.38
a25ca8d6 58
59=head1 SEE ALSO
60
61L<Moose::Meta::Method::Destructor>
62
63=cut