stas 2004/02/21 18:29:40
Modified: lib/ModPerl WrapXS.pm
Log:
MethodLookup:
- fix an inheritance check
- add a fall-through code when none of the matches fits the first argument
Revision Changes Path
1.69 +11 -1 modperl-2.0/lib/ModPerl/WrapXS.pm
Index: WrapXS.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/lib/ModPerl/WrapXS.pm,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -u -r1.68 -r1.69
--- WrapXS.pm 13 Feb 2004 22:33:01 -0000 1.68
+++ WrapXS.pm 22 Feb 2004 02:29:40 -0000 1.69
@@ -865,20 +865,30 @@
if (@items == 1) {
my $module = $items[0]->[MODULE];
my $hint = "To use method '$method' add:\n" . "\tuse $module ();\n";
+ # we should really check that the method matches the object if
+ # any was passed, but it may not always work
return ($hint, $module);
}
else {
if (defined $object) {
my $class = ref $object || $object;
for my $item (@items) {
+ # real class or inheritance
if ($class eq $item->[OBJECT] or
- (ref($object) && $object->isa($class))) { # inheritance
+ (ref($object) && $object->isa($item->[OBJECT]))) {
my $module = $item->[MODULE];
my $hint = "To use method '$method' add:\n" .
"\tuse $module ();\n";
return ($hint, $module);
}
}
+ # fall-through
+ local $" = ", ";
+ my @modules = map $_->[MODULE], @items;
+ my $hint = "Several modules (@modules) contain method '$method' " .
+ "but none of them matches class '$class';\n";
+ return ($hint);
+
}
else {
my %modules = map { $_->[MODULE] => 1 } @items;