gh-117139: Add _PyTuple_FromStackRefSteal and use it (#121244)

Avoids the extra conversion from stack refs to PyObjects.
This commit is contained in:
Sam Gross 2024-07-02 12:30:14 -04:00 committed by GitHub
parent 1ac273224a
commit 8e8d202f55
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 28 additions and 33 deletions

View file

@ -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;