Class::MOP::Class->meta->add_attribute(
Class::MOP::Attribute->new('%:methods' => (
reader => {
- # NOTE:
- # as with the $VERSION and $AUTHORITY above
- # sometimes we don't/can't store directly
- # inside the instance, so we need the accessor
- # to just DWIM
'get_method_map' => sub {
my $self = shift;
- # FIXME:
- # there is a faster/better way
- # to do this, I am sure :)
- return +{
- map {
- $_ => $self->get_method($_)
- } grep {
- $self->has_method($_)
- } $self->list_all_package_symbols
- };
+ my $map = $self->{'%:methods'};
+
+ foreach my $symbol ($self->list_all_package_symbols('CODE')) {
+ my $code = $self->get_package_symbol('&' . $symbol);
+
+ next if exists $map->{$symbol} &&
+ $map->{$symbol}->body == $code;
+
+ $map->{$symbol} = $self->method_metaclass->wrap($code);
+ }
+
+ return $map;
}
},
- init_arg => '!............( DO NOT DO THIS )............!',
- default => sub { \undef }
+ default => sub { {} }
))
);