@@ -109,7 +109,9 @@ _Py_CheckSlotResult(PyObject *obj, const char *slot_name, int success)
109109PyObject *
110110PyObject_CallNoArgs (PyObject * func )
111111{
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 );
113115}
114116
115117
@@ -322,7 +324,7 @@ _PyObject_Call(PyThreadState *tstate, PyObject *callable,
322324 assert (!_PyErr_Occurred (tstate ));
323325 assert (PyTuple_Check (args ));
324326 assert (kwargs == NULL || PyDict_Check (kwargs ));
325-
327+ EVAL_CALL_STAT_INC_IF_FUNCTION ( EVAL_CALL_API , callable );
326328 vectorcallfunc vector_func = _PyVectorcall_Function (callable );
327329 if (vector_func != NULL ) {
328330 return _PyVectorcall_Call (tstate , vector_func , callable , args , kwargs );
@@ -367,6 +369,7 @@ PyCFunction_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
367369PyObject *
368370PyObject_CallOneArg (PyObject * func , PyObject * arg )
369371{
372+ EVAL_CALL_STAT_INC_IF_FUNCTION (EVAL_CALL_API , func );
370373 assert (arg != NULL );
371374 PyObject * _args [2 ];
372375 PyObject * * args = _args + 1 ; // For PY_VECTORCALL_ARGUMENTS_OFFSET
@@ -389,6 +392,7 @@ _PyFunction_Vectorcall(PyObject *func, PyObject* const* stack,
389392 assert (nargs >= 0 );
390393 PyThreadState * tstate = _PyThreadState_GET ();
391394 assert (nargs == 0 || stack != NULL );
395+ EVAL_CALL_STAT_INC (EVAL_CALL_FUNCTION_VECTORCALL );
392396 if (((PyCodeObject * )f -> func_code )-> co_flags & CO_OPTIMIZED ) {
393397 return _PyEval_Vector (tstate , f , NULL , stack , nargs , kwnames );
394398 }
@@ -520,7 +524,7 @@ _PyObject_CallFunctionVa(PyThreadState *tstate, PyObject *callable,
520524 if (stack == NULL ) {
521525 return NULL ;
522526 }
523-
527+ EVAL_CALL_STAT_INC_IF_FUNCTION ( EVAL_CALL_API , callable );
524528 if (nargs == 1 && PyTuple_Check (stack [0 ])) {
525529 /* Special cases for backward compatibility:
526530 - PyObject_CallFunction(func, "O", tuple) calls func(*tuple)
@@ -815,6 +819,11 @@ object_vacall(PyThreadState *tstate, PyObject *base,
815819 stack [i ] = va_arg (vargs , PyObject * );
816820 }
817821
822+ #ifdef Py_STATS
823+ if (PyFunction_Check (callable )) {
824+ EVAL_CALL_STAT_INC (EVAL_CALL_API );
825+ }
826+ #endif
818827 /* Call the function */
819828 result = _PyObject_VectorcallTstate (tstate , callable , stack , nargs , NULL );
820829
@@ -852,6 +861,7 @@ PyObject_VectorcallMethod(PyObject *name, PyObject *const *args,
852861 args ++ ;
853862 nargsf -- ;
854863 }
864+ EVAL_CALL_STAT_INC_IF_FUNCTION (EVAL_CALL_METHOD , callable );
855865 PyObject * result = _PyObject_VectorcallTstate (tstate , callable ,
856866 args , nargsf , kwnames );
857867 Py_DECREF (callable );
0 commit comments