]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/commitdiff
Allow returning undef from the autocoercion mapper
authorVincent Pit <vince@profvince.com>
Mon, 2 Aug 2010 09:59:09 +0000 (11:59 +0200)
committerVincent Pit <vince@profvince.com>
Mon, 2 Aug 2010 09:59:49 +0000 (11:59 +0200)
lib/LaTeX/TikZ/Meta/TypeConstraint/Autocoerce.pm

index 0dc4d9d07aba4f77a1dc60bdc9c2dc78331b3b69..cdbc69c083c71a60cd759e7019a45bba4e137e45 100644 (file)
@@ -28,6 +28,9 @@ extends any_moose('Meta::TypeConstraint');
 
 =head2 C<mapper>
 
+A code reference that maps an object class name to the name of the package in which the coercion can be found, or C<undef> to disable coercion for this class name.
+It is called with the type constraint object as first argument, followed by the class name.
+
 =cut
 
 has 'mapper' => (
@@ -115,22 +118,24 @@ around 'coerce' => sub {
  # If $thing isn't even an object, don't bother trying to autoload a coercion
  my $class = blessed($thing);
  if (defined $class) {
-  # Find the file to autoload
-  my $mapper = $tc->mapper;
-  my $pm = $class = $tc->$mapper($class);
-  $pm =~ 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;
-   };
+  $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;
+    };
+   }
   }
  }