Don't use the instance method directly from Object -- use meta->construct_instance
[gitmo/MooseX-Singleton.git] / lib / MooseX / Singleton / Meta / Instance.pm
index e9c2522..c0dbc91 100644 (file)
@@ -9,7 +9,14 @@ sub get_singleton_instance {
     my ($self, $instance) = @_;
 
     return $instance if blessed $instance;
-    return $instance->instance;
+
+    # optimization: it's really slow to go through new_object for every access
+    # so return the singleton if we see it already exists, which it will every
+    # single except the first.
+    no strict 'refs';
+    return ${"$instance\::singleton"} if defined ${"$instance\::singleton"};
+
+    return $instance->meta->construct_instance;
 }
 
 sub clone_instance {