X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoo.pm;h=e49fc38f3fd1f96cb85817abfa9950dc3de76a3e;hb=dcbfe1d9ae5ed87d618f1c7856320a177cd3ecd7;hp=6899253ffc053365762f5947a401271bf1b7723b;hpb=85de1ef9dedd1a60115e475036dabaed68dc6ae2;p=gitmo%2FMoo.git diff --git a/lib/Moo.pm b/lib/Moo.pm index 6899253..e49fc38 100644 --- a/lib/Moo.pm +++ b/lib/Moo.pm @@ -135,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, @@ -315,6 +310,15 @@ to your code before Moose is loaded, but bear in mind that this switch is currently global and turns the mechanism off entirely so don't put this in library code. +=head1 MOO AND CLASS::XSACCESSOR + +If a new enough version of L is available, it +will be used to generate simple accessors, readers, and writers for +a speed boost. Simple accessors are those without lazy defaults, +type checks/coercions, or triggers. Readers and writers generated +by L will behave slightly differently: they will +reject attempts to call them with the incorrect number of parameters. + =head1 MOO VERSUS ANY::MOOSE L will load L normally, and L in a program using