X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FPackage.pm;h=d2cc02136b4357d651418086ca65ae65f2339b55;hb=ec9e38e5fd24916a3b5a4b67b5e7c7d20674d0f5;hp=0336a571c6dd55156bd74613af0c19f1fd463107;hpb=dbea6de4246cb1d75716f20bf5863ca4e15671a1;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Package.pm b/lib/Class/MOP/Package.pm index 0336a57..d2cc021 100644 --- a/lib/Class/MOP/Package.pm +++ b/lib/Class/MOP/Package.pm @@ -58,18 +58,25 @@ sub reinitialize { sub _new { my $class = shift; - my $options = @_ == 1 ? $_[0] : {@_}; + return Class::MOP::Class->initialize($class)->new_object(@_) + if $class ne __PACKAGE__; - # NOTE: - # because of issues with the Perl API - # to the typeglob in some versions, we - # need to just always grab a new - # reference to the hash in the accessor. - # Ideally we could just store a ref and - # it would Just Work, but oh well :\ - $options->{namespace} ||= \undef; + my $params = @_ == 1 ? $_[0] : {@_}; + + return bless { + package => $params->{package}, + + # NOTE: + # because of issues with the Perl API + # to the typeglob in some versions, we + # need to just always grab a new + # reference to the hash in the accessor. + # Ideally we could just store a ref and + # it would Just Work, but oh well :\ + + namespace => \undef, - bless $options, $class; + } => $class; } # Attributes