Don't really like the parameter "superclass"
[gitmo/Moose.git] / lib / Moose / Util.pm
index 28ec30f..4b21967 100644 (file)
@@ -472,21 +472,28 @@ sub _is_role_only_subclass {
 }
 
 sub throw {
-    my %args;
-    if (@_ == 1) {
-        $args{message} = shift;
-    }
-    else {
-        %args = @_;
+    if (@_ % 2) {
+        unshift @_, 'message';
     }
 
-    my $superclasses = delete($args{superclasses}) || ['Throwable::Error'];
+    my %args = @_;
+
+    my $class = delete($args{class}) || 'Moose::Exception';
     my $roles = delete($args{roles});
 
-    my $metaclass = Moose::Meta::Class->create_anon_class(
-        superclasses => $superclasses,
-        ($roles ? (roles => $roles) : ()),
-    );
+    my $metaclass;
+
+    load_class($class);
+
+    if ($roles) {
+        $metaclass = Moose::Meta::Class->create_anon_class(
+            superclasses => [$class],
+            roles        => $roles,
+        );
+    }
+    else {
+        $metaclass = Moose::Meta::Class->initialize($class);
+    }
 
     $metaclass->name->throw(\%args);
 }