Merge 'trunk' into 'Class-C3-PurePerl'
Brandon L Black [Sat, 14 Apr 2007 16:53:42 +0000 (16:53 +0000)]
r30513@brandon-blacks-computer (orig r2154):  blblack | 2007-04-14 08:04:35 -0500
Fix for overloading to method name string, from Ittetsu Miyazaki

ChangeLog
lib/Class/C3.pm
t/21_C3_with_overload.t

index 0959d78..1c32aea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 Revision history for Perl extension Class::C3.
 
+    - Fix for overloading to method name string,
+       from Ittetsu Miyazaki.
+
 0.15_01 Fri, Apr 13, 2007
     - Supports bleadperl + c3 patches (experimental)
 
index 372825a..0b8c826 100644 (file)
@@ -152,6 +152,10 @@ sub _apply_method_dispatch_table {
     ${"${class}::()"} = $MRO{$class}->{has_overload_fallback}
         if $MRO{$class}->{has_overload_fallback};
     foreach my $method (keys %{$MRO{$class}->{methods}}) {
+        if ( $method =~ /^\(/ ) {
+            my $orig = $MRO{$class}->{methods}->{$method}->{orig};
+            ${"${class}::$method"} = $$orig if defined $$orig;
+        }
         *{"${class}::$method"} = $MRO{$class}->{methods}->{$method}->{code};
     }    
 }
index d6bd9b4..80b45a8 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 8;
+use Test::More tests => 9;
 
 BEGIN {
     use_ok('Class::C3');
@@ -30,6 +30,20 @@ BEGIN {
     use warnings;
     use base 'OverloadingTest';
     use Class::C3;
+
+    package BaseTwo;
+    use overload (
+        q{fallback} => 1,
+        q{""}       => 'str', ### character
+    );
+    sub str {
+        return 'BaseTwo str';
+    }
+
+    package OverloadInheritTwo;
+    use Class::C3;
+    use base qw/BaseTwo/;
+
 }
 
 Class::C3::initialize();
@@ -52,5 +66,10 @@ eval {
 ok(!$@, '... this should not throw an exception');
 ok($result, '... and we should get the true value');
 
+eval {
+    my $obj = bless {}, 'OverloadInheritTwo';
+};
+is($@, '', "Overloading to method name string");
+
 #use Data::Dumper;
 #diag Dumper { Class::C3::_dump_MRO_table }