Remove pointless shebang in each module
[gitmo/Mouse.git] / lib / Mouse / TypeRegistry.pm
index 7045382..dccc736 100644 (file)
@@ -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;