Tidy for release
[gitmo/Mouse.git] / lib / Mouse / Util / TypeConstraints.pm
index cee7f5e..dde6dbb 100644 (file)
@@ -111,6 +111,14 @@ sub _create_type{
     }
 
     $args{name} = $name;
+    my $parent;
+    if($mode eq 'subtype'){
+        $parent = delete $args{as};
+        if(!$parent){
+            $parent = delete $args{name};
+            $name   = '__ANON__';
+        }
+    }
 
     my $package_defined_in = $args{package_defined_in} ||= caller(1);
 
@@ -120,14 +128,11 @@ sub _create_type{
               . "$existing->{package_defined_in} and cannot be created again in $package_defined_in");
     }
 
-    $args{constraint} = delete($args{where})       if exists $args{where};
+    $args{constraint} = delete $args{where}        if exists $args{where};
     $args{optimized}  = delete $args{optimized_as} if exists $args{optimized_as};
 
     my $constraint;
     if($mode eq 'subtype'){
-        my $parent = delete($args{as})
-            or confess('A subtype cannot consist solely of a name, it must have a parent');
-
         $constraint = find_or_create_isa_type_constraint($parent)->create_child_type(%args);
     }
     else{
@@ -398,7 +403,7 @@ sub find_or_parse_type_constraint {
 }
 
 sub find_or_create_does_type_constraint{
-    my $type = find_or_parse_type_constriant(@_) || role_type(@_);
+    my $type = find_or_parse_type_constraint(@_) || role_type(@_);
 
     if($type->{type} && $type->{type} ne 'Role'){
         Carp::cluck("$type is not a role type");