diff options
Diffstat (limited to 'Objects/tupleobject.c')
-rw-r--r-- | Objects/tupleobject.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 5ae1ee9a89a..994258f20b4 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -391,6 +391,27 @@ _PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) } PyObject * +_PyTuple_FromStackRefSteal(const _PyStackRef *src, Py_ssize_t n) +{ + if (n == 0) { + return tuple_get_empty(); + } + PyTupleObject *tuple = tuple_alloc(n); + if (tuple == NULL) { + for (Py_ssize_t i = 0; i < n; i++) { + PyStackRef_CLOSE(src[i]); + } + return NULL; + } + PyObject **dst = tuple->ob_item; + for (Py_ssize_t i = 0; i < n; i++) { + dst[i] = PyStackRef_AsPyObjectSteal(src[i]); + } + _PyObject_GC_TRACK(tuple); + return (PyObject *)tuple; +} + +PyObject * _PyTuple_FromArraySteal(PyObject *const *src, Py_ssize_t n) { if (n == 0) { |