unless ( ($slot->{cumulative_gen}||0) == $my_gen ) {
- # remove ourselves from ISA
- shift @full_ISA;
-
# reset
%$slot = (
class => $class,
- isa => [
+ isa => { map { $_ => 1 } @full_ISA },
+ linear_isa => [
@{ $mro_recursor_stack->{cache}{$stack_cache_key}{linear_isa} }
[ 1 .. $#{$mro_recursor_stack->{cache}{$stack_cache_key}{linear_isa}} ]
],
cumulative_gen => $my_gen,
);
+ # remove ourselves from ISA
+ shift @full_ISA;
+
# ensure the cache is populated for the parents, code below can then
# efficiently operate over the query_cache directly
describe_class_methods($_) for reverse @full_ISA;
# check that describe_class_methods returns the right stuff
# ( on the simpler class )
- my $expected_AttrTest_ISA = [qw(
+ my $expected_AttrTest_linear_ISA = [qw(
DBICTest::SomeParentClass
DBICTest::SomeGrandParentClass
DBICTest::AnotherParentClass
DBIx::Class::MethodAttributes
)];
+ my $expected_AttrTest_full_ISA = { map { $_ => 1 } (
+ qw( UEBERVERSAL UNIVERSAL DBICTest::AttrTest ),
+ @$expected_AttrTest_linear_ISA,
+ )};
+
my $expected_desc = {
class => "DBICTest::AttrTest",
require Math::BigInt;
my $gen = Math::BigInt->new(0);
- $gen += DBIx::Class::_Util::get_real_pkg_gen($_) for (
- 'UEBERVERSAL',
- 'UNIVERSAL',
- 'DBICTest::AttrTest',
- @$expected_AttrTest_ISA,
- );
+ $gen += DBIx::Class::_Util::get_real_pkg_gen($_)
+ for keys %$expected_AttrTest_full_ISA;
$gen;
},
type => 'c3',
is_c3 => 1,
},
- isa => $expected_AttrTest_ISA,
+ linear_isa => $expected_AttrTest_linear_ISA,
+ isa => $expected_AttrTest_full_ISA,
methods => {
FETCH_CODE_ATTRIBUTES => [
{
# due to DFS the last 2 entries of ISA and the VALID_DBIC_CODE_ATTRIBUTE
# sourcing-list will change places
splice @$_, -2, 2, @{$_}[-1, -2]
- for $V_D_C_A_stack, $expected_AttrTest_ISA;
+ for $V_D_C_A_stack, $expected_AttrTest_linear_ISA;
is_deeply (
# work around taint, see TODO below
class => 'UEBERVERSAL',
mro => { is_c3 => 0, type => 'dfs' },
- isa => [],
+ isa => { UEBERVERSAL => 1 },
+ linear_isa => [],
methods => {
ueber => $expected_desc->{methods}{ueber}
},