Revert "Unweaken refs in in-place reverse"
authorDavid Mitchell <davem@iabyn.com>
Thu, 26 Apr 2018 10:42:54 +0000 (11:42 +0100)
committerDavid Mitchell <davem@iabyn.com>
Thu, 26 Apr 2018 10:42:54 +0000 (11:42 +0100)
This reverts commit 5bad3c4f3a4515aaa622eecdf6f5a84fcaff7ed9.

See RT #132142.

For now, re-introduce the bug that fails to convert weak refs to strong
refs when sorting in place.

This is commit 1 of 2.

pp.c
t/op/reverse.t

diff --git a/pp.c b/pp.c
index d777ae4..826c207 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -5618,14 +5618,7 @@ PP(pp_reverse)
                        SV * const tmp = *begin;
                        *begin++ = *end;
                        *end--   = tmp;
-
-                        if (tmp && SvWEAKREF(tmp))
-                            sv_rvunweaken(tmp);
                    }
-
-                    /* make sure we catch the middle element */
-                    if (begin == end && *begin && SvWEAKREF(*begin))
-                        sv_rvunweaken(*begin);
                }
            }
        }
index a7d3178..16c732b 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     set_up_inc('../lib');
 }
 
-plan tests => 26;
+plan tests => 24;
 
 is(reverse("abc"), "cba", 'simple reverse');
 
@@ -92,20 +92,6 @@ use Tie::Array;
     is($a, $c, 'Unicode string double reversal matches original');
 }
 
-# in-place reversing of weak references
-SKIP: {
-    skip_if_miniperl("no dynamic loading on miniperl, no extension Scalar::Util", 2);
-    require Scalar::Util;
-    my @a = map { \(my $dummy = $_) } 1..5; # odd number of elements
-    my @r = @a[0,2];                        # middle and non-middle element
-    Scalar::Util::weaken($a[0]);
-    Scalar::Util::weaken($a[2]);
-    @a = reverse @a;
-    @r = ();
-    ok defined $a[-1] && ${$a[-1]} eq '1', "in-place reverse strengthens weak reference";
-    ok defined $a[2] && ${$a[2]} eq '3', "in-place reverse strengthens weak reference in the middle";
-}
-
 # [perl #132544] stack pointer used to go wild when nullary reverse
 # required extending the stack
 for(0..1000){()=(0..$_,scalar reverse )}