This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #7508] Use NULL for nonexistent array elems
authorFather Chrysostomos <sprout@cpan.org>
Tue, 2 Jul 2013 20:07:45 +0000 (13:07 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Wed, 21 Aug 2013 04:38:07 +0000 (21:38 -0700)
commitce0d59fdd1c7d145efdf6bf8da56a259fed483e4
tree6d7ed09aaf3e1540bf3b408b343713dfe3da8b19
parent1a33a0598e4c684205d292afcb97de6d79d17e7d
[perl #7508] Use NULL for nonexistent array elems

This commit fixes bug #7508 and provides the groundwork for fixing
several other bugs.

Elements of @_ are aliased to the arguments, so that \$_[0] within
sub foo will reference the same scalar as \$x if the sub is called
as foo($x).

&PL_sv_undef (the global read-only undef scalar returned by the
‘undef’ operator itself) was being used to represent nonexistent
array elements.  So the pattern would be broken for foo(undef), where
\$_[0] would vivify a new $_[0] element, treating it as having been
nonexistent.

This also causes other problems with constants under ithreads
(#105906) and causes a pending fix for another bug (#118691) to trig-
ger this bug.

This commit changes the internals to use a null pointer to represent a
nonexistent element.

This requires that Storable be changed to account for it.  Also,
IPC::Open3 was relying on the bug.  So this commit patches
both modules.
av.c
dist/Storable/Storable.xs
dist/Storable/t/malice.t
ext/B/t/showlex.t
ext/Devel-Peek/Peek.xs
ext/IPC-Open3/lib/IPC/Open3.pm
pad.c
pp.c
pp_hot.c
regexec.c