summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/Python-ast.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index a6a49f7..2759b2fe 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -551,29 +551,27 @@ ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
if (numfields == -1)
goto cleanup;
}
+
res = 0; /* if no error occurs, this stays 0 to the end */
- if (PyTuple_GET_SIZE(args) > 0) {
- if (numfields != PyTuple_GET_SIZE(args)) {
- PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s"
- "%zd positional argument%s",
- Py_TYPE(self)->tp_name,
- numfields == 0 ? "" : "either 0 or ",
- numfields, numfields == 1 ? "" : "s");
+ if (numfields < PyTuple_GET_SIZE(args)) {
+ PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
+ "%zd positional argument%s",
+ Py_TYPE(self)->tp_name,
+ numfields, numfields == 1 ? "" : "s");
+ res = -1;
+ goto cleanup;
+ }
+ for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
+ /* cannot be reached when fields is NULL */
+ PyObject *name = PySequence_GetItem(fields, i);
+ if (!name) {
res = -1;
goto cleanup;
}
- for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
- /* cannot be reached when fields is NULL */
- PyObject *name = PySequence_GetItem(fields, i);
- if (!name) {
- res = -1;
- goto cleanup;
- }
- res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
- Py_DECREF(name);
- if (res < 0)
- goto cleanup;
- }
+ res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
+ Py_DECREF(name);
+ if (res < 0)
+ goto cleanup;
}
if (kw) {
i = 0; /* needed by PyDict_Next */