0.44 Sat. May 10, 2008
* Moose
- made make_immutable warning cluck to
- show where the error is
+ show where the error is (thanks mst)
* Moose::Object
- BUILDALL and DEMOLISHALL now call
->body when looping through the
methods, to avoid the overloaded
method call.
+ - fixed issue where DEMOLISHALL was
+ eating the $@ values, and so not
+ working correctly, it still kind of
+ eats them, but so does vanilla perl
+ - added tests for this
* Moose::Cookbook::Recipe7
- added new recipe for immutable
and exclusion with Roles (thanks Dave Rolsky)
* t/
- - fixed Win32 test failure
+ - fixed Win32 test failure (thanks spicyjack)
0.43 Wed. April, 30, 2008
* NOTE TO SELF:
# extra meta level calls
return unless $_[0]->can('DEMOLISH');
# if we have an exception here ...
- if (my $e = $@) {
+ if ($@) {
+ # localize the $@ ...
+ local $@;
# run DEMOLISHALL ourselves, ...
- (shift)->DEMOLISHALL;
- # then restore the exception ...
- $@ = $e;
+ $_[0]->DEMOLISHALL;
# and return ...
return;
}
+ # otherwise it is normal destruction
goto &DEMOLISHALL;
}
use strict;
use warnings;
-use Test::More no_plan => 1;
+use Test::More tests => 5;
use Test::Exception;
BEGIN {
use_ok('Moose');
- use_ok('Moose::Util::TypeConstraints');
}
{
# if no call to ANY Moose::Object->new was done before.
sub DEMOLISH {
my ( $self ) = @_;
+ # ... Moose (kinda) eats exceptions in DESTROY/DEMOLISH";
}
}
-my $obj = eval { Foo->new; };
-::like( $@, qr/is required/, "... Foo plain" );
-::is( $obj, undef, "... the object is undef" );
+{
+ my $obj = eval { Foo->new; };
+ ::like( $@, qr/is required/, "... Foo plain" );
+ ::is( $obj, undef, "... the object is undef" );
+}
+
+{
+ package Bar;
+
+ sub new { die "Bar died"; }
+
+ sub DESTROY {
+ die "Vanilla Perl eats exceptions in DESTROY too";
+ }
+}
+
+{
+ my $obj = eval { Bar->new; };
+ ::like( $@, qr/Bar died/, "... Bar plain" );
+ ::is( $obj, undef, "... the object is undef" );
+}
1;