X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FClass.pm;h=a1fc1984c5da26a977d9d2a268529b70d4ff2fa7;hb=59b510466ab075526c10a9c0555645b5f916ef02;hp=2dbd9f2e3863ed849b6287ef3e572bd5af36f6c8;hpb=20b0fc6fc5e739cc02e049b4468570a88e6453ed;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Class.pm b/lib/Class/MOP/Class.pm index 2dbd9f2..a1fc198 100644 --- a/lib/Class/MOP/Class.pm +++ b/lib/Class/MOP/Class.pm @@ -8,6 +8,7 @@ use Class::MOP::Instance; use Class::MOP::Method::Wrapped; use Class::MOP::Method::Accessor; use Class::MOP::Method::Constructor; +use Class::MOP::Method::Meta; use Class::MOP::MiniTrait; use Carp 'confess'; @@ -124,6 +125,17 @@ sub _real_ref_name { : ref $self; } +sub _add_meta_method { + my $self = shift; + $self->add_method( + 'meta' => Class::MOP::Method::Meta->wrap( + name => 'meta', + package_name => $self->name, + associated_metaclass => $self, + ) + ); +} + sub _new { my $class = shift; @@ -518,18 +530,7 @@ sub create { $meta->_instantiate_module( $options{version}, $options{authority} ); - # FIXME totally lame - $meta->add_method('meta' => sub { - if (Class::MOP::DEBUG_NO_META()) { - my ($self) = @_; - if (my $meta = try { $self->SUPER::meta }) { - return $meta if $meta->isa('Class::MOP::Class'); - } - confess "'meta' method called by MOP internals" - if caller =~ /Class::MOP|metaclass/; - } - $class->initialize(ref($_[0]) || $_[0]); - }) unless $options{no_meta}; + $meta->_add_meta_method unless $options{no_meta}; $meta->superclasses(@{$options{superclasses}}) if exists $options{superclasses};