Skip to content

Commit

Permalink
gh-96751: Remove dead code from CALL_FUNCTION_EX opcode (GH-96752)
Browse files Browse the repository at this point in the history
  • Loading branch information
sobolevn authored Sep 15, 2022
1 parent 8e9a37d commit e37ac5f
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 13 deletions.
21 changes: 21 additions & 0 deletions Lib/test/test_extcall.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,27 @@
...
TypeError: test.test_extcall.g() got multiple values for keyword argument 'x'
Call with dict subtype:
>>> class MyDict(dict):
... pass
>>> def s1(**kwargs):
... return kwargs
>>> def s2(*args, **kwargs):
... return (args, kwargs)
>>> def s3(*, n, **kwargs):
... return (n, kwargs)
>>> md = MyDict({'a': 1, 'b': 2})
>>> assert s1(**md) == {'a': 1, 'b': 2}
>>> assert s2(*(1, 2), **md) == ((1, 2), {'a': 1, 'b': 2})
>>> assert s3(**MyDict({'n': 1, 'b': 2})) == (1, {'b': 2})
>>> s3(**md)
Traceback (most recent call last):
...
TypeError: s3() missing 1 required keyword-only argument: 'n'
Another helper function
>>> def f2(*a, **b):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Remove dead code from ``CALL_FUNCTION_EX`` opcode.
15 changes: 2 additions & 13 deletions Python/ceval.c
Original file line number Diff line number Diff line change
Expand Up @@ -4716,19 +4716,8 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
PyObject *func, *callargs, *kwargs = NULL, *result;
if (oparg & 0x01) {
kwargs = POP();
if (!PyDict_CheckExact(kwargs)) {
PyObject *d = PyDict_New();
if (d == NULL)
goto error;
if (_PyDict_MergeEx(d, kwargs, 2) < 0) {
Py_DECREF(d);
format_kwargs_error(tstate, SECOND(), kwargs);
Py_DECREF(kwargs);
goto error;
}
Py_DECREF(kwargs);
kwargs = d;
}
// DICT_MERGE is called before this opcode if there are kwargs.
// It converts all dict subtypes in kwargs into regular dicts.
assert(PyDict_CheckExact(kwargs));

This comment has been minimized.

Copy link
@vovoxxx7

vovoxxx7 Sep 15, 2022

e37ac5f

}
callargs = POP();
Expand Down

1 comment on commit e37ac5f

@vovoxxx7
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hii

Please sign in to comment.