Move is_valid_class_name into XS
[gitmo/Mouse.git] / lib / Mouse / Util.pm
index 3ffa375..a819618 100644 (file)
@@ -38,7 +38,7 @@ BEGIN{
     # Because Mouse::Util is loaded first in all the Mouse sub-modules,
     # XS loader is placed here, not in Mouse.pm.
 
-    our $VERSION = '0.49';
+    our $VERSION = '0.50_03';
 
     my $xs = !(exists $INC{'Mouse/PurePerl.pm'} || $ENV{MOUSE_PUREPERL});
 
@@ -74,12 +74,16 @@ use constant _MOUSE_VERBOSE => !!$ENV{MOUSE_VERBOSE};
 # it must be 'require', not 'use', because Mouse::Meta::Module depends on Mouse::Util
 require Mouse::Meta::Module; # for the entities of metaclass cache utilities
 
-BEGIN {
+# aliases
+{
     *class_of                    = \&Mouse::Meta::Module::_class_of;
     *get_metaclass_by_name       = \&Mouse::Meta::Module::_get_metaclass_by_name;
     *get_all_metaclass_instances = \&Mouse::Meta::Module::_get_all_metaclass_instances;
     *get_all_metaclass_names     = \&Mouse::Meta::Module::_get_all_metaclass_names;
 
+    *Mouse::load_class           = \&load_class;
+    *Mouse::is_class_loaded      = \&is_class_loaded;
+
     # is-a predicates
     #generate_isa_predicate_for('Mouse::Meta::TypeConstraint' => 'is_a_type_constraint');
     #generate_isa_predicate_for('Mouse::Meta::Class'          => 'is_a_metaclass');
@@ -193,17 +197,7 @@ BEGIN {
 sub get_code_info;
 sub get_code_package;
 
-# taken from Class/MOP.pm
-sub is_valid_class_name {
-    my $class = shift;
-
-    return 0 if ref($class);
-    return 0 unless defined($class);
-
-    return 1 if $class =~ /\A \w+ (?: :: \w+ )* \z/xms;
-
-    return 0;
-}
+sub is_valid_class_name;
 
 # taken from Class/MOP.pm
 sub load_first_existing_class {
@@ -244,12 +238,12 @@ sub _try_load_one_class {
 
     return undef if $is_class_loaded_cache{$class} ||= is_class_loaded($class);
 
-    my $file = $class . '.pm';
-    $file =~ s{::}{/}g;
+    $class  =~ s{::}{/}g;
+    $class .= '.pm';
 
     return do {
         local $@;
-        eval { require($file) };
+        eval { require $class };
         $@;
     };
 }
@@ -260,7 +254,7 @@ sub load_class {
     my $e = _try_load_one_class($class);
     Carp::confess "Could not load class ($class) because : $e" if $e;
 
-    return 1;
+    return $class;
 }
 
 sub is_class_loaded;
@@ -311,15 +305,7 @@ sub english_list {
 }
 
 sub quoted_english_list {
-    return qq{'$_[0]'} if @_ == 1;
-
-    my @items = sort @_;
-
-    return qq{'$items[0]' and '$items[1]'} if @items == 2;
-
-    my $tail = pop @items;
-
-    return join q{, }, (map{ qq{'$_'} } @items), qq{and '$tail'};
+    return english_list(map { qq{'$_'} } @_);
 }
 
 # common utilities
@@ -344,14 +330,15 @@ sub dump :method {
 
     require 'Data/Dumper.pm'; # we don't want to create its namespace
     my $dd = Data::Dumper->new([$self]);
-    $dd->Maxdepth(defined($maxdepth) ? $maxdepth : 2);
+    $dd->Maxdepth(defined($maxdepth) ? $maxdepth : 3);
     $dd->Indent(1);
     return $dd->Dump();
 }
 
 # general does() method
-sub does :method;
-*does = \&does_role; # alias
+sub does :method {
+    goto &does_role;
+}
 
 1;
 __END__
@@ -362,7 +349,7 @@ Mouse::Util - Features, with or without their dependencies
 
 =head1 VERSION
 
-This document describes Mouse version 0.49
+This document describes Mouse version 0.50_03
 
 =head1 IMPLEMENTATIONS FOR