update comments
This commit is contained in:
parent
176101d660
commit
fec42da1ab
|
@ -2491,20 +2491,23 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
- (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval
|
- (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval
|
||||||
- TOP = WHY_*; no retval below it
|
- TOP = WHY_*; no retval below it
|
||||||
- (TOP, SECOND, THIRD) = exc_info()
|
- (TOP, SECOND, THIRD) = exc_info()
|
||||||
|
(FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
|
||||||
Below them is EXIT, the context.__exit__ bound method.
|
Below them is EXIT, the context.__exit__ bound method.
|
||||||
In the last case, we must call
|
In the last case, we must call
|
||||||
EXIT(TOP, SECOND, THIRD)
|
EXIT(TOP, SECOND, THIRD)
|
||||||
otherwise we must call
|
otherwise we must call
|
||||||
EXIT(None, None, None)
|
EXIT(None, None, None)
|
||||||
|
|
||||||
In all cases, we remove EXIT from the stack, leaving
|
In the first two cases, we remove EXIT from the
|
||||||
the rest in the same order.
|
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,
|
In addition, if the stack represents an exception,
|
||||||
*and* the function call returns a 'true' value, we
|
*and* the function call returns a 'true' value, we
|
||||||
"zap" this information, to prevent END_FINALLY from
|
push WHY_SILENCED onto the stack. END_FINALLY will
|
||||||
re-raising the exception. (But non-local gotos
|
then not re-raise the exception. (But non-local
|
||||||
should still be resumed.)
|
gotos should still be resumed.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyObject *exit_func;
|
PyObject *exit_func;
|
||||||
|
@ -2544,7 +2547,11 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
stack_pointer[-7] = tb;
|
stack_pointer[-7] = tb;
|
||||||
stack_pointer[-6] = exc;
|
stack_pointer[-6] = exc;
|
||||||
stack_pointer[-5] = tp;
|
stack_pointer[-5] = tp;
|
||||||
|
/* UNWIND_EXCEPT_BLOCK will pop this off. */
|
||||||
FOURTH() = NULL;
|
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];
|
block = &f->f_blockstack[f->f_iblock - 1];
|
||||||
assert(block->b_type == EXCEPT_HANDLER);
|
assert(block->b_type == EXCEPT_HANDLER);
|
||||||
block->b_level--;
|
block->b_level--;
|
||||||
|
|
Loading…
Reference in New Issue