X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FMethod%2FInlined.pm;h=999aa17b439e242a4591d8fe4989d30e2f84f035;hb=46c48e085637bb0a61e03de193e3aad510964f88;hp=96899ef1125868c2d94eebf80da3c7562d8ec562;hpb=f6d801a0d846a52beb59adf4bb48cd15c30a1840;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Method/Inlined.pm b/lib/Class/MOP/Method/Inlined.pm index 96899ef..999aa17 100644 --- a/lib/Class/MOP/Method/Inlined.pm +++ b/lib/Class/MOP/Method/Inlined.pm @@ -34,6 +34,22 @@ sub can_be_inlined { my $metaclass = $self->associated_metaclass; my $class = $metaclass->name; + # If we don't find an inherited method, this is a rather weird + # case where we have no method in the inheritance chain even + # though we're expecting one to be there + my $inherited_method + = $metaclass->find_next_method_by_name( $self->name ); + + if ( $inherited_method + && $inherited_method->isa('Class::MOP::Method::Wrapped') ) { + warn "Not inlining '" + . $self->name + . "' for $class since it " + . "has method modifiers which would be lost if it were inlined\n"; + + return 0; + } + my $expected_class = $self->_expected_method_class or return 1; @@ -58,15 +74,6 @@ sub can_be_inlined { return 1 if refaddr($expected_method) == refaddr($actual_method); - # If we don't find an inherited method, this is a rather weird - # case where we have no method in the inheritance chain even - # though we're expecting one to be there - # - # this returns 1 for backwards compatibility for now - my $inherited_method - = $metaclass->find_next_method_by_name( $self->name ) - or return 1; - # otherwise we have to check that the actual method is an inlined # version of what we're expecting if ( $inherited_method->isa(__PACKAGE__) ) { @@ -96,12 +103,6 @@ sub can_be_inlined { . " call to $class->meta->make_immutable\n"; } - $warning - .= " ('" - . $self->name - . "' has method modifiers which would be lost if it were inlined)\n" - if $inherited_method->isa('Class::MOP::Method::Wrapped'); - warn $warning; return 0;