Serhiy Storchaka added the comment:

Proposed patch adds the BUILD_MAP_EX opcode (maybe somebody propose better 
name?). It takes values from the stack and keys from the tuple on the top of 
the stack. Currently it affects only creating a dict with const keys and 
calling a function with keywords after the var-keyword argument.

$ echo "{'a': 1, 'b': 2, 'c': 3}" | ./python -m dis

Unpatched:

  1           0 LOAD_CONST               0 ('a')
              2 LOAD_CONST               1 (1)
              4 LOAD_CONST               2 ('b')
              6 LOAD_CONST               3 (2)
              8 LOAD_CONST               4 ('c')
             10 LOAD_CONST               5 (3)
             12 BUILD_MAP                3
             14 POP_TOP
             16 LOAD_CONST               6 (None)
             18 RETURN_VALUE

Patched:

  1           0 LOAD_CONST               0 (1)
              2 LOAD_CONST               1 (2)
              4 LOAD_CONST               2 (3)
              6 LOAD_CONST               7 (('a', 'b', 'c'))
              8 BUILD_MAP_EX             3
             10 POP_TOP
             12 LOAD_CONST               6 (None)
             14 RETURN_VALUE

$ echo "f(**kw, a=1, b=2, c=3)" | ./python -m dis

Unpatched:

  1           0 LOAD_NAME                0 (f)
              2 LOAD_NAME                1 (kw)
              4 LOAD_CONST               0 ('a')
              6 LOAD_CONST               1 (1)
              8 LOAD_CONST               2 ('b')
             10 LOAD_CONST               3 (2)
             12 LOAD_CONST               4 ('c')
             14 LOAD_CONST               5 (3)
             16 BUILD_MAP                3
             18 EXTENDED_ARG             1
             20 BUILD_MAP_UNPACK_WITH_CALL   258
             22 CALL_FUNCTION_KW         0 (0 positional, 0 keyword pair)
             24 POP_TOP
             26 LOAD_CONST               6 (None)
             28 RETURN_VALUE

Patched:

  1           0 LOAD_NAME                0 (f)
              2 LOAD_NAME                1 (kw)
              4 LOAD_CONST               0 (1)
              6 LOAD_CONST               1 (2)
              8 LOAD_CONST               2 (3)
             10 LOAD_CONST               7 (('a', 'b', 'c'))
             12 BUILD_MAP_EX             3
             14 EXTENDED_ARG             1
             16 BUILD_MAP_UNPACK_WITH_CALL   258
             18 CALL_FUNCTION_KW         0 (0 positional, 0 keyword pair)
             20 POP_TOP
             22 LOAD_CONST               6 (None)
             24 RETURN_VALUE

It could be more useful for new MAKE_FUNCTION opcode (issue27095) and maybe for 
new CALL_FUNCTION* opcodes.

The benefit of BUILD_MAP_EX is less LOAD_CONST instructions and less stack 
consuming.

----------
keywords: +patch
nosy: +benjamin.peterson, brett.cannon, georg.brandl, ncoghlan, yselivanov
stage: needs patch -> patch review
Added file: http://bugs.python.org/file43055/BUILD_MAP_EX.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27140>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to