X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP.pm;h=ca8d2a4a40136a3b3cfed68f68e862decbe4ecd3;hb=71e9cdebdf3152592b0d75cef3217f90de84be8e;hp=6fd22a6eb6fb6c2ecf4feff04a4e4c0a3fe49420;hpb=82999986c7574b020e731b914db1d58f9265f7e3;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP.pm b/lib/Class/MOP.pm index 6fd22a6..ca8d2a4 100644 --- a/lib/Class/MOP.pm +++ b/lib/Class/MOP.pm @@ -17,15 +17,13 @@ use Class::MOP::Class; use Class::MOP::Attribute; use Class::MOP::Method; -use Class::MOP::Immutable; - BEGIN { - *IS_RUNNING_ON_5_10 = ($] < 5.009_005) + *IS_RUNNING_ON_5_10 = ($] < 5.009_005) ? sub () { 0 } - : sub () { 1 }; + : sub () { 1 }; sub HAVE_ISAREV () { - warn "Class::MOP::HAVE_ISAREV is deprecated and will be removed in a future release. It has always returned 1 anyway."; + Carp::cluck("Class::MOP::HAVE_ISAREV is deprecated and will be removed in a future release. It has always returned 1 anyway."); return 1; } @@ -33,10 +31,10 @@ BEGIN { *check_package_cache_flag = \&mro::get_pkg_gen; } -our $VERSION = '0.80'; +our $VERSION = '0.82_01'; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; -our $AUTHORITY = 'cpan:STEVAN'; +our $AUTHORITY = 'cpan:STEVAN'; require XSLoader; XSLoader::load( __PACKAGE__, $XS_VERSION ); @@ -351,12 +349,37 @@ Class::MOP::Class->meta->add_attribute( ); Class::MOP::Class->meta->add_attribute( - Class::MOP::Attribute->new('immutable_transformer' => ( + Class::MOP::Attribute->new('immutable_trait' => ( + reader => { + 'immutable_trait' => \&Class::MOP::Class::immutable_trait + }, + default => "Class::MOP::Class::Immutable::Trait", + )) +); + +Class::MOP::Class->meta->add_attribute( + Class::MOP::Attribute->new('constructor_name' => ( + reader => { + 'constructor_name' => \&Class::MOP::Class::constructor_name, + }, + default => "new", + )) +); + +Class::MOP::Class->meta->add_attribute( + Class::MOP::Attribute->new('constructor_class' => ( reader => { - 'immutable_transformer' => \&Class::MOP::Class::immutable_transformer + 'constructor_class' => \&Class::MOP::Class::constructor_class, }, - writer => { - '_set_immutable_transformer' => \&Class::MOP::Class::_set_immutable_transformer + default => "Class::MOP::Method::Constructor", + )) +); + + +Class::MOP::Class->meta->add_attribute( + Class::MOP::Attribute->new('destructor_class' => ( + reader => { + 'destructor_class' => \&Class::MOP::Class::destructor_class, }, )) ); @@ -547,6 +570,16 @@ Class::MOP::Method::Generated->meta->add_attribute( )) ); + +## -------------------------------------------------------- +## Class::MOP::Method::Inlined + +Class::MOP::Method::Inlined->meta->add_attribute( + Class::MOP::Attribute->new('_expected_method_class' => ( + reader => { '_expected_method_class' => \&Class::MOP::Method::Inlined::_expected_method_class }, + )) +); + ## -------------------------------------------------------- ## Class::MOP::Method::Accessor @@ -639,6 +672,10 @@ undef Class::MOP::Instance->meta->{_package_cache_flag}; # NOTE: we don't need to inline the the accessors this only lengthens # the compile time of the MOP, and gives us no actual benefits. +# this is just nitpicking to ensure Class::MOP::Class->meta == ->meta->meta +Class::MOP::Class->meta->_immutable_metaclass; +$Class::MOP::Class::immutable_metaclass_cache{"Class::MOP::Class"}{"Class::MOP::Class::Immutable::Trait"} = Class::MOP::Class::Immutable::Class::MOP::Class->meta; + $_->meta->make_immutable( inline_constructor => 1, replace_constructor => 1, @@ -648,6 +685,8 @@ $_->meta->make_immutable( Class::MOP::Package Class::MOP::Module Class::MOP::Class + Class::MOP::Class::Immutable::Trait + Class::MOP::Class::Immutable::Class::MOP::Class Class::MOP::Attribute Class::MOP::Method @@ -656,6 +695,7 @@ $_->meta->make_immutable( Class::MOP::Object Class::MOP::Method::Generated + Class::MOP::Method::Inlined Class::MOP::Method::Accessor Class::MOP::Method::Constructor