From: Dave Rolsky Date: Thu, 7 May 2009 02:47:37 +0000 (-0500) Subject: some style tweaks to t0m's change to the metaclass compat fixing code. X-Git-Tag: 0.78~21 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=cb31112162b3b3078bbc8f5395ed557e1438ac22;p=gitmo%2FMoose.git some style tweaks to t0m's change to the metaclass compat fixing code. --- diff --git a/lib/Moose/Meta/Class.pm b/lib/Moose/Meta/Class.pm index b1c642d..25a9fa6 100644 --- a/lib/Moose/Meta/Class.pm +++ b/lib/Moose/Meta/Class.pm @@ -308,18 +308,20 @@ sub _fix_metaclass_incompatibility { my $meta = Class::MOP::Class->initialize($super); my @all_supers = $meta->linearized_isa; - shift(@all_supers); # Discard self - my @super_metas_to_fix = ( $meta ); - - # We need to check&fix the imediate superclass, and if its @ISA contains - # a class without a metaclass instance, followed by a class with a - # metaclass instance, init a metaclass instance for classes without - # one and fix compat up to and including the class which was already - # initialized. + shift @all_supers; + + my @super_metas_to_fix = ($meta); + + # We need to check & fix the immediate superclass. If its @ISA + # contains a class without a metaclass instance, followed by a + # class _with_ a metaclass instance, init a metaclass instance + # for classes without one and fix compat up to and including + # the class which was already initialized. my $idx = first_index { Class::MOP::class_of($_) } @all_supers; - push(@super_metas_to_fix, - map { Class::MOP::Class->initialize($_) } @all_supers[0..$idx] - ) if ($idx >= 0); + + push @super_metas_to_fix, + map { Class::MOP::Class->initialize($_) } @all_supers[ 0 .. $idx ] + if $idx >= 0; foreach my $super_meta (@super_metas_to_fix) { $self->_fix_one_incompatible_metaclass($super_meta); @@ -338,6 +340,7 @@ sub _fix_one_incompatible_metaclass { . $self->name . ", it isn't pristine" ); } + $self->_reconcile_with_superclass_meta($meta); }