# Because Mouse::Util is loaded first in all the Mouse sub-modules,
# XS loader is placed here, not in Mouse.pm.
- our $VERSION = '0.40_08';
+ our $VERSION = '0.42';
my $xs = !(exists $INC{'Mouse/PurePerl.pm'} || $ENV{MOUSE_PUREPERL});
if($xs){
- local $@;
-
# XXX: XSLoader tries to get the object path from caller's file name
# $hack_mouse_file fools its mechanism
*MOUSE_XS = sub(){ $xs };
}
-
use Carp ();
use Scalar::Util ();
require mro;
$get_linear_isa = \&mro::get_linear_isa;
} else {
- my $e = do {
- local $@;
- eval { require MRO::Compat };
- $@;
- };
- if (!$e) {
- $get_linear_isa = \&mro::get_linear_isa;
- } else {
# VVVVV CODE TAKEN FROM MRO::COMPAT VVVVV
- my $_get_linear_isa_dfs; # this recurses so it isn't pretty
- $_get_linear_isa_dfs = sub ($;$){
- no strict 'refs';
-
- my $classname = shift;
-
- my @lin = ($classname);
- my %stored;
- foreach my $parent (@{"$classname\::ISA"}) {
- my $plin = $_get_linear_isa_dfs->($parent);
- foreach my $p(@$plin) {
- next if exists $stored{$p};
- push(@lin, $p);
- $stored{$p} = 1;
- }
+ my $_get_linear_isa_dfs; # this recurses so it isn't pretty
+ $_get_linear_isa_dfs = sub {
+ my($classname) = @_;
+
+ my @lin = ($classname);
+ my %stored;
+
+ no strict 'refs';
+ foreach my $parent (@{"$classname\::ISA"}) {
+ my $plin = $_get_linear_isa_dfs->($parent);
+ foreach my $p(@$plin) {
+ next if exists $stored{$p};
+ push(@lin, $p);
+ $stored{$p} = 1;
}
- return \@lin;
- };
+ }
+ return \@lin;
+ };
# ^^^^^ CODE TAKEN FROM MRO::COMPAT ^^^^^
- $get_linear_isa = $_get_linear_isa_dfs;
- }
+
+ 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.
+ $get_linear_isa = sub ($;$){
+ my($classname, $type) = @_;
+ package # hide from PAUSE
+ Class::C3;
+ if(!defined $type){
+ our %MRO;
+ $type = exists $MRO{$classname} ? 'c3' : 'dfs';
+ }
+ return $type eq 'c3'
+ ? [calculateMRO($classname)]
+ : $_get_linear_isa_dfs->($classname);\r
+ };
}
*get_linear_isa = $get_linear_isa;
sub is_class_loaded;
-
sub apply_all_roles {
my $applicant = Scalar::Util::blessed($_[0])
? shift # instance
return join q{, }, @items, "and $tail";
}
-
# common utilities
sub not_supported{
*does = \&does_role; # alias
1;
-
__END__
=head1 NAME
=head1 VERSION
-This document describes Mouse version 0.40_08
+This document describes Mouse version 0.42
=head1 IMPLEMENTATIONS FOR
=head3 C<get_code_info>
-=head1 UTILITIES FOR MOUSE
+=head1 Mouse specific utilities
=head3 C<not_supported>
+=head3 C<get_code_package>
+
+=head3 C<get_code_ref>
+
=head1 SEE ALSO
L<Moose::Util>