move validation (can't inherit from roles) from Moose::extends to
Jesse Luehrs [Wed, 15 Apr 2009 03:23:29 +0000 (22:23 -0500)]
Moose::Meta::Class::superclasses

lib/Moose.pm
lib/Moose/Meta/Class.pm

index 3a9c6a5..50ac497 100644 (file)
@@ -54,20 +54,10 @@ sub extends {
 
     Moose->throw_error("Must derive at least one class") unless @_;
 
-    my @supers = @_;
-    foreach my $super (@supers) {
-        my $meta = Class::MOP::load_class($super);
-        Moose->throw_error("You cannot inherit from a Moose Role ($super)")
-            if $meta && $meta->isa('Moose::Meta::Role')
-    }
-
-
-
     # this checks the metaclass to make sure
     # it is correct, sometimes it can get out
     # of sync when the classes are being built
-    my $meta = Moose::Meta::Class->initialize($class);
-    $meta->superclasses(@supers);
+    Moose::Meta::Class->initialize($class)->superclasses(@_);
 }
 
 sub with {
index ceec428..94459f2 100644 (file)
@@ -202,6 +202,17 @@ sub _construct_instance {
     return $instance;
 }
 
+sub superclasses {
+    my $self = shift;
+    my @supers = @_;
+    foreach my $super (@supers) {
+        my $meta = Class::MOP::load_class($super);
+        Moose->throw_error("You cannot inherit from a Moose Role ($super)")
+            if $meta && $meta->isa('Moose::Meta::Role')
+    }
+    return $self->SUPER::superclasses(@supers);
+}
+
 ### ---------------------------------------------
 
 sub add_attribute {