make lack of a meta method testable
[gitmo/Class-MOP.git] / lib / metaclass.pm
index f165b86..02bfb5c 100644 (file)
@@ -6,6 +6,7 @@ use warnings;
 
 use Carp         'confess';
 use Scalar::Util 'blessed';
+use Try::Tiny;
 
 our $VERSION   = '1.08';
 $VERSION = eval $VERSION;
@@ -48,6 +49,14 @@ sub import {
         # since metaclass instances are
         # singletons, this is not really a
         # big deal anyway.
+        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/;
+        }
         $metaclass->initialize((blessed($_[0]) || $_[0]) => %options)
     }) if $should_install;
 }