X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse.pm;h=4f6e8f9647be01592d3ccf3b3f3be1dfa27a8f4e;hb=6cfa1e5e70616fb102915489c02d8347ffa912fb;hp=e03e12a7d7dac90e27cb944a3386f3e192394123;hpb=a81cc7b83f688ff21284b599a81e14a44bcdf401;p=gitmo%2FMouse.git diff --git a/lib/Mouse.pm b/lib/Mouse.pm index e03e12a..4f6e8f9 100644 --- a/lib/Mouse.pm +++ b/lib/Mouse.pm @@ -8,9 +8,10 @@ our $VERSION = '0.30'; use Carp 'confess'; use Scalar::Util 'blessed'; -use Mouse::Util; +use Mouse::Util qw(load_class is_class_loaded); use Mouse::Meta::Attribute; +use Mouse::Meta::Module; # class_of() use Mouse::Meta::Class; use Mouse::Object; use Mouse::Util::TypeConstraints; @@ -188,61 +189,6 @@ sub unimport { } } -sub load_class { - my $class = shift; - - if (!Mouse::Util::is_valid_class_name($class)) { - my $display = defined($class) ? $class : 'undef'; - confess "Invalid class name ($display)"; - } - - return 1 if is_class_loaded($class); - - (my $file = "$class.pm") =~ s{::}{/}g; - - eval { CORE::require($file) }; - confess "Could not load class ($class) because : $@" if $@; - - return 1; -} - -my %is_class_loaded_cache; -sub is_class_loaded { - my $class = shift; - - return 0 if ref($class) || !defined($class) || !length($class); - - return 1 if exists $is_class_loaded_cache{$class}; - - # walk the symbol table tree to avoid autovififying - # \*{${main::}{"Foo::"}} == \*main::Foo:: - - my $pack = \*::; - foreach my $part (split('::', $class)) { - return 0 unless exists ${$$pack}{"${part}::"}; - $pack = \*{${$$pack}{"${part}::"}}; - } - - # check for $VERSION or @ISA - return ++$is_class_loaded_cache{$class} if exists ${$$pack}{VERSION} - && defined *{${$$pack}{VERSION}}{SCALAR}; - return ++$is_class_loaded_cache{$class} if exists ${$$pack}{ISA} - && defined *{${$$pack}{ISA}}{ARRAY}; - - # check for any method - foreach ( keys %{$$pack} ) { - next if substr($_, -2, 2) eq '::'; - return ++$is_class_loaded_cache{$class} if defined *{${$$pack}{$_}}{CODE}; - } - - # fail - return 0; -} - -sub class_of { - return Mouse::Meta::Class::class_of($_[0]); -} - 1; __END__