Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 8 additions & 14 deletions gv.c
Original file line number Diff line number Diff line change
Expand Up @@ -2063,10 +2063,8 @@ S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len,
}

/* gv_magicalize only turns on the SVf_READONLY flag, not SVf_PROTECT. So
redefine SvREADONLY_on for that purpose. We don’t use it later on in
this file. */
#undef SvREADONLY_on
#define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
make a special-purpose macro just for that. */
#define SvREADONLY_NOPROTECT_on(sv) (SvFLAGS(sv) |= SVf_READONLY)

/* gv_magicalize() is called by gv_fetchpvn_flags when creating
* a new GV.
Expand Down Expand Up @@ -2187,7 +2185,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
const Size_t n = *name;

sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0);
SvREADONLY_on(av);
SvREADONLY_NOPROTECT_on(av);

require_tie_mod_s(gv, '+', "Tie::Hash::NamedCapture",0);

Expand Down Expand Up @@ -2359,7 +2357,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
{ /* $- $+ */
sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
if (*name == '+')
SvREADONLY_on(GvSVn(gv));
SvREADONLY_NOPROTECT_on(GvSVn(gv));
}
{ /* %- %+ */
if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
Expand All @@ -2370,7 +2368,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
const Size_t n = *name;

sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0);
SvREADONLY_on(av);
SvREADONLY_NOPROTECT_on(av);
}
break;
case '*': /* $* */
Expand All @@ -2387,7 +2385,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
goto magicalize;
case '\023': /* $^S */
ro_magicalize:
SvREADONLY_on(GvSVn(gv));
SvREADONLY_NOPROTECT_on(GvSVn(gv));
/* FALLTHROUGH */
case '0': /* $0 */
case '^': /* $^ */
Expand Down Expand Up @@ -2431,7 +2429,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
if (!sv_derived_from(PL_patchlevel, "version"))
upg_version(PL_patchlevel, TRUE);
GvSV(gv) = vnumify(PL_patchlevel);
SvREADONLY_on(GvSV(gv));
SvREADONLY_NOPROTECT_on(GvSV(gv));
SvREFCNT_dec(sv);
break;
}
Expand All @@ -2440,7 +2438,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
{
SV * const sv = GvSV(gv);
GvSV(gv) = new_version(PL_patchlevel);
SvREADONLY_on(GvSV(gv));
SvREADONLY_NOPROTECT_on(GvSV(gv));
SvREFCNT_dec(sv);
break;
}
Expand All @@ -2458,10 +2456,6 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
|| (GvSV(gv) && (SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv))));
}

/* If we do ever start using this later on in the file, we need to make
sure we don’t accidentally use the wrong definition. */
#undef SvREADONLY_on

/* This function is called when the stash already holds the GV of the magic
* variable we're looking for, but we need to check that it has the correct
* kind of magic. For example, if someone first uses $! and then %!, the
Expand Down
Loading