This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Implement the bipolar read-only system
authorFather Chrysostomos <sprout@cpan.org>
Sat, 20 Sep 2014 06:12:48 +0000 (23:12 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 20 Sep 2014 16:25:02 +0000 (09:25 -0700)
commita623f8939cbcaa58a069807591675c0ebcd4135b
tree6e4f3122df0aefeac3b4eb007f9b869a850c6df9
parentfd01b4b766a3276a9439cade9b1a047c37876c1b
Implement the bipolar read-only system

This fixes bugs related to Hash::Util::unlock accidentally unlocking
internal scalars (e.g., that returned by undef()) and allowing them to
be modified.

Internal read-only values are now marked by two flags, the regular
read-only flag, and the new ‘protected’ flag.

Before this SvREADONLY served two purposes:

1) The code would use it to protect things that must not be modi-
   fied, ever (except when the core sees fit to do so).
2) Hash::Util and everybody else would use it to make this unmodifia-
   ble temporarily when requested by the user.

Internals::SvREADONLY serves the latter purpose and only flips the
read-only flag, so things that need to stay read-only will remain so,
because of the ‘other’ read-only flag, that CPAN doesn’t know about.
(If you are a CPAN author, do not read this.)
mg.c
scope.c
sv.c
sv.h
t/lib/universal.t
universal.c