Issue #27213: Fixed different issues with reworked CALL_FUNCTION* opcodes.
* BUILD_TUPLE_UNPACK and BUILD_MAP_UNPACK_WITH_CALL no longer generated with
single tuple or dict.
* Restored more informative error messages for incorrect var-positional and
var-keyword arguments.
* Removed code duplications in _PyEval_EvalCodeWithName().
* Removed redundant runtime checks and parameters in _PyStack_AsDict().
* Added a workaround and enabled previously disabled test in test_traceback.
* Removed dead code from the dis module.
diff --git a/Python/compile.c b/Python/compile.c
index 6bab86e..9502fee 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -3503,7 +3503,7 @@
asdl_seq *keywords)
{
Py_ssize_t i, nseen, nelts, nkwelts;
- int musttupleunpack = 0, mustdictunpack = 0;
+ int mustdictunpack = 0;
/* the number of tuples and dictionaries on the stack */
Py_ssize_t nsubargs = 0, nsubkwargs = 0;
@@ -3532,7 +3532,6 @@
}
VISIT(c, expr, elt->v.Starred.value);
nsubargs++;
- musttupleunpack = 1;
}
else {
VISIT(c, expr, elt);
@@ -3541,13 +3540,13 @@
}
/* Same dance again for keyword arguments */
- if (musttupleunpack || mustdictunpack) {
+ if (nsubargs || mustdictunpack) {
if (nseen) {
/* Pack up any trailing positional arguments. */
ADDOP_I(c, BUILD_TUPLE, nseen);
nsubargs++;
}
- if (musttupleunpack || nsubargs > 1) {
+ if (nsubargs > 1) {
/* If we ended up with more than one stararg, we need
to concatenate them into a single sequence. */
ADDOP_I(c, BUILD_TUPLE_UNPACK, nsubargs);
@@ -3579,7 +3578,7 @@
return 0;
nsubkwargs++;
}
- if (mustdictunpack || nsubkwargs > 1) {
+ if (nsubkwargs > 1) {
/* Pack it all up */
ADDOP_I(c, BUILD_MAP_UNPACK_WITH_CALL, nsubkwargs);
}