]> git.vpit.fr Git - perl/modules/Scope-Upper.git/blobdiff - Upper.xs
Update VPIT::TestHelpers to 2a6ac0f1
[perl/modules/Scope-Upper.git] / Upper.xs
index 7cbbaa2da3fe315efbbdf62c4cbd1e30265272b2..2e2c2a523ab1d5de8b6c7ae710c6221a8333d6a0 100644 (file)
--- a/Upper.xs
+++ b/Upper.xs
@@ -1001,9 +1001,26 @@ static void su_pop(pTHX_ void *ud) {
                      ud,                24, ' ',    mark,        base));
 
  if (base < mark) {
+#if SU_HAS_PERL(5, 19, 4)
+  I32 save = -1;
+  PERL_CONTEXT *cx;
+#endif
+
   SU_D(PerlIO_printf(Perl_debug_log, "%p: clear leftovers\n", ud));
+
+#if SU_HAS_PERL(5, 19, 4)
+  cx = cxstack + cxstack_ix;
+  if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT)
+   save = PL_scopestack[cx->blk_oldscopesp - 1];
+#endif
+
   PL_savestack_ix = mark;
   leave_scope(base);
+
+#if SU_HAS_PERL(5, 19, 4)
+  if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT)
+   PL_scopestack[cx->blk_oldscopesp - 1] = save;
+#endif
  }
  PL_savestack_ix = base;
 
@@ -2204,7 +2221,7 @@ static I32 su_context_gimme(pTHX_ I32 cxix) {
 
 /* --- Global setup/teardown ----------------------------------------------- */
 
-static U32 su_initialized = 0;
+static VOL U32 su_initialized = 0;
 
 static void su_global_teardown(pTHX_ void *root) {
  if (!su_initialized)