GV * Perl_gv_fetchfile(pTHX_ const char *name) { char smallbuf[256]; char *tmpbuf; STRLEN tmplen; GV *gv; if (!PL_defstash) return Nullgv; tmplen = strlen(name) + 2; if (tmplen < sizeof smallbuf) tmpbuf = smallbuf; else New(603, tmpbuf, tmplen + 1, char); tmpbuf[0] = '_'; tmpbuf[1] = '<'; strcpy(tmpbuf + 2, name); gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE); if (!isGV(gv)) { gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE); sv_setpv(GvSV(gv), name); if (PERLDB_LINE) hv_magic(GvHVn(gv_AVadd(gv)), Nullgv, 'L'); } if (tmpbuf != smallbuf) Safefree(tmpbuf); return gv; }
void THX_MopMcV_set_superclass(pTHX_ SV* metaclass, SV* superclass) { AV* isa_av; GV* isa_gv; HV* stash = (HV*) SvRV(metaclass); SV** isa_gv_p = hv_fetch(stash, "ISA", 3, 0); if (isa_gv_p != NULL) { isa_gv = (GV*) *isa_gv_p; } else { isa_gv = (GV*) newSV(0); gv_init_pvn(isa_gv, stash, "ISA", 3, 0); (void)hv_store(stash, "ISA", 3, (SV*) isa_gv, 0); } isa_av = GvAV(isa_gv); if (isa_av == NULL) { gv_AVadd(isa_gv); isa_av = GvAV(isa_gv); } (void)av_store(isa_av, 0, MopMcV_get_name(superclass)); }
GV * Perl_gv_AVadd(pTHX_ GV *gv) { return gv_AVadd(gv); }