getattr() uses METH_FASTCALL

This commit is contained in:
Victor Stinner 2017-01-17 03:52:27 +01:00
parent f672fc7dc1
commit 84b388bb80
1 changed files with 8 additions and 3 deletions

View File

@ -993,14 +993,19 @@ builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
/* AC: cannot convert yet, as needs PEP 457 group support in inspect */ /* AC: cannot convert yet, as needs PEP 457 group support in inspect */
static PyObject * static PyObject *
builtin_getattr(PyObject *self, PyObject *args) builtin_getattr(PyObject *self, PyObject **args, Py_ssize_t nargs,
PyObject *kwnames)
{ {
PyObject *v, *result, *dflt = NULL; PyObject *v, *result, *dflt = NULL;
PyObject *name; PyObject *name;
if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt)) if (!_PyArg_UnpackStack(args, nargs, "getattr", 2, 3, &v, &name, &dflt))
return NULL; return NULL;
if (!_PyArg_NoStackKeywords("getattr", kwnames)) {
return NULL;
}
if (!PyUnicode_Check(name)) { if (!PyUnicode_Check(name)) {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"getattr(): attribute name must be string"); "getattr(): attribute name must be string");
@ -2622,7 +2627,7 @@ static PyMethodDef builtin_methods[] = {
BUILTIN_EVAL_METHODDEF BUILTIN_EVAL_METHODDEF
BUILTIN_EXEC_METHODDEF BUILTIN_EXEC_METHODDEF
BUILTIN_FORMAT_METHODDEF BUILTIN_FORMAT_METHODDEF
{"getattr", builtin_getattr, METH_VARARGS, getattr_doc}, {"getattr", (PyCFunction)builtin_getattr, METH_FASTCALL, getattr_doc},
BUILTIN_GLOBALS_METHODDEF BUILTIN_GLOBALS_METHODDEF
BUILTIN_HASATTR_METHODDEF BUILTIN_HASATTR_METHODDEF
BUILTIN_HASH_METHODDEF BUILTIN_HASH_METHODDEF