applied patch, slightly tweaked
[p5sagit/p5-mst-13.2.git] / mg.c
diff --git a/mg.c b/mg.c
index d6ea1d2..2b96829 100644 (file)
--- 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. */