package Mouse::Util::TypeConstraints;
-use Mouse::Util qw(does_role not_supported); # enables strict and warnings
+use Mouse::Util; # enables strict and warnings
use Carp ();
use Scalar::Util ();
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{
# RoleType
return _create_type 'subtype', $name => (
as => 'Object',
- optimized_as => sub { Scalar::Util::blessed($_[0]) && does_role($_[0], $role) },
+ optimized_as => sub {
+ return Scalar::Util::blessed($_[0])
+ && Mouse::Util::does_role($_[0], $role);
+ },
);
}
$name = shift;
}
- %valid = map{ $_ => undef } (@_ == 1 && ref($_[0]) eq 'ARRAY' ? @{$_[0]} : @_);
+ %valid = map{ $_ => undef }
+ (@_ == 1 && ref($_[0]) eq 'ARRAY' ? @{$_[0]} : @_);
# EnumType
return _create_type 'subtype', $name => (
as => 'Str',
- optimized_as => sub{ defined($_[0]) && !ref($_[0]) && exists $valid{$_[0]} },
+ optimized_as => sub{
+ return defined($_[0]) && !ref($_[0]) && exists $valid{$_[0]};
+ },
);
}
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};
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{
=head1 VERSION
-This document describes Mouse version 0.63
+This document describes Mouse version 0.71
=head2 SYNOPSIS