_PyFunction_FastCallDict() supports keyword args

Issue #27809:

* Rename _PyFunction_FastCall() to _PyFunction_FastCallDict()
* Rename _PyCFunction_FastCall() to _PyCFunction_FastCallDict()
*  _PyFunction_FastCallDict() now supports keyword arguments
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 2ce7f32..0e67693 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2255,7 +2255,8 @@
 }
 
 PyObject *
-_PyObject_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs)
+_PyObject_FastCallDict(PyObject *func, PyObject **args, int nargs,
+                       PyObject *kwargs)
 {
     ternaryfunc call;
     PyObject *result = NULL;
@@ -2268,19 +2269,17 @@
     assert(func != NULL);
     assert(nargs >= 0);
     assert(nargs == 0 || args != NULL);
-    /* issue #27128: support for keywords will come later:
-       _PyFunction_FastCall() doesn't support keyword arguments yet */
-    assert(kwargs == NULL);
+    assert(kwargs == NULL || PyDict_Check(kwargs));
 
     if (Py_EnterRecursiveCall(" while calling a Python object")) {
         return NULL;
     }
 
     if (PyFunction_Check(func)) {
-        result = _PyFunction_FastCall(func, args, nargs, kwargs);
+        result = _PyFunction_FastCallDict(func, args, nargs, kwargs);
     }
     else if (PyCFunction_Check(func)) {
-        result = _PyCFunction_FastCall(func, args, nargs, kwargs);
+        result = _PyCFunction_FastCallDict(func, args, nargs, kwargs);
     }
     else {
         PyObject *tuple;
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index 0e26232..edb2fc0 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -146,8 +146,8 @@
 }
 
 PyObject *
-_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, int nargs,
-                      PyObject *kwargs)
+_PyCFunction_FastCallDict(PyObject *func_obj, PyObject **args, int nargs,
+                          PyObject *kwargs)
 {
     PyCFunctionObject* func = (PyCFunctionObject*)func_obj;
     PyCFunction meth = PyCFunction_GET_FUNCTION(func);
@@ -155,7 +155,7 @@
     PyObject *result;
     int flags;
 
-    /* _PyCFunction_FastCall() must not be called with an exception set,
+    /* _PyCFunction_FastCallDict() must not be called with an exception set,
        because it may clear it (directly or indirectly) and so the
        caller loses its exception */
     assert(!PyErr_Occurred());