]> git.vpit.fr Git - perl/modules/autovivification.git/blobdiff - autovivification.xs
Also mark the unstack ops in our peephole optimizer
[perl/modules/autovivification.git] / autovivification.xs
index a36d0a22d46232090ae0b414f1476059f25a10fc..f0e00473b70709ee7b6915551e459f90db07f9ff 100644 (file)
 # define A_HAS_RPEEP A_HAS_PERL(5, 13, 5)
 #endif
 
+#ifndef OP_SIBLING
+# define OP_SIBLING(O) ((O)->op_sibling)
+#endif
+
 /* ... Thread safety and multiplicity ...................................... */
 
 /* Always safe when the workaround isn't needed */
@@ -929,7 +933,7 @@ STATIC OP *a_ck_xslice(pTHX_ OP *o) {
   case OP_HSLICE:
    old_ck = a_old_ck_hslice;
    if (hint & A_HINT_DO)
-    a_recheck_rv2xv(cUNOPo->op_first->op_sibling, OP_RV2HV, a_pp_rv2hv);
+    a_recheck_rv2xv(OP_SIBLING(cUNOPo->op_first), OP_RV2HV, a_pp_rv2hv);
    break;
  }
  o = old_ck(aTHX_ o);
@@ -1020,6 +1024,7 @@ STATIC void a_peep_rec(pTHX_ OP *o, ptable *seen) {
    case OP_NEXTSTATE:
    case OP_DBSTATE:
    case OP_STUB:
+   case OP_UNSTACK:
     if (ptable_fetch(seen, o))
      return;
     ptable_seen_store(seen, o, o);
@@ -1269,8 +1274,8 @@ PREINIT:
  GV     *gv;
 PPCODE:
  {
-  dMY_CXT;
 #if A_WORKAROUND_REQUIRE_PROPAGATION
+  dMY_CXT;
   {
    a_ptable_clone_ud ud;