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/Modules/mathmodule.c b/Modules/mathmodule.c
index 2572886..44c6abb 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -254,7 +254,7 @@
 	PyObject *ans;
 	PyObject *newargs;
 
-	if (! PyArg_ParseTuple(args, "O|O:log", &arg, &base))
+	if (!PyArg_UnpackTuple(args, "log", 1, 2, &arg, &base))
 		return NULL;
 	if (base == NULL)
 		return loghelper(args, log, "d:log", arg);
@@ -298,7 +298,7 @@
 {
 	PyObject *arg;
 
-	if (! PyArg_ParseTuple(args, "O:log10", &arg))
+	if (!PyArg_UnpackTuple(args, "log10", 1, 1, &arg))
 		return NULL;
 	return loghelper(args, log10, "d:log10", arg);
 }
diff --git a/Modules/operator.c b/Modules/operator.c
index 55c26df..d89564d 100644
--- a/Modules/operator.c
+++ b/Modules/operator.c
@@ -12,12 +12,12 @@
 
 #define spam1(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1; \
-  if(! PyArg_ParseTuple(a,"O:" #OP,&a1)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,1,1,&a1)) return NULL; \
   return AOP(a1); }
 
 #define spam2(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1, *a2; \
-  if(! PyArg_ParseTuple(a,"OO:" #OP,&a1,&a2)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,2,2,&a1,&a2)) return NULL; \
   return AOP(a1,a2); }
 
 #define spamoi(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
@@ -27,39 +27,39 @@
 
 #define spam2n(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1, *a2; \
-  if(! PyArg_ParseTuple(a,"OO:" #OP,&a1,&a2)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,2,2,&a1,&a2)) return NULL; \
   if(-1 == AOP(a1,a2)) return NULL; \
   Py_INCREF(Py_None); \
   return Py_None; }
 
 #define spam3n(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1, *a2, *a3; \
-  if(! PyArg_ParseTuple(a,"OOO:" #OP,&a1,&a2,&a3)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,3,3,&a1,&a2,&a3)) return NULL; \
   if(-1 == AOP(a1,a2,a3)) return NULL; \
   Py_INCREF(Py_None); \
   return Py_None; }
 
 #define spami(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1; long r; \
-  if(! PyArg_ParseTuple(a,"O:" #OP,&a1)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,1,1,&a1)) return NULL; \
   if(-1 == (r=AOP(a1))) return NULL; \
   return PyBool_FromLong(r); }
 
 #define spami2(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1, *a2; long r; \
-  if(! PyArg_ParseTuple(a,"OO:" #OP,&a1,&a2)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,2,2,&a1,&a2)) return NULL; \
   if(-1 == (r=AOP(a1,a2))) return NULL; \
   return PyInt_FromLong(r); }
 
 #define spami2b(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1, *a2; long r; \
-  if(! PyArg_ParseTuple(a,"OO:" #OP,&a1,&a2)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,2,2,&a1,&a2)) return NULL; \
   if(-1 == (r=AOP(a1,a2))) return NULL; \
   return PyBool_FromLong(r); }
 
 #define spamrc(OP,A) static PyObject *OP(PyObject *s, PyObject *a) { \
   PyObject *a1, *a2; \
-  if(! PyArg_ParseTuple(a,"OO:" #OP,&a1,&a2)) return NULL; \
+  if(! PyArg_UnpackTuple(a,#OP,2,2,&a1,&a2)) return NULL; \
   return PyObject_RichCompare(a1,a2,A); }
 
 spami(isCallable       , PyCallable_Check)
@@ -105,7 +105,7 @@
 op_pow(PyObject *s, PyObject *a)
 {
 	PyObject *a1, *a2;
-	if (PyArg_ParseTuple(a,"OO:pow",&a1,&a2))
+	if (PyArg_UnpackTuple(a,"pow", 2, 2, &a1, &a2))
 		return PyNumber_Power(a1, a2, Py_None);
 	return NULL;
 }