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.