From: Vincent Pit Date: Fri, 16 Apr 2010 21:40:49 +0000 (+0200) Subject: Stop skipping frames as a pop optimization X-Git-Tag: v0.11~3 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FScope-Upper.git;a=commitdiff_plain;h=1ddb3bd47f50cb3a056d2c9e5467ba1bca94251b Stop skipping frames as a pop optimization This caused breakage under the debugger (and most likely everywhere). --- diff --git a/Upper.xs b/Upper.xs index 75c5093..9817196 100644 --- a/Upper.xs +++ b/Upper.xs @@ -540,36 +540,22 @@ STATIC void su_pop(pTHX_ void *ud) { SU_UD_DEPTH(ud) = --depth; if (depth > 0) { - I32 i = 1, pad; + I32 pad; if (pad = SU_UD_PAD(ud)) { dMY_CXT; do { + SU_D(PerlIO_printf(Perl_debug_log, + "%p: push a pad slot at depth=%2d scope_ix=%2d save_ix=%2d\n", + ud, depth, PL_scopestack_ix, PL_savestack_ix)); save_int(&MY_CXT.stack_placeholder); } while (--pad); } - SAVEDESTRUCTOR_X(su_pop, ud); - - /* Skip depths corresponding to scopes for which leave_scope() might not be - * called. */ - while (depth > 1 && PL_scopestack_ix >= i) { - I32 j = PL_scopestack[PL_scopestack_ix - i]; - - if (j < PL_savestack_ix) - break; - - SU_D(PerlIO_printf(Perl_debug_log, - "%p: skip scope%*cat depth=%2d scope_ix=%2d new_top=%2d >= cur_base=%2d\n", - ud, 6, ' ', depth, PL_scopestack_ix - i, j, PL_savestack_ix)); - - SU_UD_DEPTH(ud) = --depth; - - ++i; - } SU_D(PerlIO_printf(Perl_debug_log, "%p: push destructor at depth=%2d scope_ix=%2d save_ix=%2d\n", ud, depth, PL_scopestack_ix, PL_savestack_ix)); + SAVEDESTRUCTOR_X(su_pop, ud); } else { SU_UD_HANDLER(ud)(aTHX_ ud); }