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';
: 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;
$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};