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 {