Message266685
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. |
|
Date |
User |
Action |
Args |
2016-05-30 09:31:20 | serhiy.storchaka | set | recipients:
+ serhiy.storchaka, brett.cannon, georg.brandl, ncoghlan, vstinner, benjamin.peterson, yselivanov, Demur Rumed |
2016-05-30 09:31:19 | serhiy.storchaka | set | messageid: <1464600679.25.0.054376782296.issue27140@psf.upfronthosting.co.za> |
2016-05-30 09:31:19 | serhiy.storchaka | link | issue27140 messages |
2016-05-30 09:31:18 | serhiy.storchaka | create | |
|