Change 16431 by jhi@alpha on 2002/05/06 13:13:00

        Subject: [proposed PATCH] correctly unlocalise exists on tied/%ENV
        From: Dave Mitchell <[EMAIL PROTECTED]>
        Date: Sat, 4 May 2002 00:34:18 +0100
        Message-ID: <[EMAIL PROTECTED]>

Affected files ...

.... //depot/perl/pp_hot.c#278 edit
.... //depot/perl/t/op/local.t#18 edit

Differences ...

==== //depot/perl/pp_hot.c#278 (text) ====
Index: perl/pp_hot.c
--- perl/pp_hot.c#277~16386~    Sat May  4 06:22:41 2002
+++ perl/pp_hot.c       Mon May  6 06:13:00 2002
@@ -1644,7 +1644,12 @@
 
     if (SvTYPE(hv) == SVt_PVHV) {
        if (PL_op->op_private & OPpLVAL_INTRO)
-           preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
+           preeminent =  
+               ( SvRMAGICAL(hv)
+                 && !mg_find((SV*)hv, PERL_MAGIC_tied)
+                 && !mg_find((SV*)hv, PERL_MAGIC_env)
+               ) ? 1 : hv_exists_ent(hv, keysv, 0);
+
        he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
        svp = he ? &HeVAL(he) : 0;
     }

==== //depot/perl/t/op/local.t#18 (xtext) ====
Index: perl/t/op/local.t
--- perl/t/op/local.t#17~9203~  Sun Mar 18 11:20:54 2001
+++ perl/t/op/local.t   Mon May  6 06:13:00 2002
@@ -130,6 +130,7 @@
     sub TIEHASH { bless {}, $_[0] }
     sub STORE { print "# STORE [@_]\n"; $_[0]->{$_[1]} = $_[2] }
     sub FETCH { my $v = $_[0]->{$_[1]}; print "# FETCH [@_=$v]\n"; $v }
+    sub EXISTS { print "# EXISTS [@_]\n"; exists $_[0]->{$_[1]}; }
     sub DELETE { print "# DELETE [@_]\n"; delete $_[0]->{$_[1]}; }
     sub CLEAR { print "# CLEAR [@_]\n"; %{$_[0]} = (); }
 }
End of Patch.

Reply via email to