Change 13430 by jhi@alpha on 2001/12/02 20:01:24

        Subject: [PATCH] Shared hash keys 
        From: Nicholas Clark <[EMAIL PROTECTED]>
        Date: Sun, 2 Dec 2001 20:52:32 +0000
        Message-ID: <[EMAIL PROTECTED]>

Affected files ...

.... //depot/perl/doop.c#115 edit
.... //depot/perl/t/op/tr.t#28 edit

Differences ...

==== //depot/perl/doop.c#115 (text) ====
Index: perl/doop.c
--- perl/doop.c.~1~     Sun Dec  2 13:15:05 2001
+++ perl/doop.c Sun Dec  2 13:15:05 2001
@@ -599,9 +599,12 @@
     I32 hasutf = (PL_op->op_private &
                     (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF));
 
-    if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL))
-       Perl_croak(aTHX_ PL_no_modify);
-
+    if (SvREADONLY(sv)) {
+        if (SvFAKE(sv))
+            sv_force_normal(sv);
+        if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL))
+            Perl_croak(aTHX_ PL_no_modify);
+    }
     (void)SvPV(sv, len);
     if (!len)
        return 0;

==== //depot/perl/t/op/tr.t#28 (xtext) ====
Index: perl/t/op/tr.t
--- perl/t/op/tr.t.~1~  Sun Dec  2 13:15:05 2001
+++ perl/t/op/tr.t      Sun Dec  2 13:15:05 2001
@@ -5,7 +5,7 @@
     @INC = '../lib';
 }
 
-print "1..70\n";
+print "1..71\n";
 
 $_ = "abcdefghijklmnopqrstuvwxyz";
 
@@ -390,4 +390,10 @@
 print "not " unless $a eq "XZY";
 print "ok 70\n";
 
-
+# pp_trans needs to unshare shared hash keys
+# Used to fail with "Modification of a read-only value attempted"
+%a = (N=>1);
+foreach (keys %a) {
+  tr/N/n/;
+  print +($_ eq 'n' ? '' : "not ") . "ok 71\n";
+}
End of Patch.

Reply via email to