This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Avoid reifying GVs in rv2cv
authorFather Chrysostomos <sprout@cpan.org>
Thu, 11 Sep 2014 03:29:19 +0000 (20:29 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 15 Sep 2014 13:19:33 +0000 (06:19 -0700)
commite52eb89d6b6e33611c38ec4ef278fd23c7109640
treec5c3e8bfea9e2e9060c20a17b4707d801db91a64
parent00efeabe1829ee5b5c8a75bc7f7989900f19af24
Avoid reifying GVs in rv2cv

\&foo no longer reifies GVs in the stash:

$ ./miniperl -e 'sub foo{} warn $::{foo}; \&foo; warn $::{foo}'
CODE(0x7fab6282ad98) at -e line 1.
CODE(0x7fab6282ad98) at -e line 1.

Sub calls still reify them though, because of the way ck_subr cur-
rently works.

Constant proxies are still upgraded to full GVs for now, just to mini-
mise the churn per patch.

This makes it possible for OP_GVs to point to things other than GVs,
and these things are stored in the pad under threads.  Hence, pad_tidy
could turn on PADTMP, and then IS_PADGV becomes true when it is
upgraded to a glob, so refgen will fail assertions.  There is actually
no need to turn on PADTMP in pad_tidy, since it will already be on for
op targets.  (We need to get rid of IS_PADGV one of these days.  It
doesn’t actually do anything.)
op.c
pad.c