mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
gh-117139: Add _PyTuple_FromStackRefSteal and use it (#121244)
Avoids the extra conversion from stack refs to PyObjects.
This commit is contained in:
parent
1ac273224a
commit
8e8d202f55
8 changed files with 28 additions and 33 deletions
|
@ -1780,13 +1780,7 @@ dummy_func(
|
|||
}
|
||||
|
||||
inst(BUILD_TUPLE, (values[oparg] -- tup)) {
|
||||
STACKREFS_TO_PYOBJECTS(values, oparg, values_o);
|
||||
if (CONVERSION_FAILED(values_o)) {
|
||||
DECREF_INPUTS();
|
||||
ERROR_IF(true, error);
|
||||
}
|
||||
PyObject *tup_o = _PyTuple_FromArraySteal(values_o, oparg);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(values_o);
|
||||
PyObject *tup_o = _PyTuple_FromStackRefSteal(values, oparg);
|
||||
ERROR_IF(tup_o == NULL, error);
|
||||
tup = PyStackRef_FromPyObjectSteal(tup_o);
|
||||
}
|
||||
|
|
|
@ -1500,13 +1500,7 @@ initialize_locals(PyThreadState *tstate, PyFunctionObject *func,
|
|||
u = (PyObject *)&_Py_SINGLETON(tuple_empty);
|
||||
}
|
||||
else {
|
||||
assert(args != NULL);
|
||||
STACKREFS_TO_PYOBJECTS((_PyStackRef *)args, argcount, args_o);
|
||||
if (args_o == NULL) {
|
||||
goto fail_pre_positional;
|
||||
}
|
||||
u = _PyTuple_FromArraySteal((args_o + n), argcount - n);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
|
||||
u = _PyTuple_FromStackRefSteal(args + n, argcount - n);
|
||||
}
|
||||
if (u == NULL) {
|
||||
goto fail_post_positional;
|
||||
|
|
10
Python/executor_cases.c.h
generated
10
Python/executor_cases.c.h
generated
|
@ -1816,15 +1816,7 @@
|
|||
_PyStackRef tup;
|
||||
oparg = CURRENT_OPARG();
|
||||
values = &stack_pointer[-oparg];
|
||||
STACKREFS_TO_PYOBJECTS(values, oparg, values_o);
|
||||
if (CONVERSION_FAILED(values_o)) {
|
||||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(values[_i]);
|
||||
}
|
||||
if (true) JUMP_TO_ERROR();
|
||||
}
|
||||
PyObject *tup_o = _PyTuple_FromArraySteal(values_o, oparg);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(values_o);
|
||||
PyObject *tup_o = _PyTuple_FromStackRefSteal(values, oparg);
|
||||
if (tup_o == NULL) JUMP_TO_ERROR();
|
||||
tup = PyStackRef_FromPyObjectSteal(tup_o);
|
||||
stack_pointer[-oparg] = tup;
|
||||
|
|
10
Python/generated_cases.c.h
generated
10
Python/generated_cases.c.h
generated
|
@ -769,15 +769,7 @@
|
|||
_PyStackRef *values;
|
||||
_PyStackRef tup;
|
||||
values = &stack_pointer[-oparg];
|
||||
STACKREFS_TO_PYOBJECTS(values, oparg, values_o);
|
||||
if (CONVERSION_FAILED(values_o)) {
|
||||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(values[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -oparg; goto error; }
|
||||
}
|
||||
PyObject *tup_o = _PyTuple_FromArraySteal(values_o, oparg);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(values_o);
|
||||
PyObject *tup_o = _PyTuple_FromStackRefSteal(values, oparg);
|
||||
if (tup_o == NULL) { stack_pointer += -oparg; goto error; }
|
||||
tup = PyStackRef_FromPyObjectSteal(tup_o);
|
||||
stack_pointer[-oparg] = tup;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue