mirror of
https://github.com/python/cpython.git
synced 2025-10-07 15:42:02 +00:00
bpo-38644: Add _PyObject_Call() (GH-17089)
* Add pycore_call.h internal header file. * Add _PyObject_Call(): PyObject_Call() with tstate * Add _PyObject_CallNoArgTstate(): _PyObject_CallNoArg() with tstate * Add _PyObject_FastCallDictTstate(): _PyObject_FastCallDict() with tstate * _PyObject_Call_Prepend() now takes tstate * Replace _PyObject_FastCall() calls with _PyObject_VectorcallTstate() calls
This commit is contained in:
parent
b9e681261c
commit
4d231bcc77
10 changed files with 217 additions and 138 deletions
|
@ -10,6 +10,7 @@
|
|||
#define PY_LOCAL_AGGRESSIVE
|
||||
|
||||
#include "Python.h"
|
||||
#include "pycore_call.h"
|
||||
#include "pycore_ceval.h"
|
||||
#include "pycore_code.h"
|
||||
#include "pycore_object.h"
|
||||
|
@ -4306,7 +4307,6 @@ fail: /* Jump here from prelude on failure */
|
|||
current Python frame (f), the associated C stack is still in use,
|
||||
so recursion_depth must be boosted for the duration.
|
||||
*/
|
||||
assert(tstate != NULL);
|
||||
if (Py_REFCNT(f) > 1) {
|
||||
Py_DECREF(f);
|
||||
_PyObject_GC_TRACK(f);
|
||||
|
@ -5024,10 +5024,11 @@ do_call_core(PyThreadState *tstate, PyObject *func, PyObject *callargs, PyObject
|
|||
return NULL;
|
||||
}
|
||||
|
||||
C_TRACE(result, _PyObject_FastCallDict(func,
|
||||
&_PyTuple_ITEMS(callargs)[1],
|
||||
nargs - 1,
|
||||
kwdict));
|
||||
C_TRACE(result, _PyObject_FastCallDictTstate(
|
||||
tstate, func,
|
||||
&_PyTuple_ITEMS(callargs)[1],
|
||||
nargs - 1,
|
||||
kwdict));
|
||||
Py_DECREF(func);
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue