have ClassName check use is_class_loaded
Shawn M Moore [Tue, 10 Jun 2008 04:33:56 +0000 (04:33 +0000)]
lib/Mouse.pm
lib/Mouse/TypeRegistry.pm

index dae207d..3136d35 100644 (file)
@@ -82,6 +82,8 @@ do {
 
 sub load_class {
     my $class = shift;
+    return if ref($class);
+    return unless defined($class) && length($class);
 
     return 1 if is_class_loaded($class);
 
index 6568990..c5ce7ed 100644 (file)
@@ -18,6 +18,7 @@ sub optimized_constraints {
         Num        => sub { !ref($_) && looks_like_number($_) },
         Int        => sub { defined($_) && !ref($_) && /^-?[0-9]+$/ },
         Str        => sub { defined($_) && !ref($_) },
+        ClassName  => sub { Mouse::is_class_loaded($_) },
         Ref        => sub { ref($_) },
 
         ScalarRef  => sub { ref($_) eq 'SCALAR' },
@@ -36,35 +37,6 @@ sub optimized_constraints {
         },
 
         Object     => sub { blessed($_) && blessed($_) ne 'Regexp' },
-
-        ClassName  => sub {
-            return if ref($_);
-            return unless defined($_) && length($_);
-
-            # walk the symbol table tree to avoid autovififying
-            # \*{${main::}{"Foo::"}} == \*main::Foo::
-
-            my $pack = \*::;
-            foreach my $part (split('::', $_)) {
-                return unless exists ${$$pack}{"${part}::"};
-                $pack = \*{${$$pack}{"${part}::"}};
-            }
-
-            # check for $VERSION or @ISA
-            return 1 if exists ${$$pack}{VERSION}
-                    && defined *{${$$pack}{VERSION}}{SCALAR};
-            return 1 if exists ${$$pack}{ISA}
-                    && defined *{${$$pack}{ISA}}{ARRAY};
-
-            # check for any method
-            foreach ( keys %{$$pack} ) {
-                next if substr($_, -2, 2) eq '::';
-                return 1 if defined *{${$$pack}{$_}}{CODE};
-            }
-
-            # fail
-            return;
-        },
     };
 }