Switch to unshifting message if needed, like most of Moose
[gitmo/Moose.git] / lib / Moose / Util.pm
index 09803d4..2658ec8 100644 (file)
@@ -29,6 +29,7 @@ my @exports = qw[
     english_list
     meta_attribute_alias
     meta_class_alias
+    throw
 ];
 
 Sub::Exporter::setup_exporter({
@@ -470,6 +471,34 @@ sub _is_role_only_subclass {
     return 1;
 }
 
+sub throw {
+    if (@_ % 2) {
+        unshift @_, 'message';
+    }
+
+    my %args = @_;
+
+    my $superclass = delete($args{superclass}) || 'Throwable::Error';
+    my $roles = delete($args{roles});
+
+    my $metaclass;
+
+    load_class($superclass);
+
+    if ($roles) {
+        $metaclass = Moose::Meta::Class->create_anon_class(
+            superclasses => [$superclass],
+            roles        => $roles,
+        );
+    }
+    else {
+        $metaclass = Moose::Meta::Class->initialize($superclass);
+    }
+
+    $metaclass->name->throw(\%args);
+}
+
+
 1;
 
 # ABSTRACT: Utilities for working with Moose classes