+ # $orig.
+
+ # First, check whether $thing is already of the right kind.
+ return $thing if $tc->check($thing);
+
+ # If $thing isn't even an object, don't bother trying to autoload a coercion
+ my $class = blessed($thing);
+ if (defined $class) {
+ $class = $tc->mapper->($tc, $class);
+
+ if (defined $class) {
+ # Find the file to autoload
+ (my $pm = $class) =~ s{::}{/}g;
+ $pm .= '.pm';
+
+ unless ($INC{$pm}) { # Not loaded yet
+ local $@;
+ eval {
+ # We die often here, even though we're not really interested in the error.
+ # However, if a die handler is set (e.g. to \&Carp::confess), this can get
+ # very slow. Resetting the handler shows a 10% total time improvement for
+ # the geodyn app.
+ local $SIG{__DIE__};
+ require $pm;
+ };
+ }
+ }
+ }