]> git.vpit.fr Git - perl/modules/Scope-Upper.git/commitdiff
In su_unwind(), get the gimme before unwinding
authorVincent Pit <vince@profvince.com>
Sun, 11 Jan 2009 18:19:28 +0000 (19:19 +0100)
committerVincent Pit <vince@profvince.com>
Sun, 11 Jan 2009 18:19:28 +0000 (19:19 +0100)
The gimme value is here needed for reversing the stack sanitization that happens in pp_entersub. Hence we really need the gimme value for the topmost op.

Upper.xs

index aad6980dfedd0b90b942ef5c198467dffbafa792..f89f1dc2982b15bc83324010f15b45c838915308 100644 (file)
--- a/Upper.xs
+++ b/Upper.xs
@@ -529,6 +529,8 @@ STATIC void su_unwind(pTHX_ void *ud_) {
  I32 items = ud->items - 1;
  I32 gimme, mark;
 
+ gimme = GIMME_V;
+
  if (cxstack_ix > cxix)
   dounwind(cxix);
 
@@ -538,7 +540,6 @@ STATIC void su_unwind(pTHX_ void *ud_) {
 
  mark = PL_markstack[cxstack[cxix].blk_oldmarksp];
 
- gimme = GIMME_V;
  if (gimme == G_SCALAR) {
   *PL_markstack_ptr = PL_stack_sp - PL_stack_base;
   PL_stack_sp += items;