Make the perl version of get_all_package_symbols handle stub functions.
Florian Ragwitz [Thu, 4 Dec 2008 02:03:45 +0000 (02:03 +0000)]
This also fixes the pure perl version of get_method_map, as it uses
get_all_package_symbols internally.

lib/Class/MOP/Package.pm

index a1cf6a6..8a5ec01 100644 (file)
@@ -4,6 +4,7 @@ package Class::MOP::Package;
 use strict;
 use warnings;
 
+use B;
 use Scalar::Util 'blessed';
 use Carp         'confess';
 
@@ -293,7 +294,12 @@ sub get_all_package_symbols {
                 ? ( $_ => \&{$pkg ||= $self->name . "::$_"} )
                 : ( (*{$namespace->{$_}}{CODE}) # the extra parents prevent breakage on 5.8.2
                     ? ( $_ => *{$namespace->{$_}}{CODE} )
-                    : () ) )
+                    : (do {
+                        my $sym = B::svref_2object(\$namespace->{$_});
+                        my $svt = ref $sym if $sym;
+                        ($sym && ($svt eq 'B::PV' || $svt eq 'B::PVIV'))
+                            ? ($_ => ($pkg ||= $self->name)->can($_))
+                            : () }) ) )
         } keys %$namespace;
     } else {
         return map {