X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FTypeRegistry.pm;h=dccc736b76789eed1bf892f8cf30a23c1917f50c;hb=07d18a6b15d6d937a78ecd2dd24f5375f0096766;hp=70453828de2992b34c87f45d73807978e9e7bdb4;hpb=6c169c5063b77a791818f5db2c1da3bd9b47d3f9;p=gitmo%2FMouse.git diff --git a/lib/Mouse/TypeRegistry.pm b/lib/Mouse/TypeRegistry.pm index 7045382..dccc736 100644 --- a/lib/Mouse/TypeRegistry.pm +++ b/lib/Mouse/TypeRegistry.pm @@ -1,4 +1,3 @@ -#!/usr/bin/env perl package Mouse::TypeRegistry; use strict; use warnings; @@ -92,10 +91,13 @@ sub _subtype { if (my $type = $SUBTYPE{$name}) { Carp::croak "The type constraint '$name' has already been created, cannot be created again in $pkg"; }; - my $as = $conf{as}; - my $stuff = $conf{where} || $SUBTYPE{$as}; - - $SUBTYPE{$name} = $stuff; + my $stuff = $conf{where} || do { $SUBTYPE{delete $conf{as} || 'Any' } }; + my $as = $conf{as} || ''; + if ($as = $SUBTYPE{$as}) { + $SUBTYPE{$name} = sub { $as->($_) && $stuff->($_) }; + } else { + $SUBTYPE{$name} = $stuff; + } } sub _coerce { @@ -124,6 +126,7 @@ sub _class_type { my $pkg = caller(0); my($name, $conf) = @_; my $class = $conf->{class}; + Mouse::load_class($class); _subtype( $name => where => sub { defined $_ && ref($_) eq $class;