diff options
author | Sam Gross <colesbury@gmail.com> | 2024-08-12 18:49:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-12 18:49:49 (GMT) |
commit | ab094d1b2b348f670743f88e52d1a3f2cab5abd5 (patch) | |
tree | 4b428aee12b8eb286e1405527846c40206adef05 /Python | |
parent | 736fe4d23e267a70d3b769046f03c1f3bdc0f430 (diff) | |
download | cpython-ab094d1b2b348f670743f88e52d1a3f2cab5abd5.zip cpython-ab094d1b2b348f670743f88e52d1a3f2cab5abd5.tar.gz cpython-ab094d1b2b348f670743f88e52d1a3f2cab5abd5.tar.bz2 |
gh-117139: Replace _PyList_FromArraySteal with stack ref variant (#122830)
This replaces `_PyList_FromArraySteal` with `_PyList_FromStackRefSteal`.
It's functionally equivalent, but takes a `_PyStackRef` array instead of
an array of `PyObject` pointers.
Co-authored-by: Ken Jin <kenjin@python.org>
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bytecodes.c | 8 | ||||
-rw-r--r-- | Python/executor_cases.c.h | 10 | ||||
-rw-r--r-- | Python/generated_cases.c.h | 14 |
3 files changed, 3 insertions, 29 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 70c7d82..7c448f4 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1666,13 +1666,7 @@ dummy_func( } inst(BUILD_LIST, (values[oparg] -- list)) { - STACKREFS_TO_PYOBJECTS(values, oparg, values_o); - if (CONVERSION_FAILED(values_o)) { - DECREF_INPUTS(); - ERROR_IF(true, error); - } - PyObject *list_o = _PyList_FromArraySteal(values_o, oparg); - STACKREFS_TO_PYOBJECTS_CLEANUP(values_o); + PyObject *list_o = _PyList_FromStackRefSteal(values, oparg); ERROR_IF(list_o == NULL, error); list = PyStackRef_FromPyObjectSteal(list_o); } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index d64ef0c..9102d68 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -1882,15 +1882,7 @@ _PyStackRef list; 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 *list_o = _PyList_FromArraySteal(values_o, oparg); - STACKREFS_TO_PYOBJECTS_CLEANUP(values_o); + PyObject *list_o = _PyList_FromStackRefSteal(values, oparg); if (list_o == NULL) JUMP_TO_ERROR(); list = PyStackRef_FromPyObjectSteal(list_o); stack_pointer[-oparg] = list; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index a290e1e..11ebd25 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -631,19 +631,7 @@ _PyStackRef *values; _PyStackRef list; 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; - assert(WITHIN_STACK_BOUNDS()); - goto error; - } - } - PyObject *list_o = _PyList_FromArraySteal(values_o, oparg); - STACKREFS_TO_PYOBJECTS_CLEANUP(values_o); + PyObject *list_o = _PyList_FromStackRefSteal(values, oparg); if (list_o == NULL) { stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); |