@@ -109,7 +109,9 @@ _Py_CheckSlotResult(PyObject *obj, const char *slot_name, int success)
109
109
PyObject *
110
110
PyObject_CallNoArgs (PyObject * func )
111
111
{
112
- return _PyObject_CallNoArgs (func );
112
+ EVAL_CALL_STAT_INC_IF_FUNCTION (EVAL_CALL_API , func );
113
+ PyThreadState * tstate = _PyThreadState_GET ();
114
+ return _PyObject_VectorcallTstate (tstate , func , NULL , 0 , NULL );
113
115
}
114
116
115
117
@@ -322,7 +324,7 @@ _PyObject_Call(PyThreadState *tstate, PyObject *callable,
322
324
assert (!_PyErr_Occurred (tstate ));
323
325
assert (PyTuple_Check (args ));
324
326
assert (kwargs == NULL || PyDict_Check (kwargs ));
325
-
327
+ EVAL_CALL_STAT_INC_IF_FUNCTION ( EVAL_CALL_API , callable );
326
328
vectorcallfunc vector_func = _PyVectorcall_Function (callable );
327
329
if (vector_func != NULL ) {
328
330
return _PyVectorcall_Call (tstate , vector_func , callable , args , kwargs );
@@ -367,6 +369,7 @@ PyCFunction_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
367
369
PyObject *
368
370
PyObject_CallOneArg (PyObject * func , PyObject * arg )
369
371
{
372
+ EVAL_CALL_STAT_INC_IF_FUNCTION (EVAL_CALL_API , func );
370
373
assert (arg != NULL );
371
374
PyObject * _args [2 ];
372
375
PyObject * * args = _args + 1 ; // For PY_VECTORCALL_ARGUMENTS_OFFSET
@@ -389,6 +392,7 @@ _PyFunction_Vectorcall(PyObject *func, PyObject* const* stack,
389
392
assert (nargs >= 0 );
390
393
PyThreadState * tstate = _PyThreadState_GET ();
391
394
assert (nargs == 0 || stack != NULL );
395
+ EVAL_CALL_STAT_INC (EVAL_CALL_FUNCTION_VECTORCALL );
392
396
if (((PyCodeObject * )f -> func_code )-> co_flags & CO_OPTIMIZED ) {
393
397
return _PyEval_Vector (tstate , f , NULL , stack , nargs , kwnames );
394
398
}
@@ -520,7 +524,7 @@ _PyObject_CallFunctionVa(PyThreadState *tstate, PyObject *callable,
520
524
if (stack == NULL ) {
521
525
return NULL ;
522
526
}
523
-
527
+ EVAL_CALL_STAT_INC_IF_FUNCTION ( EVAL_CALL_API , callable );
524
528
if (nargs == 1 && PyTuple_Check (stack [0 ])) {
525
529
/* Special cases for backward compatibility:
526
530
- PyObject_CallFunction(func, "O", tuple) calls func(*tuple)
@@ -815,6 +819,11 @@ object_vacall(PyThreadState *tstate, PyObject *base,
815
819
stack [i ] = va_arg (vargs , PyObject * );
816
820
}
817
821
822
+ #ifdef Py_STATS
823
+ if (PyFunction_Check (callable )) {
824
+ EVAL_CALL_STAT_INC (EVAL_CALL_API );
825
+ }
826
+ #endif
818
827
/* Call the function */
819
828
result = _PyObject_VectorcallTstate (tstate , callable , stack , nargs , NULL );
820
829
@@ -852,6 +861,7 @@ PyObject_VectorcallMethod(PyObject *name, PyObject *const *args,
852
861
args ++ ;
853
862
nargsf -- ;
854
863
}
864
+ EVAL_CALL_STAT_INC_IF_FUNCTION (EVAL_CALL_METHOD , callable );
855
865
PyObject * result = _PyObject_VectorcallTstate (tstate , callable ,
856
866
args , nargsf , kwnames );
857
867
Py_DECREF (callable );
0 commit comments