Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 54904:2602b56ad02d
update comments
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sun, 28 Jun 2009 15:55:46 +0000 |
| parents | 544c5bad1607 |
| children | b55a78b39bd5 |
line wrap: on
line diff
--- a/Python/ceval.c Sun Jun 28 15:40:50 2009 +0000 +++ b/Python/ceval.c Sun Jun 28 15:55:46 2009 +0000 @@ -2491,20 +2491,23 @@ - (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval - TOP = WHY_*; no retval below it - (TOP, SECOND, THIRD) = exc_info() + (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER Below them is EXIT, the context.__exit__ bound method. In the last case, we must call EXIT(TOP, SECOND, THIRD) otherwise we must call EXIT(None, None, None) - In all cases, we remove EXIT from the stack, leaving - the rest in the same order. + In the first two cases, we remove EXIT from the + stack, leaving the rest in the same order. In the + third case, we shift the bottom 3 values of the + stack down, and replace the empty spot with NULL. In addition, if the stack represents an exception, *and* the function call returns a 'true' value, we - "zap" this information, to prevent END_FINALLY from - re-raising the exception. (But non-local gotos - should still be resumed.) + push WHY_SILENCED onto the stack. END_FINALLY will + then not re-raise the exception. (But non-local + gotos should still be resumed.) */ PyObject *exit_func; @@ -2544,7 +2547,11 @@ stack_pointer[-7] = tb; stack_pointer[-6] = exc; stack_pointer[-5] = tp; + /* UNWIND_EXCEPT_BLOCK will pop this off. */ FOURTH() = NULL; + /* We just shifted the stack down, so we have + to tell the except handler block that the + values are lower than it expects. */ block = &f->f_blockstack[f->f_iblock - 1]; assert(block->b_type == EXCEPT_HANDLER); block->b_level--;
