Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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));
}
Exemplo n.º 3
0
GV *
Perl_gv_AVadd(pTHX_ GV *gv)
{
    return gv_AVadd(gv);
}