From: gfx Date: Thu, 3 Dec 2009 03:17:53 +0000 (+0900) Subject: Fix a bug that segv caused on 5.6.2 with -traits X-Git-Tag: 0.40_09~12 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3bb9e54e87a3e1a353627d470ee22a0a70b33dbf;p=gitmo%2FMouse.git Fix a bug that segv caused on 5.6.2 with -traits --- diff --git a/lib/Mouse/PurePerl.pm b/lib/Mouse/PurePerl.pm index 383c0c8..c0a8e0a 100644 --- a/lib/Mouse/PurePerl.pm +++ b/lib/Mouse/PurePerl.pm @@ -18,15 +18,20 @@ sub is_class_loaded { return 0 if ref($class) || !defined($class) || !length($class); # walk the symbol table tree to avoid autovififying - # \*{${main::}{"Foo::"}} == \*main::Foo:: + # \*{${main::}{"Foo::"}{"Bar::"}} == \*main::Foo::Bar:: my $pack = \%::; foreach my $part (split('::', $class)) { - my $entry = \$pack->{$part . '::'}; + $part .= '::'; + return 0 if !exists $pack->{$part}; + + my $entry = \$pack->{$part}; return 0 if ref($entry) ne 'GLOB'; - $pack = *{$entry}{HASH} or return 0; + $pack = *{$entry}{HASH}; } + return 0 if !%{$pack}; + # check for $VERSION or @ISA return 1 if exists $pack->{VERSION} && defined *{$pack->{VERSION}}{SCALAR} && defined ${ $pack->{VERSION} };