mirror of
https://github.com/python/cpython.git
synced 2024-11-24 17:47:13 +01:00
parent
8e9a37dde4
commit
e37ac5fbb6
@ -382,6 +382,27 @@ Test a kwargs mapping with duplicated keys.
|
||||
...
|
||||
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):
|
||||
|
@ -0,0 +1 @@
|
||||
Remove dead code from ``CALL_FUNCTION_EX`` opcode.
|
@ -4716,19 +4716,8 @@ handle_eval_breaker:
|
||||
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));
|
||||
}
|
||||
callargs = POP();
|
||||
|
Loading…
Reference in New Issue
Block a user