#sub does_metaclass_exist { defined $METAS{$_[0]} }
#sub remove_metaclass_by_name { delete $METAS{$_[0]} }
+sub name;
-
-sub name { $_[0]->{package} }
+sub namespace;
# The followings are Class::MOP specific methods
sub get_attribute_list{ keys %{$_[0]->{attributes}} }
sub remove_attribute { delete $_[0]->{attributes}->{$_[1]} }
-sub namespace{
- my $name = $_[0]->{package};
- no strict 'refs';
- return \%{ $name . '::' };
-}
-
sub add_method {
my($self, $name, $code) = @_;
my $method_metaclass = $self->method_metaclass;
load_class($method_metaclass);
- my $package = $self->name;
- return $method_metaclass->new(
- body => $package->can($method_name),
- name => $method_name,
- package => $package,
+ return $method_metaclass->wrap(
+ body => $self->get_method_body($method_name),
+ name => $method_name,
+ package => $self->name,
+ associated_metaclass => $self,
);
}