]> granicus.if.org Git - python/commit
Rework CALL_FUNCTION* opcodes
authorVictor Stinner <victor.stinner@gmail.com>
Fri, 9 Sep 2016 17:17:08 +0000 (10:17 -0700)
committerVictor Stinner <victor.stinner@gmail.com>
Fri, 9 Sep 2016 17:17:08 +0000 (10:17 -0700)
commitf9b760f48ae2bd32ac347fe805b078a16037afee
tree5472de2d2cd70aab93c4ab4b00aabf7944caa11c
parente53592091afa172f97bf3d7af43041a28c6ff688
Rework CALL_FUNCTION* opcodes

Issue #27213: Rework CALL_FUNCTION* opcodes to produce shorter and more
efficient bytecode:

* CALL_FUNCTION now only accepts position arguments
* CALL_FUNCTION_KW accepts position arguments and keyword arguments, but keys
  of keyword arguments are packed into a constant tuple.
* CALL_FUNCTION_EX is the most generic, it expects a tuple and a dict for
  positional and keyword arguments.

CALL_FUNCTION_VAR and CALL_FUNCTION_VAR_KW opcodes have been removed.

2 tests of test_traceback are currently broken: skip test, the issue #28050 was
created to track the issue.

Patch by Demur Rumed, design by Serhiy Storchaka, reviewed by Serhiy Storchaka
and Victor Stinner.
12 files changed:
Include/opcode.h
Lib/dis.py
Lib/importlib/_bootstrap_external.py
Lib/opcode.py
Lib/test/test_dis.py
Lib/test/test_extcall.py
Lib/test/test_traceback.py
Python/ceval.c
Python/compile.c
Python/importlib.h
Python/importlib_external.h
Python/opcode_targets.h