throw an error when trying to extend a role
[gitmo/Moo.git] / lib / Moo.pm
index 25d50e0..1566c65 100644 (file)
@@ -5,7 +5,7 @@ use Moo::_Utils;
 use B 'perlstring';
 use Sub::Defer ();
 
-our $VERSION = '0.091010'; # 0.91.10
+our $VERSION = '0.091011'; # 0.91.11
 $VERSION = eval $VERSION;
 
 require Moo::sification;
@@ -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,29 @@ sub unimport {
   _unimport_coderefs($target, $MAKERS{$target});
 }
 
+sub _set_superclasses {
+  my $class = shift;
+  my $target = shift;
+  for (@_) {
+    _load_module($_);
+    if ($INC{"Role/Tiny.pm"} && $Role::Tiny::INFO{$_}) {
+      require Carp;
+      Carp::croak("Can't extend role '$_'");
+    }
+  }
+  # 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"}) {
@@ -706,6 +718,8 @@ doy - Jesse Luehrs (cpan:DOY) <doy at tozt dot net>
 
 perigrin - Chris Prather (cpan:PERIGRIN) <chris@prather.org>
 
+Mithaldu - Christian Walde (cpan:MITHALDU) <walde.christian@googlemail.com>
+
 =head1 COPYRIGHT
 
 Copyright (c) 2010-2011 the Moo L</AUTHOR> and L</CONTRIBUTORS>