From: Georg Brandl Date: Thu, 23 Aug 2007 17:54:11 +0000 (+0000) Subject: Bug #1768121: fix wrong/missing opcode docs. X-Git-Tag: v2.6a1~1460 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4debd55874a51d997a4f8421b0c8e0dc6aaef5be;p=python Bug #1768121: fix wrong/missing opcode docs. --- diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst index 8d6a114cab..9b4b7dccf6 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -516,10 +516,29 @@ Miscellaneous opcodes. Creates a new class object. TOS is the methods dictionary, TOS1 the tuple of the names of the base classes, and TOS2 the class name. + +.. opcode:: WITH_CLEANUP () + + Cleans up the stack when a :keyword:`with` statement block exits. TOS is the + context manager's :meth:`__exit__` bound method. Below that are 1--3 values + indicating how/why the finally clause was entered: + + * SECOND = None + * (SECOND, THIRD) = (WHY_{RETURN,CONTINUE}), retval + * SECOND = WHY_\*; no retval below it + * (SECOND, THIRD, FOURTH) = exc_info() + + In the last case, ``TOS(SECOND, THIRD, FOURTH)`` is called, otherwise + ``TOS(None, None, None)``. + + In addition, if the stack represents an exception, *and* the function call + returns a 'true' value, this information is "zapped", to prevent ``END_FINALLY`` + from re-raising the exception. (But non-local gotos should still be resumed.) + + All of the following opcodes expect arguments. An argument is two bytes, with the more significant byte last. - .. opcode:: STORE_NAME (namei) Implements ``name = TOS``. *namei* is the index of *name* in the attribute @@ -760,10 +779,9 @@ the more significant byte last. .. opcode:: MAKE_CLOSURE (argc) Creates a new function object, sets its *func_closure* slot, and pushes it on - the stack. TOS is the code associated with the function. If the code object has - N free variables, the next N items on the stack are the cells for these - variables. The function also has *argc* default parameters, where are found - before the cells. + the stack. TOS is the code associated with the function, TOS1 the tuple + containing cells for the closure's free variables. The function also has + *argc* default parameters, which are found below the cells. .. opcode:: BUILD_SLICE (argc)