bpo-28810: Document remaining bytecode changes in 3.6 (GH-651) (GH-808)

(cherry picked from commit 8f9e1bbf2d)
This commit is contained in:
Brett Cannon 2017-03-24 14:18:53 -07:00 committed by GitHub
parent 8c8785b2f8
commit 74bfcc314b

View file

@ -20,6 +20,10 @@ interpreter.
between versions of Python. Use of this module should not be considered to between versions of Python. Use of this module should not be considered to
work across Python VMs or Python releases. work across Python VMs or Python releases.
.. versionchanged:: 3.6
Use 2 bytes for each instruction. Previously the number of bytes varied
by instruction.
Example: Given the function :func:`myfunc`:: Example: Given the function :func:`myfunc`::
@ -210,6 +214,11 @@ operation is being performed, so the intermediate analysis object isn't useful:
This generator function uses the ``co_firstlineno`` and ``co_lnotab`` This generator function uses the ``co_firstlineno`` and ``co_lnotab``
attributes of the code object *code* to find the offsets which are starts of attributes of the code object *code* to find the offsets which are starts of
lines in the source code. They are generated as ``(offset, lineno)`` pairs. lines in the source code. They are generated as ``(offset, lineno)`` pairs.
See :source:`Objects/lnotab_notes.txt` for the ``co_lnotab`` format and
how to decode it.
.. versionchanged:: 3.6
Line numbers can be decreasing. Before, they were always increasing.
.. function:: findlabels(code) .. function:: findlabels(code)
@ -1105,8 +1114,13 @@ All of the following opcodes use their arguments.
.. opcode:: HAVE_ARGUMENT .. opcode:: HAVE_ARGUMENT
This is not really an opcode. It identifies the dividing line between This is not really an opcode. It identifies the dividing line between
opcodes which don't take arguments ``< HAVE_ARGUMENT`` and those which do opcodes which don't use their argument and those that do
``>= HAVE_ARGUMENT``. (``< HAVE_ARGUMENT`` and ``>= HAVE_ARGUMENT``, respectively).
.. versionchanged:: 3.6
Now every instruction has an argument, but opcodes ``< HAVE_ARGUMENT``
ignore it. Before, only opcodes ``>= HAVE_ARGUMENT`` had an argument.
.. _opcode_collections: .. _opcode_collections: