X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=gv.c;h=ff278ccc0838668b3d546743db60d4f8d06ac65c;hb=2680586ee66b8de4d2b5f26a2013220f2bec9d5f;hp=85ac8f9c34f0d11ff38d362936d317a72cb54afe;hpb=5f2d631d316df23ef6c85417f986072d5c8e5834;p=p5sagit%2Fp5-mst-13.2.git diff --git a/gv.c b/gv.c index 85ac8f9..ff278cc 100644 --- a/gv.c +++ b/gv.c @@ -50,7 +50,7 @@ gv_IOadd(register GV *gv) } GV * -gv_fetchfile(char *name) +gv_fetchfile(const char *name) { dTHR; char smallbuf[256]; @@ -80,7 +80,7 @@ gv_fetchfile(char *name) } void -gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi) +gv_init(GV *gv, HV *stash, const char *name, STRLEN len, int multi) { dTHR; register GP *gp; @@ -107,11 +107,12 @@ gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi) GvSTASH(gv) = (HV*)SvREFCNT_inc(stash); GvNAME(gv) = savepvn(name, len); GvNAMELEN(gv) = len; - if (multi) + if (multi || doproto) /* doproto means it _was_ mentioned */ GvMULTI_on(gv); if (doproto) { /* Replicate part of newSUB here. */ SvIOK_off(gv); ENTER; + /* XXX unsafe for threads if eval_owner isn't held */ start_subparse(0,0); /* Create CV in compcv. */ GvCV(gv) = PL_compcv; LEAVE; @@ -151,7 +152,7 @@ gv_init_sv(GV *gv, I32 sv_type) } GV * -gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level) +gv_fetchmeth(HV *stash, const char *name, STRLEN len, I32 level) { AV* av; GV* topgv; @@ -272,17 +273,17 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level) } GV * -gv_fetchmethod(HV *stash, char *name) +gv_fetchmethod(HV *stash, const char *name) { return gv_fetchmethod_autoload(stash, name, TRUE); } GV * -gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload) +gv_fetchmethod_autoload(HV *stash, const char *name, I32 autoload) { dTHR; - register char *nend; - char *nsplit = 0; + register const char *nend; + const char *nsplit = 0; GV* gv; for (nend = name; *nend; nend++) { @@ -292,7 +293,7 @@ gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload) nsplit = ++nend; } if (nsplit) { - char *origname = name; + const char *origname = name; name = nsplit + 1; if (*nsplit == ':') --nsplit; @@ -339,7 +340,7 @@ gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload) } GV* -gv_autoload4(HV *stash, char *name, STRLEN len, I32 method) +gv_autoload4(HV *stash, const char *name, STRLEN len, I32 method) { dTHR; static char autoload[] = "AUTOLOAD"; @@ -384,13 +385,13 @@ gv_autoload4(HV *stash, char *name, STRLEN len, I32 method) } HV* -gv_stashpv(char *name, I32 create) +gv_stashpv(const char *name, I32 create) { return gv_stashpvn(name, strlen(name), create); } HV* -gv_stashpvn(char *name, U32 namelen, I32 create) +gv_stashpvn(const char *name, U32 namelen, I32 create) { char smallbuf[256]; char *tmpbuf; @@ -429,14 +430,14 @@ gv_stashsv(SV *sv, I32 create) GV * -gv_fetchpv(char *nambeg, I32 add, I32 sv_type) +gv_fetchpv(const char *nambeg, I32 add, I32 sv_type) { dTHR; - register char *name = nambeg; + register const char *name = nambeg; register GV *gv = 0; GV**gvp; I32 len; - register char *namend; + register const char *namend; HV *stash = 0; U32 add_gvflags = 0; @@ -653,7 +654,6 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type) } } break; -#ifdef OVERLOAD case 'O': if (strEQ(name, "OVERLOAD")) { HV* hv = GvHVn(gv); @@ -661,7 +661,6 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type) hv_magic(hv, gv, 'A'); } break; -#endif /* OVERLOAD */ case 'S': if (strEQ(name, "SIG")) { HV *hv; @@ -827,7 +826,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type) } void -gv_fullname3(SV *sv, GV *gv, char *prefix) +gv_fullname3(SV *sv, GV *gv, const char *prefix) { HV *hv = GvSTASH(gv); if (!hv) { @@ -841,7 +840,7 @@ gv_fullname3(SV *sv, GV *gv, char *prefix) } void -gv_efullname3(SV *sv, GV *gv, char *prefix) +gv_efullname3(SV *sv, GV *gv, const char *prefix) { GV *egv = GvEGV(gv); if (!egv) @@ -1004,7 +1003,6 @@ register GV *gv; } #endif /* Microport 2.4 hack */ -#ifdef OVERLOAD /* Updates and caches the CV's */ bool @@ -1018,6 +1016,7 @@ Gv_AMupdate(HV *stash) MAGIC* mg=mg_find((SV*)stash,'c'); AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL; AMT amt; + STRLEN n_a; if (mg && amtp->was_ok_am == PL_amagic_generation && amtp->was_ok_sub == PL_sub_generation) @@ -1065,7 +1064,7 @@ Gv_AMupdate(HV *stash) default: if (!SvROK(sv)) { if (!SvOK(sv)) break; - gv = gv_fetchmethod(stash, SvPV(sv, PL_na)); + gv = gv_fetchmethod(stash, SvPV(sv, n_a)); if (gv) cv = GvCV(gv); break; } @@ -1126,7 +1125,7 @@ Gv_AMupdate(HV *stash) GV *ngv; DEBUG_o( deb("Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n", - SvPV(GvSV(gv), PL_na), cp, HvNAME(stash)) ); + SvPV(GvSV(gv), n_a), cp, HvNAME(stash)) ); if (!SvPOK(GvSV(gv)) || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)), FALSE))) @@ -1481,5 +1480,3 @@ amagic_call(SV *left, SV *right, int method, int flags) } } } -#endif /* OVERLOAD */ -