Checking in changes prior to tagging of version 0.39. Changelog diff is:
[gitmo/Mouse.git] / lib / Mouse / Util / TypeConstraints.pm
index dde6dbb..56d4734 100644 (file)
@@ -9,7 +9,8 @@ use Mouse::Exporter;
 
 Mouse::Exporter->setup_import_methods(
     as_is => [qw(
-        as where message from via
+        as where message optimize_as
+        from via
         type subtype coerce class_type role_type enum
         find_type_constraint
     )],
@@ -19,15 +20,10 @@ Mouse::Exporter->setup_import_methods(
 
 my %TYPE;
 
-sub as ($) {
-    return(as => $_[0]);
-}
-sub where (&) {
-    return(where => $_[0])
-}
-sub message (&) {
-    return(message => $_[0])
-}
+sub as          ($) { (as => $_[0]) }
+sub where       (&) { (where => $_[0]) }
+sub message     (&) { (message => $_[0]) }
+sub optimize_as (&) { (optimize_as => $_[0]) }
 
 sub from    { @_ }
 sub via (&) { $_[0] }
@@ -368,7 +364,16 @@ sub _parse_type{
         }
     }
     if($i - $start){
-        push @list, _find_or_create_regular_type(substr $spec, $start, $i - $start);
+        my $type = _find_or_create_regular_type( substr $spec, $start, $i - $start );
+
+        if(defined $type){
+            push @list, $type;
+        }
+        elsif($start != 0) {
+            # RT #50421
+            # create a new class type
+            push @list, class_type( substr $spec, $start, $i - $start );
+        }
     }
 
     if(@list == 0){
@@ -403,12 +408,7 @@ sub find_or_parse_type_constraint {
 }
 
 sub find_or_create_does_type_constraint{
-    my $type = find_or_parse_type_constraint(@_) || role_type(@_);
-
-    if($type->{type} && $type->{type} ne 'Role'){
-        Carp::cluck("$type is not a role type");
-    }
-    return $type;
+    return find_or_parse_type_constraint(@_) || role_type(@_);
 }
 
 sub find_or_create_isa_type_constraint {
@@ -423,6 +423,10 @@ __END__
 
 Mouse::Util::TypeConstraints - Type constraint system for Mouse
 
+=head1 VERSION
+
+This document describes Mouse version 0.39
+
 =head2 SYNOPSIS
 
   use Mouse::Util::TypeConstraints;