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.
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 5234a65..bc22345 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -2178,7 +2178,7 @@
 	PyObject *self;
 	PyObject *classObj;
 
-	if (!PyArg_ParseTuple(args, "OOO:instancemethod",
+	if (!PyArg_UnpackTuple(args, "instancemethod", 3, 3,
 			      &func, &self, &classObj))
 		return NULL;
 	if (!PyCallable_Check(func)) {
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index 761e1ab..6c78778 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -686,7 +686,7 @@
 {
 	PyObject *key, *def = Py_None;
 
-	if (!PyArg_ParseTuple(args, "O|O:get", &key, &def))
+	if (!PyArg_UnpackTuple(args, "get", 1, 2, &key, &def))
 		return NULL;
 	return PyObject_CallMethod(pp->dict, "get", "(OO)", key, def);
 }
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 5e39dfa..de7a18e 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -972,7 +972,7 @@
 	PyObject *d;
 	int status;
 
-	if (!PyArg_ParseTuple(args, "O|O:fromkeys", &seq, &value))
+	if (!PyArg_UnpackTuple(args, "fromkeys", 1, 2, &seq, &value))
 		return NULL;
 
 	d = PyObject_CallObject(cls, NULL);
@@ -1479,7 +1479,7 @@
 	PyObject *val = NULL;
 	long hash;
 
-	if (!PyArg_ParseTuple(args, "O|O:get", &key, &failobj))
+	if (!PyArg_UnpackTuple(args, "get", 1, 2, &key, &failobj))
 		return NULL;
 
 	if (!PyString_CheckExact(key) ||
@@ -1505,7 +1505,7 @@
 	PyObject *val = NULL;
 	long hash;
 
-	if (!PyArg_ParseTuple(args, "O|O:setdefault", &key, &failobj))
+	if (!PyArg_UnpackTuple(args, "setdefault", 1, 2, &key, &failobj))
 		return NULL;
 
 	if (!PyString_CheckExact(key) ||
@@ -1834,7 +1834,7 @@
 	PyObject *arg = NULL;
 	int result = 0;
 
-	if (!PyArg_ParseTuple(args, "|O:dict", &arg))
+	if (!PyArg_UnpackTuple(args, "dict", 0, 1, &arg))
 		result = -1;
 
 	else if (arg != NULL) {
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 33fb3bc..fb73385 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -503,7 +503,7 @@
 	if (f->f_fp == NULL)
 		return err_closed();
 	newsizeobj = NULL;
-	if (!PyArg_ParseTuple(args, "|O:truncate", &newsizeobj))
+	if (!PyArg_UnpackTuple(args, "truncate", 0, 1, &newsizeobj))
 		return NULL;
 
 	/* Set newsize to current postion if newsizeobj NULL, else to the
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index 4f36df9..6154d99 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -588,7 +588,7 @@
 	classmethod *cm = (classmethod *)self;
 	PyObject *callable;
 
-	if (!PyArg_ParseTuple(args, "O:classmethod", &callable))
+	if (!PyArg_UnpackTuple(args, "classmethod", 1, 1, &callable))
 		return -1;
 	Py_INCREF(callable);
 	cm->cm_callable = callable;
@@ -720,7 +720,7 @@
 	staticmethod *sm = (staticmethod *)self;
 	PyObject *callable;
 
-	if (!PyArg_ParseTuple(args, "O:staticmethod", &callable))
+	if (!PyArg_UnpackTuple(args, "staticmethod", 1, 1, &callable))
 		return -1;
 	Py_INCREF(callable);
 	sm->sm_callable = callable;
diff --git a/Objects/listobject.c b/Objects/listobject.c
index ba47028..461350c 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -1654,7 +1654,7 @@
 
 	assert(self != NULL);
 	if (args != NULL) {
-		if (!PyArg_ParseTuple(args, "|O:sort", &compare))
+		if (!PyArg_UnpackTuple(args, "sort", 0, 1, &compare))
 			return NULL;
 	}
 	merge_init(&ms, compare);
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 7198cca..796df2b 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -174,7 +174,7 @@
 
 	start = stop = step = NULL;
 
-	if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
+	if (!PyArg_UnpackTuple(args, "slice", 1, 3, &start, &stop, &step))
 		return NULL;
 
 	/* This swapping of stop and start is to maintain similarity with
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 7937b46..1e42856 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -2046,7 +2046,7 @@
 	int trans_table[256];
 	PyObject *tableobj, *delobj = NULL;
 
-	if (!PyArg_ParseTuple(args, "O|O:translate",
+	if (!PyArg_UnpackTuple(args, "translate", 1, 2,
 			      &tableobj, &delobj))
 		return NULL;