[Python-checkins] bpo-36030: Remove _PyStack_AsTuple() and _PyStack_AsTupleSlice() (GH-12032)

Victor Stinner webhook-mailer at python.org
Mon Feb 25 16:37:41 EST 2019


https://github.com/python/cpython/commit/f1b9abe35f75393351b3d954a392122a3f8f6951
commit: f1b9abe35f75393351b3d954a392122a3f8f6951
branch: master
author: Sergey Fedoseev <fedoseev.sergey at gmail.com>
committer: Victor Stinner <vstinner at redhat.com>
date: 2019-02-25T22:37:26+01:00
summary:

bpo-36030: Remove _PyStack_AsTuple() and _PyStack_AsTupleSlice() (GH-12032)

files:
M Include/cpython/abstract.h
M Objects/call.c
M Python/bltinmodule.c

diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index 0e002659f6bf..991bea14ebf0 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -12,16 +12,6 @@ extern "C" {
 #  define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT
 #endif
 
-PyAPI_FUNC(PyObject*) _PyStack_AsTuple(
-    PyObject *const *stack,
-    Py_ssize_t nargs);
-
-PyAPI_FUNC(PyObject*) _PyStack_AsTupleSlice(
-    PyObject *const *stack,
-    Py_ssize_t nargs,
-    Py_ssize_t start,
-    Py_ssize_t end);
-
 /* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple)
    format to a Python dictionary ("kwargs" dict).
 
diff --git a/Objects/call.c b/Objects/call.c
index 3250f8a10dff..d52e7e26aeba 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -114,7 +114,7 @@ _PyObject_FastCallDict(PyObject *callable, PyObject *const *args, Py_ssize_t nar
             return NULL;
         }
 
-        argstuple = _PyStack_AsTuple(args, nargs);
+        argstuple = _PyTuple_FromArray(args, nargs);
         if (argstuple == NULL) {
             return NULL;
         }
@@ -176,7 +176,7 @@ _PyObject_FastCallKeywords(PyObject *callable, PyObject *const *stack, Py_ssize_
             return NULL;
         }
 
-        argstuple = _PyStack_AsTuple(stack, nargs);
+        argstuple = _PyTuple_FromArray(stack, nargs);
         if (argstuple == NULL) {
             return NULL;
         }
@@ -508,7 +508,7 @@ _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self,
     case METH_VARARGS | METH_KEYWORDS:
     {
         /* Slow-path: create a temporary tuple for positional arguments */
-        PyObject *argstuple = _PyStack_AsTuple(args, nargs);
+        PyObject *argstuple = _PyTuple_FromArray(args, nargs);
         if (argstuple == NULL) {
             goto exit;
         }
@@ -670,7 +670,7 @@ _PyMethodDef_RawFastCallKeywords(PyMethodDef *method, PyObject *self,
            and a temporary dict for keyword arguments */
         PyObject *argtuple;
 
-        argtuple = _PyStack_AsTuple(args, nargs);
+        argtuple = _PyTuple_FromArray(args, nargs);
         if (argtuple == NULL) {
             goto exit;
         }
@@ -1271,27 +1271,6 @@ PyObject_CallFunctionObjArgs(PyObject *callable, ...)
 
 /* --- PyStack functions ------------------------------------------ */
 
-/* Issue #29234: Inlining _PyStack_AsTuple() into callers increases their
-   stack consumption, Disable inlining to optimize the stack consumption. */
-_Py_NO_INLINE PyObject *
-_PyStack_AsTuple(PyObject *const *stack, Py_ssize_t nargs)
-{
-    return _PyTuple_FromArray(stack, nargs);
-}
-
-
-PyObject*
-_PyStack_AsTupleSlice(PyObject *const *stack, Py_ssize_t nargs,
-                      Py_ssize_t start, Py_ssize_t end)
-{
-    assert(0 <= start);
-    assert(end <= nargs);
-    assert(start <= end);
-
-    return _PyTuple_FromArray(stack + start, end - start);
-}
-
-
 PyObject *
 _PyStack_AsDict(PyObject *const *values, PyObject *kwnames)
 {
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index eebdc5ba0531..a19b8b8ddc86 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -5,6 +5,7 @@
 #include "ast.h"
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
 #include "pycore_pystate.h"
+#include "pycore_tupleobject.h"
 
 _Py_IDENTIFIER(__builtins__);
 _Py_IDENTIFIER(__dict__);
@@ -121,7 +122,7 @@ builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
                         "__build_class__: name is not a string");
         return NULL;
     }
-    orig_bases = _PyStack_AsTupleSlice(args, nargs, 2, nargs);
+    orig_bases = _PyTuple_FromArray(args + 2, nargs - 2);
     if (orig_bases == NULL)
         return NULL;
 



More information about the Python-checkins mailing list