bpo-26213: Document _UNPACK bytecodes and BUILD_MAP changes (GH-440) · python/cpython@226af23 (original) (raw)
`@@ -772,8 +772,13 @@ All of the following opcodes use their arguments.
`
772
772
``
773
773
`.. opcode:: BUILD_MAP (count)
`
774
774
``
775
``
`-
Pushes a new dictionary object onto the stack. The dictionary is pre-sized
`
776
``
`-
to hold count entries.
`
``
775
Pushes a new dictionary object onto the stack. Pops ``2 * count`` items
``
776
`+
so that the dictionary holds count entries:
`
``
777
``{..., TOS3: TOS2, TOS1: TOS}``.
``
778
+
``
779
`+
.. versionchanged:: 3.5
`
``
780
`+
The dictionary is created from stack items instead of creating an
`
``
781
`+
empty dictionary pre-sized to hold count items.
`
777
782
``
778
783
``
779
784
`.. opcode:: BUILD_CONST_KEY_MAP (count)
`
`@@ -793,6 +798,52 @@ All of the following opcodes use their arguments.
`
793
798
` .. versionadded:: 3.6
`
794
799
``
795
800
``
``
801
`+
.. opcode:: BUILD_TUPLE_UNPACK (count)
`
``
802
+
``
803
`+
Pops count iterables from the stack, joins them in a single tuple,
`
``
804
`+
and pushes the result. Implements iterable unpacking in tuple
`
``
805
displays ``(*x, *y, *z)``.
``
806
+
``
807
`+
.. versionadded:: 3.5
`
``
808
+
``
809
+
``
810
`+
.. opcode:: BUILD_LIST_UNPACK (count)
`
``
811
+
``
812
`` +
This is similar to :opcode:BUILD_TUPLE_UNPACK
, but pushes a list
``
``
813
`+
instead of tuple. Implements iterable unpacking in list
`
``
814
displays ``[*x, *y, *z]``.
``
815
+
``
816
`+
.. versionadded:: 3.5
`
``
817
+
``
818
+
``
819
`+
.. opcode:: BUILD_SET_UNPACK (count)
`
``
820
+
``
821
`` +
This is similar to :opcode:BUILD_TUPLE_UNPACK
, but pushes a set
``
``
822
`+
instead of tuple. Implements iterable unpacking in set
`
``
823
displays ``{*x, *y, *z}``.
``
824
+
``
825
`+
.. versionadded:: 3.5
`
``
826
+
``
827
+
``
828
`+
.. opcode:: BUILD_MAP_UNPACK (count)
`
``
829
+
``
830
`+
Pops count mappings from the stack, merges them into a single dictionary,
`
``
831
`+
and pushes the result. Implements dictionary unpacking in dictionary
`
``
832
displays ``{**x, **y, **z}``.
``
833
+
``
834
`+
.. versionadded:: 3.5
`
``
835
+
``
836
+
``
837
`+
.. opcode:: BUILD_MAP_UNPACK_WITH_CALL (oparg)
`
``
838
+
``
839
`` +
This is similar to :opcode:BUILD_MAP_UNPACK
,
``
``
840
but is used for ``f(**x, **y, **z)`` call syntax. The lowest byte of
``
841
`+
oparg is the count of mappings, the relative position of the
`
``
842
corresponding callable ``f`` is encoded in the second byte of *oparg*.
``
843
+
``
844
`+
.. versionadded:: 3.5
`
``
845
+
``
846
+
796
847
`.. opcode:: LOAD_ATTR (namei)
`
797
848
``
798
849
``` Replaces TOS with getattr(TOS, co_names[namei])
.
```