return $instance;
}
-
# FIXME:
# This is ugly
sub get_method_map {
my $self = shift;
+
+ if (defined $self->{'$!_package_cache_flag'} &&
+ $self->{'$!_package_cache_flag'} == Class::MOP::check_package_cache_flag()) {
+ return $self->{'%!methods'};
+ }
+
my $map = $self->{'%!methods'};
my $class_name = $self->name;
defined $map->{$symbol} &&
$map->{$symbol}->body == $code;
- my $gv = B::svref_2object($code)->GV;
+ my ($pkg, $name) = Class::MOP::get_code_info($code);
- my $pkg = $gv->STASH->NAME;
- if ($pkg->can('meta')
+ if ($pkg->can('meta')
# NOTE:
# we don't know what ->meta we are calling
- # here, so we need to be careful cause it
- # just might blow up at us, or just complain
- # loudly (in the case of Curses.pm) so we
+ # here, so we need to be careful cause it
+ # just might blow up at us, or just complain
+ # loudly (in the case of Curses.pm) so we
# just be a little overly cautious here.
# - SL
&& eval { no warnings; blessed($pkg->meta) }
#next unless $self->does_role($role);
}
else {
- next if ($gv->STASH->NAME || '') ne $class_name &&
- ($gv->NAME || '') ne '__ANON__';
+ next if ($pkg || '') ne $class_name &&
+ ($name || '') ne '__ANON__';
+
}
$map->{$symbol} = $method_metaclass->wrap($code);
my @args = @_;
no warnings 'redefine';
if ($Moose::INNER_SLOT{$_super_package}) {
- local *{$Moose::INNER_SLOT{$_super_package}} = sub {
- local *{$Moose::INNER_SLOT{$_super_package}} = sub {};
+ local *{$Moose::INNER_SLOT{$_super_package}} = sub {
+ local *{$Moose::INNER_SLOT{$_super_package}} = sub {};
$method->(@args);
};
return $super->(@args);
- }
- else {
+ }
+ else {
return $super->(@args);
}
});