Lazy loading of Class::C3
gfx [Sun, 20 Dec 2009 07:07:53 +0000 (16:07 +0900)]
lib/Mouse/Util.pm

index e94ca84..ddad56d 100644 (file)
@@ -138,8 +138,6 @@ BEGIN {
         };
 #       ^^^^^   CODE TAKEN FROM MRO::COMPAT   ^^^^^
 
-        eval{ require Class::C3 };
-
         # MRO::Compat::__get_linear_isa has no prototype, so
         # we define a prototyped version for compatibility with core's
         # See also MRO::Compat::__get_linear_isa.
@@ -151,9 +149,16 @@ BEGIN {
                 our %MRO;
                 $type = exists $MRO{$classname} ? 'c3' : 'dfs';
             }
-            return $type eq 'c3'
-                ? [calculateMRO($classname)]
-                : $_get_linear_isa_dfs->($classname);\r
+            if($type eq 'c3'){
+                require Class::C3;
+                return [ calculateMRO($classname) ];
+            }
+            elsif($type eq 'dfs'){
+                return $_get_linear_isa_dfs->($classname);
+            }
+            else{
+                Carp::croak("Unknown mro type '$type'");
+            }
         };
     }