[Python-checkins] python/dist/src/Objects typeobject.c,2.254,2.255

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Sat Dec 13 10:21:57 EST 2003


Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv13787
Modified Files:
	typeobject.c 
Log Message:
Improve argument checking speed.
Index: typeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v
retrieving revision 2.254
retrieving revision 2.255
diff -C2 -d -r2.254 -r2.255
*** typeobject.c	13 Dec 2003 11:26:12 -0000	2.254
--- typeobject.c	13 Dec 2003 15:21:55 -0000	2.255
***************
*** 3321,3324 ****
--- 3321,3340 ----
 }
 
+ static int
+ check_num_args(PyObject *ob, int n)
+ {
+ 	if (!PyTuple_CheckExact(ob)) {
+ 		PyErr_SetString(PyExc_SystemError,
+ 		 "PyArg_UnpackTuple() argument list is not a tuple");
+ 		return 0;
+ 	}
+ 	if (n == PyTuple_GET_SIZE(ob))
+ 		return 1;
+ 	PyErr_Format(
+ 	 PyExc_TypeError, 
+ 	 "expected %d arguments, got %d", n, PyTuple_GET_SIZE(ob));
+ 	return 0;
+ }
+ 
 /* Generic wrappers for overloadable 'operators' such as __getitem__ */
 
***************
*** 3335,3339 ****
 	int res;
 
! 	if (!PyArg_UnpackTuple(args, "", 0, 0))
 		return NULL;
 	res = (*func)(self);
--- 3351,3355 ----
 	int res;
 
! 	if (!check_num_args(args, 0))
 		return NULL;
 	res = (*func)(self);
***************
*** 3349,3353 ****
 	int res;
 
! 	if (!PyArg_UnpackTuple(args, "", 0, 0))
 		return NULL;
 	res = (*func)(self);
--- 3365,3369 ----
 	int res;
 
! 	if (!check_num_args(args, 0))
 		return NULL;
 	res = (*func)(self);
***************
*** 3363,3368 ****
 	PyObject *other;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &other))
 		return NULL;
 	return (*func)(self, other);
 }
--- 3379,3385 ----
 	PyObject *other;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	other = PyTuple_GET_ITEM(args, 0);
 	return (*func)(self, other);
 }
***************
*** 3374,3379 ****
 	PyObject *other;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &other))
 		return NULL;
 	if (!(self->ob_type->tp_flags & Py_TPFLAGS_CHECKTYPES) &&
 	 !PyType_IsSubtype(other->ob_type, self->ob_type)) {
--- 3391,3397 ----
 	PyObject *other;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	other = PyTuple_GET_ITEM(args, 0);
 	if (!(self->ob_type->tp_flags & Py_TPFLAGS_CHECKTYPES) &&
 	 !PyType_IsSubtype(other->ob_type, self->ob_type)) {
***************
*** 3390,3395 ****
 	PyObject *other;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &other))
 		return NULL;
 	if (!(self->ob_type->tp_flags & Py_TPFLAGS_CHECKTYPES) &&
 	 !PyType_IsSubtype(other->ob_type, self->ob_type)) {
--- 3408,3414 ----
 	PyObject *other;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	other = PyTuple_GET_ITEM(args, 0);
 	if (!(self->ob_type->tp_flags & Py_TPFLAGS_CHECKTYPES) &&
 	 !PyType_IsSubtype(other->ob_type, self->ob_type)) {
***************
*** 3407,3412 ****
 	int ok;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &other))
 		return NULL;
 	ok = func(&self, &other);
 	if (ok < 0)
--- 3426,3432 ----
 	int ok;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	other = PyTuple_GET_ITEM(args, 0);
 	ok = func(&self, &other);
 	if (ok < 0)
***************
*** 3460,3464 ****
 	unaryfunc func = (unaryfunc)wrapped;
 
! 	if (!PyArg_UnpackTuple(args, "", 0, 0))
 		return NULL;
 	return (*func)(self);
--- 3480,3484 ----
 	unaryfunc func = (unaryfunc)wrapped;
 
! 	if (!check_num_args(args, 0))
 		return NULL;
 	return (*func)(self);
***************
*** 3510,3514 ****
 		return (*func)(self, i);
 	}
! 	PyArg_UnpackTuple(args, "", 1, 1, &arg);
 	assert(PyErr_Occurred());
 	return NULL;
--- 3530,3534 ----
 		return (*func)(self, i);
 	}
! 	check_num_args(args, 1);
 	assert(PyErr_Occurred());
 	return NULL;
***************
*** 3552,3557 ****
 	PyObject *arg;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &arg))
 		return NULL;
 	i = getindex(self, arg);
 	if (i == -1 && PyErr_Occurred())
--- 3572,3578 ----
 	PyObject *arg;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	arg = PyTuple_GET_ITEM(args, 0);
 	i = getindex(self, arg);
 	if (i == -1 && PyErr_Occurred())
***************
*** 3603,3608 ****
 	PyObject *value;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &value))
 		return NULL;
 	res = (*func)(self, value);
 	if (res == -1 && PyErr_Occurred())
--- 3624,3630 ----
 	PyObject *value;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	value = PyTuple_GET_ITEM(args, 0);
 	res = (*func)(self, value);
 	if (res == -1 && PyErr_Occurred())
***************
*** 3635,3640 ****
 	PyObject *key;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &key))
 		return NULL;
 	res = (*func)(self, key, NULL);
 	if (res == -1 && PyErr_Occurred())
--- 3657,3663 ----
 	PyObject *key;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	key = PyTuple_GET_ITEM(args, 0);
 	res = (*func)(self, key, NULL);
 	if (res == -1 && PyErr_Occurred())
***************
*** 3651,3656 ****
 	PyObject *other;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &other))
 		return NULL;
 	if (other->ob_type->tp_compare != func &&
 	 !PyType_IsSubtype(other->ob_type, self->ob_type)) {
--- 3674,3680 ----
 	PyObject *other;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	other = PyTuple_GET_ITEM(args, 0);
 	if (other->ob_type->tp_compare != func &&
 	 !PyType_IsSubtype(other->ob_type, self->ob_type)) {
***************
*** 3712,3717 ****
 	PyObject *name;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &name))
 		return NULL;
 	if (!hackcheck(self, func, "__delattr__"))
 		return NULL;
--- 3736,3742 ----
 	PyObject *name;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	name = PyTuple_GET_ITEM(args, 0);
 	if (!hackcheck(self, func, "__delattr__"))
 		return NULL;
***************
*** 3729,3733 ****
 	long res;
 
! 	if (!PyArg_UnpackTuple(args, "", 0, 0))
 		return NULL;
 	res = (*func)(self);
--- 3754,3758 ----
 	long res;
 
! 	if (!check_num_args(args, 0))
 		return NULL;
 	res = (*func)(self);
***************
*** 3751,3756 ****
 	PyObject *other;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &other))
 		return NULL;
 	return (*func)(self, other, op);
 }
--- 3776,3782 ----
 	PyObject *other;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	other = PyTuple_GET_ITEM(args, 0);
 	return (*func)(self, other, op);
 }
***************
*** 3777,3781 ****
 	PyObject *res;
 
! 	if (!PyArg_UnpackTuple(args, "", 0, 0))
 		return NULL;
 	res = (*func)(self);
--- 3803,3807 ----
 	PyObject *res;
 
! 	if (!check_num_args(args, 0))
 		return NULL;
 	res = (*func)(self);
***************
*** 3829,3834 ****
 	int ret;
 
! 	if (!PyArg_UnpackTuple(args, "", 1, 1, &obj))
 		return NULL;
 	ret = (*func)(self, obj, NULL);
 	if (ret < 0)
--- 3855,3861 ----
 	int ret;
 
! 	if (!check_num_args(args, 1))
 		return NULL;
+ 	obj = PyTuple_GET_ITEM(args, 0);
 	ret = (*func)(self, obj, NULL);
 	if (ret < 0)


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /