Factor 'extends' guts into separate method
Dagfinn Ilmari Mannsåker [Sat, 14 Jul 2012 15:42:21 +0000 (16:42 +0100)]
lib/Moo.pm

index 3e256e2..fe7bdae 100644 (file)
@@ -25,18 +25,7 @@ sub import {
   return if $MAKERS{$target}; # already exported into this package
   $MAKERS{$target} = {};
   _install_tracked $target => extends => sub {
-    _load_module($_) for @_;
-    # Can't do *{...} = \@_ or 5.10.0's mro.pm stops seeing @ISA
-    @{*{_getglob("${target}::ISA")}{ARRAY}} = @_;
-    if (my $old = delete $Moo::MAKERS{$target}{constructor}) {
-      delete _getstash($target)->{new};
-      Moo->_constructor_maker_for($target)
-         ->register_attribute_specs(%{$old->all_attribute_specs});
-    }
-    no warnings 'once'; # piss off. -- mst
-    $Moo::HandleMoose::MOUSE{$target} = [
-      grep defined, map Mouse::Util::find_meta($_), @_
-    ] if $INC{"Mouse.pm"};
+    $class->_set_superclasses($target, @_);
     $class->_maybe_reset_handlemoose($target);
     return;
   };
@@ -77,6 +66,23 @@ sub unimport {
   _unimport_coderefs($target, $MAKERS{$target});
 }
 
+sub _set_superclasses {
+    my $class = shift;
+    my $target = shift;
+    _load_module($_) for @_;
+    # Can't do *{...} = \@_ or 5.10.0's mro.pm stops seeing @ISA
+    @{*{_getglob("${target}::ISA")}{ARRAY}} = @_;
+    if (my $old = delete $Moo::MAKERS{$target}{constructor}) {
+      delete _getstash($target)->{new};
+      Moo->_constructor_maker_for($target)
+         ->register_attribute_specs(%{$old->all_attribute_specs});
+    }
+    no warnings 'once'; # piss off. -- mst
+    $Moo::HandleMoose::MOUSE{$target} = [
+      grep defined, map Mouse::Util::find_meta($_), @_
+    ] if $INC{"Mouse.pm"};
+}
+
 sub _maybe_reset_handlemoose {
   my ($class, $target) = @_;
   if ($INC{"Moo/HandleMoose.pm"}) {