X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=mg.c;h=ddaf2b39f0609aef20609028fea67bf8a3319a37;hb=5b813a60552784a5664fa2a5fa659e60caf6d6b3;hp=6966f9c15441d15d7231297010d53dbe6eaa3667;hpb=e7cbf6c66722616e50aa4cda71d48adf3ae55201;p=p5sagit%2Fp5-mst-13.2.git diff --git a/mg.c b/mg.c index 6966f9c..ddaf2b3 100644 --- a/mg.c +++ b/mg.c @@ -521,7 +521,8 @@ Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg) /* return the last filled */ while ( paren >= 0 - && (rx->startp[paren] == -1 || rx->endp[paren] == -1) ) + && (rx->offs[paren].start == -1 + || rx->offs[paren].end == -1) ) paren--; return (U32)paren; } @@ -544,8 +545,8 @@ Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg) if (paren < 0) return 0; if (paren <= (I32)rx->nparens && - (s = rx->startp[paren]) != -1 && - (t = rx->endp[paren]) != -1) + (s = rx->offs[paren].start) != -1 && + (t = rx->offs[paren].end) != -1) { register I32 i; if (mg->mg_obj) /* @+ */ @@ -592,8 +593,8 @@ Perl_magic_len(pTHX_ SV *sv, MAGIC *mg) paren = atoi(mg->mg_ptr); /* $& is in [0] */ getparen: if (paren <= (I32)rx->nparens && - (s1 = rx->startp[paren]) != -1 && - (t1 = rx->endp[paren]) != -1) + (s1 = rx->offs[paren].start) != -1 && + (t1 = rx->offs[paren].end) != -1) { i = t1 - s1; getlen: @@ -636,8 +637,8 @@ Perl_magic_len(pTHX_ SV *sv, MAGIC *mg) return 0; case '`': if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { - if (rx->startp[0] != -1) { - i = rx->startp[0]; + if (rx->offs[0].start != -1) { + i = rx->offs[0].start; if (i > 0) { s1 = 0; t1 = i; @@ -648,10 +649,10 @@ Perl_magic_len(pTHX_ SV *sv, MAGIC *mg) return 0; case '\'': if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { - if (rx->endp[0] != -1) { - i = rx->sublen - rx->endp[0]; + if (rx->offs[0].end != -1) { + i = rx->sublen - rx->offs[0].end; if (i > 0) { - s1 = rx->endp[0]; + s1 = rx->offs[0].end; t1 = rx->sublen; goto getlen; } @@ -1529,8 +1530,18 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg) { dVAR; PERL_UNUSED_ARG(sv); - PERL_UNUSED_ARG(mg); - PL_sub_generation++; + + /* The first case occurs via setisa, + the second via setisa_elem, which + calls this same magic */ + mro_isa_changed_in( + GvSTASH( + SvTYPE(mg->mg_obj) == SVt_PVGV + ? (GV*)mg->mg_obj + : (GV*)SvMAGIC(mg->mg_obj)->mg_obj + ) + ); + return 0; } @@ -1540,7 +1551,6 @@ Perl_magic_setamagic(pTHX_ SV *sv, MAGIC *mg) dVAR; PERL_UNUSED_ARG(sv); PERL_UNUSED_ARG(mg); - /* HV_badAMAGIC_on(Sv_STASH(sv)); */ PL_amagic_generation++; return 0; @@ -2002,13 +2012,11 @@ Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg) { dVAR; PERL_UNUSED_ARG(sv); - /* update taint status unless we're restoring at scope exit */ - if (PL_localizing != 2) { - if (PL_tainted) - mg->mg_len |= 1; - else - mg->mg_len &= ~1; - } + /* update taint status */ + if (PL_tainted) + mg->mg_len |= 1; + else + mg->mg_len &= ~1; return 0; }