diff Python/bltinmodule.c @ 26818:e094a03a80ff legacy-trunk

SF patch #659536: Use PyArg_UnpackTuple where possible. Obtain cleaner coding and a system wide performance boost by using the fast, pre-parsed PyArg_Unpack function instead of PyArg_ParseTuple function which is driven by a format string.
author Raymond Hettinger <python@rcn.com>
date Sun, 29 Dec 2002 16:33:45 +0000
parents 97f83542f8ee
children fb36d9b50df5
line wrap: on
line diff
--- a/Python/bltinmodule.c	Sun Dec 29 05:49:09 2002 +0000
+++ b/Python/bltinmodule.c	Sun Dec 29 16:33:45 2002 +0000
@@ -70,7 +70,7 @@
 	PyObject *func, *alist = NULL, *kwdict = NULL;
 	PyObject *t = NULL, *retval = NULL;
 
-	if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
+	if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
 		return NULL;
 	if (alist != NULL) {
 		if (!PyTuple_Check(alist)) {
@@ -126,7 +126,7 @@
 	int len;   /* guess for result list size */
 	register int j;
 
-	if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
+	if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
 		return NULL;
 
 	/* Strings and tuples return a result of the same type. */
@@ -284,7 +284,7 @@
 	PyObject *a, *b;
 	int c;
 
-	if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
+	if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
 		return NULL;
 	if (PyObject_Cmp(a, b, &c) < 0)
 		return NULL;
@@ -303,7 +303,7 @@
 	PyObject *v, *w;
 	PyObject *res;
 
-	if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
+	if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
 		return NULL;
 	if (PyNumber_Coerce(&v, &w) < 0)
 		return NULL;
@@ -381,7 +381,7 @@
 {
 	PyObject *arg = NULL;
 
-	if (!PyArg_ParseTuple(args, "|O:dir", &arg))
+	if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
 		return NULL;
 	return PyObject_Dir(arg);
 }
@@ -404,7 +404,7 @@
 {
 	PyObject *v, *w;
 
-	if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
+	if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
 		return NULL;
 	return PyNumber_Divmod(v, w);
 }
@@ -580,7 +580,7 @@
 	PyObject *v, *result, *dflt = NULL;
 	PyObject *name;
 
-	if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
+	if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
 		return NULL;
 #ifdef Py_USING_UNICODE
 	if (PyUnicode_Check(name)) {
@@ -636,7 +636,7 @@
 	PyObject *v;
 	PyObject *name;
 
-	if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
+	if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
 		return NULL;
 #ifdef Py_USING_UNICODE
 	if (PyUnicode_Check(name)) {
@@ -856,7 +856,7 @@
 	PyObject *name;
 	PyObject *value;
 
-	if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
+	if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
 		return NULL;
 	if (PyObject_SetAttr(v, name, value) != 0)
 		return NULL;
@@ -877,7 +877,7 @@
 	PyObject *v;
 	PyObject *name;
 
-	if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
+	if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
 		return NULL;
 	if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
 		return NULL;
@@ -990,7 +990,7 @@
 {
 	PyObject *v, *w = NULL;
 
-	if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
+	if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
 		return NULL;
 	if (w == NULL)
 		return PyObject_GetIter(v);
@@ -1051,7 +1051,7 @@
 
 	if (PyTuple_Size(args) > 1)
 		v = args;
-	else if (!PyArg_ParseTuple(args, "O:min/max", &v))
+	else if (!PyArg_UnpackTuple(args, "min/max", 1, 1, &v))
 		return NULL;
 
 	it = PyObject_GetIter(v);
@@ -1188,7 +1188,7 @@
 {
 	PyObject *v, *w, *z = Py_None;
 
-	if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
+	if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
 		return NULL;
 	return PyNumber_Power(v, w, z);
 }
@@ -1296,7 +1296,7 @@
 	PyObject *fin = PySys_GetObject("stdin");
 	PyObject *fout = PySys_GetObject("stdout");
 
-	if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
+	if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
 		return NULL;
 
 	if (fin == NULL) {
@@ -1377,7 +1377,7 @@
 {
 	PyObject *seq, *func, *result = NULL, *it;
 
-	if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
+	if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
 		return NULL;
 	if (result != NULL)
 		Py_INCREF(result);
@@ -1513,7 +1513,7 @@
 	PyObject *v = NULL;
 	PyObject *d;
 
-	if (!PyArg_ParseTuple(args, "|O:vars", &v))
+	if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
 		return NULL;
 	if (v == NULL) {
 		d = PyEval_GetLocals();
@@ -1549,7 +1549,7 @@
 	PyObject *cls;
 	int retval;
 
-	if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
+	if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
 		return NULL;
 
 	retval = PyObject_IsInstance(inst, cls);
@@ -1574,7 +1574,7 @@
 	PyObject *cls;
 	int retval;
 
-	if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
+	if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
 		return NULL;
 
 	retval = PyObject_IsSubclass(derived, cls);