From: Sergey Fedoseev Date: Mon, 25 Feb 2019 21:37:26 +0000 (+0500) Subject: bpo-36030: Remove _PyStack_AsTuple() and _PyStack_AsTupleSlice() (GH-12032) X-Git-Tag: v3.8.0a3~234 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f1b9abe35f75393351b3d954a392122a3f8f6951;p=thirdparty%2FPython%2Fcpython.git bpo-36030: Remove _PyStack_AsTuple() and _PyStack_AsTupleSlice() (GH-12032) --- 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 */ #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;