In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/2d961f6deff76f15f1e5c200d92c2ea6139bcdd2?hp=433d4b0fb3195bdf6cc90be8b502b4308c90d578>

- Log -----------------------------------------------------------------
commit 2d961f6deff76f15f1e5c200d92c2ea6139bcdd2
Author: David Mitchell <[email protected]>
Date:   Wed Apr 21 18:47:07 2010 +0100

    follow up fix for fd69380d5d5b95ef16e2521cf4251b34ee0ce151
    
    The original fix for tied elements losing magic had a bug that was masked
    by a bool casting issue. Once the casting was fixed, the bug surfaced:
    elements of @+ lost their values when returned from a sub. By removing the
    TEMP flag from the regdatum PVLV, we force it to be copied when returned.
-----------------------------------------------------------------------

Summary of changes:
 av.c         |    2 ++
 t/op/magic.t |    2 +-
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/av.c b/av.c
index fb853a6..94b5f2c 100644
--- a/av.c
+++ b/av.c
@@ -245,6 +245,8 @@ Perl_av_fetch(pTHX_ register AV *av, I32 key, I32 lval)
             sv = sv_newmortal();
            sv_upgrade(sv, SVt_PVLV);
            mg_copy(MUTABLE_SV(av), sv, 0, key);
+           if (!tied_magic) /* for regdata, force leavesub to make copies */
+               SvTEMP_off(sv);
            LvTYPE(sv) = 't';
            LvTARG(sv) = sv; /* fake (SV**) */
            return &(LvTARG(sv));
diff --git a/t/op/magic.t b/t/op/magic.t
index bef4922..60d81ae 100644
--- a/t/op/magic.t
+++ b/t/op/magic.t
@@ -466,13 +466,13 @@ is "@+", "10 1 6 10";
 
 # Test for bug [perl #27839]
 {
-    local $TODO = "fixing a casting issue revealed broken behaviour in this 
test";
     my $x;
     sub f {
        "abc" =~ /(.)./;
        $x = "@+";
        return @+;
     };
+    "pqrstuvwxyz" =~ /..(....)../; # prime @+ etc in this scope
     my @y = f();
     is $x, "@y", "return a magic array ($x) vs (@y)";
 

--
Perl5 Master Repository

Reply via email to