Revert "[perl #68654] next::method doesn't see UNIVERSAL"
authorFather Chrysostomos <sprout@cpan.org>
Mon, 3 Jan 2011 07:00:57 +0000 (23:00 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 3 Jan 2011 07:48:28 +0000 (23:48 -0800)
This reverts commit a5cd004dbd757df2bcf9e17aab6a8ed1272157d7.

ext/mro/mro.xs
t/mro/next_edgecases.t

index 63befa9..fb28399 100644 (file)
@@ -482,7 +482,6 @@ mro__nextcan(...)
     const char *hvname;
     I32 entries;
     struct mro_meta* selfmeta;
-    bool seen_univ = FALSE;
     HV* nmcache;
     I32 i;
   PPCODE:
@@ -613,7 +612,6 @@ mro__nextcan(...)
     /* Now search the remainder of the MRO for the
        same method name as the contextually enclosing
        method */
-   retry:
     if(entries > 0) {
         while (entries--) {
             SV * const linear_sv = *linear_svp++;
@@ -633,10 +631,6 @@ mro__nextcan(...)
 
             assert(curstash);
 
-           if (!seen_univ && SvCUR(linear_sv) == 9
-            && strnEQ(SvPV_nolen_const(linear_sv), "UNIVERSAL", 9))
-               seen_univ = TRUE;
-
             gvp = (GV**)hv_fetch(curstash, subname, subname_len, 0);
             if (!gvp) continue;
 
@@ -658,14 +652,6 @@ mro__nextcan(...)
         }
     }
 
-    if (!seen_univ && (selfstash = gv_stashpvn("UNIVERSAL", 9, 0))) {
-       linear_av = S_mro_get_linear_isa_c3(aTHX_ selfstash, 0);
-       linear_svp = AvARRAY(linear_av);
-       entries = AvFILLp(linear_av) + 1;
-       seen_univ = TRUE;
-       goto retry;
-    }
-
     (void)hv_store_ent(nmcache, sv, &PL_sv_undef, 0);
     if(throw_nomethod)
         Perl_croak(aTHX_ "No next::method '%s' found for %s", subname, hvname);
index e77ce7b..c0da963 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 
 BEGIN { chdir 't'; require q(./test.pl); @INC = qw "../lib lib" }
 
-plan(tests => 14);
+plan(tests => 12);
 
 {
 
@@ -93,19 +93,3 @@ plan(tests => 14);
     is($@, '', "->next::can on non-existing package name");
 
 }
-
-# Test next::method with UNIVERSAL methods
-{
-    package UNIVERSAL;
-    sub foo { "foo" }
-    our @ISA = "a";
-    package a;
-    sub bar { "bar" }
-    package M;
-    sub foo { shift->next::method }
-    sub bar { shift->next::method }
-    package main;
-
-    is eval { M->foo }, "foo", 'next::method with implicit UNIVERSAL';
-    is eval { M->bar }, "bar", 'n::m w/superclass of implicit UNIVERSAL';
-}