Checking in changes prior to tagging of version 0.70.
[gitmo/Mouse.git] / lib / Mouse / Util / TypeConstraints.pm
index f786e09..469b2ae 100644 (file)
@@ -150,9 +150,18 @@ sub _create_type{
 
         if($TYPE{$name}){
             my $that = $TYPE{$name}->{package_defined_in} || __PACKAGE__;
-            ($this eq $that) or Carp::croak(
-                "The type constraint '$name' has already been created in $that and cannot be created again in $this"
-            );
+            if($this ne $that) {
+                my $note = '';
+                if($that eq __PACKAGE__) {
+                    $note = sprintf " ('%s' is %s type constraint)",
+                        $name,
+                        scalar(grep { $name eq $_ } list_all_builtin_type_constraints())
+                            ? 'a builtin'
+                            : 'an implicitly created';
+                }
+                Carp::croak("The type constraint '$name' has already been created in $that"
+                          . " and cannot be created again in $this" . $note);
+            }
         }
     }
     else{
@@ -361,8 +370,7 @@ sub _parse_type {
 
 sub find_type_constraint {
     my($spec) = @_;
-    return $spec if Mouse::Util::is_a_type_constraint($spec);
-    return undef if !defined $spec;
+    return $spec if Mouse::Util::is_a_type_constraint($spec) or not defined $spec;
 
     $spec =~ s/\s+//g;
     return $TYPE{$spec};
@@ -380,8 +388,7 @@ sub register_type_constraint {
 
 sub find_or_parse_type_constraint {
     my($spec) = @_;
-    return $spec if Mouse::Util::is_a_type_constraint($spec);
-    return undef if !defined $spec;
+    return $spec if Mouse::Util::is_a_type_constraint($spec) or not defined $spec;
 
     $spec =~ s/\s+//g;
     return $TYPE{$spec} || do{
@@ -417,7 +424,7 @@ Mouse::Util::TypeConstraints - Type constraint system for Mouse
 
 =head1 VERSION
 
-This document describes Mouse version 0.64
+This document describes Mouse version 0.70
 
 =head2 SYNOPSIS