Add regexp handles
[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;
24 $demolishall;
25 }
26...
bbf64e76 27
380e1cd7 28 my $code;
2a464664 29 my $e = do{
30 local $@;
380e1cd7 31 $code = eval $source;
2a464664 32 $@;
33 };
ad087d11 34 die $e if $e;
380e1cd7 35 return $code;
bbf64e76 36}
37
381;
0126c27c 39__END__