X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoo.pm;h=bcc4b71607f251ecd43c2280c060abd3f544bfaa;hb=8dee08c10f9b63372dff89d38b37b175cdda4489;hp=4ef6ab1243a4433b3d214752982a3f2e3b2ab7d8;hpb=7887ffd0e1ad2fb8ce47acf35c23cdb14d47b151;p=gitmo%2FMoo.git diff --git a/lib/Moo.pm b/lib/Moo.pm index 4ef6ab1..bcc4b71 100644 --- a/lib/Moo.pm +++ b/lib/Moo.pm @@ -5,7 +5,7 @@ use Moo::_Utils; use B 'perlstring'; use Sub::Defer (); -our $VERSION = '1.001000'; # 1.1.0 +our $VERSION = '1.002000'; # 1.2.0 $VERSION = eval $VERSION; require Moo::sification; @@ -93,6 +93,9 @@ sub _set_superclasses { Moo->_constructor_maker_for($target) ->register_attribute_specs(%{$old->all_attribute_specs}); } + elsif (!$target->isa('Moo::Object')) { + Moo->_constructor_maker_for($target); + } no warnings 'once'; # piss off. -- mst $Moo::HandleMoose::MOUSE{$target} = [ grep defined, map Mouse::Util::find_meta($_), @_ @@ -132,32 +135,27 @@ sub _accessor_maker_for { } sub _constructor_maker_for { - my ($class, $target, $select_super) = @_; + my ($class, $target) = @_; return unless $MAKERS{$target}; $MAKERS{$target}{constructor} ||= do { require Method::Generate::Constructor; require Sub::Defer; my ($moo_constructor, $con); - if ($select_super && $MAKERS{$select_super}) { - $moo_constructor = 1; - $con = $MAKERS{$select_super}{constructor}; - } else { - my $t_new = $target->can('new'); - if ($t_new) { - if ($t_new == Moo::Object->can('new')) { + my $t_new = $target->can('new'); + if ($t_new) { + if ($t_new == Moo::Object->can('new')) { + $moo_constructor = 1; + } elsif (my $defer_target = (Sub::Defer::defer_info($t_new)||[])->[0]) { + my ($pkg) = ($defer_target =~ /^(.*)::[^:]+$/); + if ($MAKERS{$pkg}) { $moo_constructor = 1; - } elsif (my $defer_target = (Sub::Defer::defer_info($t_new)||[])->[0]) { - my ($pkg) = ($defer_target =~ /^(.*)::[^:]+$/); - if ($MAKERS{$pkg}) { - $moo_constructor = 1; - $con = $MAKERS{$pkg}{constructor}; - } + $con = $MAKERS{$pkg}{constructor}; } - } else { - $moo_constructor = 1; # no other constructor, make a Moo one } - }; + } else { + $moo_constructor = 1; # no other constructor, make a Moo one + } ($con ? ref($con) : 'Method::Generate::Constructor') ->new( package => $target, @@ -366,7 +364,7 @@ This method should always return a hash reference of named options. If you are inheriting from a non-Moo class, the arguments passed to the parent class constructor can be manipulated by defining a C method. -It will recieve the same arguments as C, and should return a list +It will receive the same arguments as C, and should return a list of arguments to pass to the parent class constructor. =head2 BUILD @@ -652,8 +650,6 @@ given attributes specifications if necessary when upgrading to a Moose role or class. You shouldn't need this by default, but is provided as a means of possible extensibility. -L - =back =head2 before