X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=mg.c;h=2b96829572d8dad3c36860131f51283f129a9fbf;hb=778ddebdd36200650e05e3789258e36307a5988b;hp=d6ea1d2c58e787684937b521470704e99ec5bf78;hpb=227a8b4b89a56a5f0c4892bc310a24a6cfceb3b7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/mg.c b/mg.c index d6ea1d2..2b96829 100644 --- a/mg.c +++ b/mg.c @@ -478,8 +478,7 @@ magic_get(SV *sv, MAGIC *mg) } sv_setpvn(sv,s,i); if (tainting) - tainted = (was_tainted || RX_MATCH_TAINTED(rx) || - (curpm->op_pmflags & PMf_TAINTMEM)); + tainted = (was_tainted || RX_MATCH_TAINTED(rx)); break; } } @@ -899,55 +898,7 @@ magic_setsig(SV *sv, MAGIC *mg) int magic_setisa(SV *sv, MAGIC *mg) { - HV *stash; - SV **svp; - I32 fill; - HV *basefields = Nullhv; - GV **gvp; - GV *gv; - HE *he; - static char *FIELDS = "FIELDS"; - sub_generation++; - - if (mg->mg_type == 'i') - return 0; /* Ignore lower-case version of the magic */ - - stash = GvSTASH(mg->mg_obj); - svp = AvARRAY((AV*)sv); - - /* NOTE: No support for tied ISA */ - for (fill = AvFILLp((AV*)sv); fill >= 0; fill--, svp++) { - HV *basestash = gv_stashsv(*svp, FALSE); - - if (!basestash) { - if (dowarn) - warn("No such package \"%_\" in @ISA assignment", *svp); - continue; - } - gvp = (GV**)hv_fetch(basestash, FIELDS, 6, FALSE); - if (gvp && *gvp && GvHV(*gvp)) { - if (basefields) - croak("Can't multiply inherit %%FIELDS"); - basefields = GvHV(*gvp); - } - } - - if (!basefields) - return 0; - - gv = (GV*)*hv_fetch(stash, FIELDS, 6, TRUE); - if (!isGV(gv)) - gv_init(gv, stash, FIELDS, 6, TRUE); - if (!GvHV(gv)) - GvHV(gv) = newHV(); - if (HvKEYS(GvHV(gv))) - croak("Inherited %%FIELDS can't override existing %%FIELDS"); - - hv_iterinit(GvHV(gv)); - while ((he = hv_iternext(basefields))) - hv_store(GvHV(gv), HeKEY(he), HeKLEN(he), HeVAL(he), HeHASH(he)); - return 0; } @@ -1030,13 +981,13 @@ magic_methpack(SV *sv, MAGIC *mg, char *meth) ENTER; SAVETMPS; - PUSHSTACK(SI_MAGIC); + PUSHSTACKi(PERLSI_MAGIC); if (magic_methcall(mg, meth, G_SCALAR, 2, NULL)) { sv_setsv(sv, *stack_sp--); } - POPSTACK(); + POPSTACK; FREETMPS; LEAVE; return 0; @@ -1056,9 +1007,9 @@ magic_setpack(SV *sv, MAGIC *mg) { dSP; ENTER; - PUSHSTACK(SI_MAGIC); + PUSHSTACKi(PERLSI_MAGIC); magic_methcall(mg, "STORE", G_SCALAR|G_DISCARD, 3, sv); - POPSTACK(); + POPSTACK; LEAVE; return 0; } @@ -1078,12 +1029,12 @@ magic_sizepack(SV *sv, MAGIC *mg) ENTER; SAVETMPS; - PUSHSTACK(SI_MAGIC); + PUSHSTACKi(PERLSI_MAGIC); if (magic_methcall(mg, "FETCHSIZE", G_SCALAR, 2, NULL)) { sv = *stack_sp--; retval = (U32) SvIV(sv)-1; } - POPSTACK(); + POPSTACK; FREETMPS; LEAVE; return retval; @@ -1094,12 +1045,12 @@ int magic_wipepack(SV *sv, MAGIC *mg) dSP; ENTER; - PUSHSTACK(SI_MAGIC); + PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); XPUSHs(mg->mg_obj); PUTBACK; perl_call_method("CLEAR", G_SCALAR|G_DISCARD); - POPSTACK(); + POPSTACK; LEAVE; return 0; } @@ -1112,7 +1063,7 @@ magic_nextpack(SV *sv, MAGIC *mg, SV *key) ENTER; SAVETMPS; - PUSHSTACK(SI_MAGIC); + PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); EXTEND(SP, 2); PUSHs(mg->mg_obj); @@ -1123,7 +1074,7 @@ magic_nextpack(SV *sv, MAGIC *mg, SV *key) if (perl_call_method(meth, G_SCALAR)) sv_setsv(key, *stack_sp--); - POPSTACK(); + POPSTACK; FREETMPS; LEAVE; return 0; @@ -1996,14 +1947,14 @@ sighandler(int sig) sv_setpv(sv,sig_name[sig]); } - PUSHSTACK(SI_SIGNAL); + PUSHSTACKi(PERLSI_SIGNAL); PUSHMARK(SP); PUSHs(sv); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); - POPSTACK(); + POPSTACK; cleanup: if (flags & 1) savestack_ix -= 8; /* Unprotect save in progress. */