This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove !IS_PADGV assertions
authorFather Chrysostomos <sprout@cpan.org>
Thu, 18 Sep 2014 05:10:47 +0000 (22:10 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 18 Sep 2014 06:39:30 +0000 (23:39 -0700)
commit9bad585fd42ac7b91e4ae2831711c9148fe9fed1
tree3bdf92ca688954863d3a1783176cf7d76163b0e2
parent3b6e69b1b32e689d76dc3c485f17606b4a8d5a93
Remove !IS_PADGV assertions

Commit 60779a30f stopped setting PADTMP on GVs in pads,
and changed many instances of if(SvPADTMP && !IS_PADGV) to
if(SvPADTMP){assert(!IS_PADGV)...}.

This PADTMP was leftover from the original ithreads implementation
that marked these as PADTMP under the assumption that anything in a
pad had to be marked PADMY or PADTMP.

Since we don’t want these GVs copied the way operator targets are
(PADTMP indicates the latter), we needed this !IS_PADGV check all over
the place.

60779a30f was actually right in removing the flag and the !IS_PADGV
check, because it should be possible for XS modules to create ops that
return copiable GVs.  But the assertions prevent that from working.

More importantly (to me at least), this IS_PADGV doesn’t quite make
sense and I am trying to eliminate it.

BTW, you have to be doubly naughty, but it is possible to fail these
assertions:

$ ./perl -Ilib -e 'BEGIN { sub { $::{foo} = \@_; constant::_make_const(@_) }->(*bar) } \ foo'
Assertion failed: (!IS_PADGV(sv)), function S_refto, file pp.c, line 576.
Abort trap: 6
pp.c
pp_ctl.c
pp_hot.c
pp_sort.c
regexec.c