Merge CXt_LOOP_STACK's use of itermax for the reverse minimum with
[p5sagit/p5-mst-13.2.git] / doop.c
diff --git a/doop.c b/doop.c
index d5cef28..59aa807 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -307,7 +307,12 @@ S_do_trans_simple_utf8(pTHX_ SV * const sv)
     const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
     STRLEN len;
 
-    SV* const  rv = (SV*)cSVOP->op_sv;
+    SV* const  rv =
+#ifdef USE_ITHREADS
+                   PAD_SVl(cPADOP->op_padix);
+#else
+                   (SV*)cSVOP->op_sv;
+#endif
     HV* const  hv = (HV*)SvRV(rv);
     SV* const * svp = hv_fetchs(hv, "NONE", FALSE);
     const UV none = svp ? SvUV(*svp) : 0x7fffffff;
@@ -403,7 +408,12 @@ S_do_trans_count_utf8(pTHX_ SV * const sv)
     I32 matches = 0;
     STRLEN len;
 
-    SV* const rv = (SV*)cSVOP->op_sv;
+    SV* const  rv =
+#ifdef USE_ITHREADS
+                   PAD_SVl(cPADOP->op_padix);
+#else
+                   (SV*)cSVOP->op_sv;
+#endif
     HV* const hv = (HV*)SvRV(rv);
     SV* const * const svp = hv_fetchs(hv, "NONE", FALSE);
     const UV none = svp ? SvUV(*svp) : 0x7fffffff;
@@ -447,7 +457,12 @@ S_do_trans_complex_utf8(pTHX_ SV * const sv)
     const I32 squash   = PL_op->op_private & OPpTRANS_SQUASH;
     const I32 del      = PL_op->op_private & OPpTRANS_DELETE;
     const I32 grows    = PL_op->op_private & OPpTRANS_GROWS;
-    SV * const rv = (SV*)cSVOP->op_sv;
+    SV* const  rv =
+#ifdef USE_ITHREADS
+                   PAD_SVl(cPADOP->op_padix);
+#else
+                   (SV*)cSVOP->op_sv;
+#endif
     HV * const hv = (HV*)SvRV(rv);
     SV * const *svp = hv_fetchs(hv, "NONE", FALSE);
     const UV none = svp ? SvUV(*svp) : 0x7fffffff;
@@ -731,7 +746,7 @@ Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size)
     UV retnum = 0;
 
     if (offset < 0)
-       return retnum;
+       return 0;
     if (size < 1 || (size & (size-1))) /* size < 1 or not a power of two */
        Perl_croak(aTHX_ "Illegal number of bits in vec");
 
@@ -1202,13 +1217,13 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
        /* Avoid triggering overloading again by using temporaries.
           Maybe there should be a variant of sv_utf8_upgrade that takes pvn
        */
-       right = sv_2mortal(newSVpvn(rsave, rightlen));
+       right = newSVpvn_flags(rsave, rightlen, SVs_TEMP);
        sv_utf8_upgrade(right);
        rsave = rc = SvPV_nomg_const(right, rightlen);
        right_utf = TRUE;
     }
     else if (!left_utf && right_utf) {
-       left = sv_2mortal(newSVpvn(lsave, leftlen));
+       left = newSVpvn_flags(lsave, leftlen, SVs_TEMP);
        sv_utf8_upgrade(left);
        lsave = lc = SvPV_nomg_const(left, leftlen);
        left_utf = TRUE;