GV *gv;
if (!PL_defstash)
- return Nullgv;
+ return NULL;
tmplen = strlen(name) + 2;
if (tmplen < sizeof smallbuf)
sv_setpvn(GvSV(gv), name, tmplen - 2);
#endif
if (PERLDB_LINE)
- hv_magic(GvHVn(gv_AVadd(gv)), Nullgv, PERL_MAGIC_dbfile);
+ hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
}
if (tmpbuf != smallbuf)
Safefree(tmpbuf);
GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : (char *) "";
GvCVGEN(gv) = 0;
GvEGV(gv) = gv;
- sv_magic((SV*)gv, (SV*)gv, PERL_MAGIC_glob, Nullch, 0);
+ sv_magic((SV*)gv, (SV*)gv, PERL_MAGIC_glob, NULL, 0);
GvSTASH(gv) = stash;
if (stash)
Perl_sv_add_backref(aTHX_ (SV*)stash, (SV*)gv);
gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
if (!gvp)
- topgv = Nullgv;
+ topgv = NULL;
else {
topgv = *gvp;
if (SvTYPE(topgv) != SVt_PVGV)
return topgv;
/* Stale cached entry: junk it */
SvREFCNT_dec(cv);
- GvCV(topgv) = cv = Nullcv;
+ GvCV(topgv) = cv = NULL;
GvCVGEN(topgv) = 0;
}
else if (GvCVGEN(topgv) == PL_sub_generation)
STRLEN packname_len;
if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
- return Nullgv;
+ return NULL;
if (stash) {
if (SvTYPE(stash) < SVt_PVHV) {
packname = SvPV_const((SV*)stash, packname_len);
}
}
if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
- return Nullgv;
+ return NULL;
cv = GvCV(gv);
if (!(CvROOT(cv) || CvXSUB(cv)))
- return Nullgv;
+ return NULL;
/*
* Inheriting AUTOLOAD for non-methods works ... for now.
ENTER;
save_scalar(gv); /* keep the value of $! */
Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
- newSVpvs("Errno"), Nullsv);
+ newSVpvs("Errno"), NULL);
LEAVE;
SPAGAIN;
stash = gv_stashpvs("Errno", FALSE);
HV *stash = NULL;
const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
const I32 no_expand = flags & GV_NOEXPAND;
- const I32 add = flags & ~SVf_UTF8 & ~GV_NOADD_NOINIT & ~GV_NOEXPAND;
+ const I32 add =
+ flags & ~SVf_UTF8 & ~GV_NOADD_NOINIT & ~GV_NOEXPAND & ~GV_NOTQUAL;
const char *const name_end = nambeg + full_len;
const char *const name_em1 = name_end - 1;
+ if (flags & GV_NOTQUAL) {
+ /* Caller promised that there is no stash, so we can skip the check. */
+ len = full_len;
+ goto no_stash;
+ }
+
if (full_len > 2 && *name == '*' && isALPHA(name[1])) {
/* accidental stringify on a GV? */
name++;
if (!stash)
stash = PL_defstash;
if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
- return Nullgv;
+ return NULL;
len = name_cursor - name;
if (len > 0) {
tmpbuf[len++] = ':';
tmpbuf[len] = '\0';
gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
- gv = gvp ? *gvp : Nullgv;
+ gv = gvp ? *gvp : NULL;
if (gv && gv != (GV*)&PL_sv_undef) {
if (SvTYPE(gv) != SVt_PVGV)
gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
if (tmpbuf != smallbuf)
Safefree(tmpbuf);
if (!gv || gv == (GV*)&PL_sv_undef)
- return Nullgv;
+ return NULL;
if (!(stash = GvHV(gv)))
stash = GvHV(gv) = newHV();
/* No stash in name, so see how we can default */
if (!stash) {
+ no_stash:
if (len && isIDFIRST_lazy(name)) {
bool global = FALSE;
stash = GvHV(gv_fetchpvn_flags("<none>::", 8, GV_ADDMULTI, SVt_PVHV));
}
else
- return Nullgv;
+ return NULL;
}
if (!SvREFCNT(stash)) /* symbol table under destruction */
- return Nullgv;
+ return NULL;
gvp = (GV**)hv_fetch(stash,name,len,add);
if (!gvp || *gvp == (GV*)&PL_sv_undef)
- return Nullgv;
+ return NULL;
gv = *gvp;
if (SvTYPE(gv) == SVt_PVGV) {
if (add) {
if (strEQ(name2, "SA")) {
AV* const av = GvAVn(gv);
GvMULTI_on(gv);
- sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
+ sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, NULL, 0);
/* NOTE: No support for tied ISA */
if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
&& AvFILLp(av) == -1)
if (strEQ(name2, "VERLOAD")) {
HV* const hv = GvHVn(gv);
GvMULTI_on(gv);
- hv_magic(hv, Nullgv, PERL_MAGIC_overload);
+ hv_magic(hv, NULL, PERL_MAGIC_overload);
}
break;
case 'S':
}
GvMULTI_on(gv);
hv = GvHVn(gv);
- hv_magic(hv, Nullgv, PERL_MAGIC_sig);
+ hv_magic(hv, NULL, PERL_MAGIC_sig);
for (i = 1; i < SIG_SIZE; i++) {
SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
if (init)
case '-':
{
AV* const av = GvAVn(gv);
- sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
+ sv_magic((SV*)av, NULL, PERL_MAGIC_regdata, NULL, 0);
SvREADONLY_on(av);
goto magicalize;
}
case '+':
{
AV* const av = GvAVn(gv);
- sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
+ sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, NULL, 0);
SvREADONLY_on(av);
/* FALL THROUGH */
}
SvOBJECT_on(io);
/* Clear the stashcache because a new IO could overrule a package name */
hv_clear(PL_stashcache);
- iogv = gv_fetchpvn_flags("FileHandle::", 12, 0, SVt_PVHV);
+ iogv = gv_fetchpvs("FileHandle::", 0, SVt_PVHV);
/* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
- iogv = gv_fetchpvn_flags("IO::Handle::", 12, TRUE, SVt_PVHV);
+ iogv = gv_fetchpvs("IO::Handle::", GV_ADD, SVt_PVHV);
SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
return io;
}
if (gp->gp_cvgen) {
/* multi-named GPs cannot be used for method cache */
SvREFCNT_dec(gp->gp_cv);
- gp->gp_cv = Nullcv;
+ gp->gp_cv = NULL;
gp->gp_cvgen = 0;
}
else {
int i;
for (i = 1; i < NofAMmeth; i++) {
CV * const cv = amtp->table[i];
- if (cv != Nullcv) {
+ if (cv != NULL) {
SvREFCNT_dec((SV *) cv);
- amtp->table[i] = Nullcv;
+ amtp->table[i] = NULL;
}
}
}
amt.fallback=AMGfallNEVER;
for (i = 1; i < lim; i++)
- amt.table[i] = Nullcv;
+ amt.table[i] = NULL;
for (; i < NofAMmeth; i++) {
const char * const cooky = PL_AMG_names[i];
/* Human-readable form, for debugging: */
AMT *amtp;
if (!stash || !HvNAME_get(stash))
- return Nullcv;
+ return NULL;
mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
if (!mg) {
do_update:
return ret;
}
- return Nullcv;
+ return NULL;
}