Skip to content

Commit 4d0630d

Browse files
authored
bpo-26213: Document _UNPACK bytecodes and BUILD_MAP changes (GH-441)
(cherry picked from commit 0705f66)
1 parent dd2000c commit 4d0630d

File tree

1 file changed

+53
-2
lines changed

1 file changed

+53
-2
lines changed

Doc/library/dis.rst

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -765,8 +765,59 @@ the more significant byte last.
765765

766766
.. opcode:: BUILD_MAP (count)
767767

768-
Pushes a new dictionary object onto the stack. The dictionary is pre-sized
769-
to hold *count* entries.
768+
Pushes a new dictionary object onto the stack. Pops ``2 * count`` items
769+
so that the dictionary holds *count* entries:
770+
``{..., TOS3: TOS2, TOS1: TOS}``.
771+
772+
.. versionchanged:: 3.5
773+
The dictionary is created from stack items instead of creating an
774+
empty dictionary pre-sized to hold *count* items.
775+
776+
777+
.. opcode:: BUILD_TUPLE_UNPACK (count)
778+
779+
Pops *count* iterables from the stack, joins them in a single tuple,
780+
and pushes the result. Implements iterable unpacking in tuple
781+
displays ``(*x, *y, *z)``.
782+
783+
.. versionadded:: 3.5
784+
785+
786+
.. opcode:: BUILD_LIST_UNPACK (count)
787+
788+
This is similar to :opcode:`BUILD_TUPLE_UNPACK`, but pushes a list
789+
instead of tuple. Implements iterable unpacking in list
790+
displays ``[*x, *y, *z]``.
791+
792+
.. versionadded:: 3.5
793+
794+
795+
.. opcode:: BUILD_SET_UNPACK (count)
796+
797+
This is similar to :opcode:`BUILD_TUPLE_UNPACK`, but pushes a set
798+
instead of tuple. Implements iterable unpacking in set
799+
displays ``{*x, *y, *z}``.
800+
801+
.. versionadded:: 3.5
802+
803+
804+
.. opcode:: BUILD_MAP_UNPACK (count)
805+
806+
Pops *count* mappings from the stack, merges them into a single dictionary,
807+
and pushes the result. Implements dictionary unpacking in dictionary
808+
displays ``{**x, **y, **z}``.
809+
810+
.. versionadded:: 3.5
811+
812+
813+
.. opcode:: BUILD_MAP_UNPACK_WITH_CALL (oparg)
814+
815+
This is similar to :opcode:`BUILD_MAP_UNPACK`,
816+
but is used for ``f(**x, **y, **z)`` call syntax. The lowest byte of
817+
*oparg* is the count of mappings, the relative position of the
818+
corresponding callable ``f`` is encoded in the second byte of *oparg*.
819+
820+
.. versionadded:: 3.5
770821

771822

772823
.. opcode:: LOAD_ATTR (namei)

0 commit comments

Comments
 (0)