[Python-checkins] CVS: python/dist/src/Objects abstract.c,2.45,2.46
Thomas Wouters
python-dev@python.org
Wed, 23 Aug 2000 16:16:13 -0700
Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv31334/Objects
Modified Files:
abstract.c
Log Message:
Add extra check on whether 'tp_as_number' is still non-NULL after coercion,
in the PyNumber_* functions. Also, remove unnecessary tests from
PyNumber_Multiply: after BINOP(), neither argument can be an instance.
Index: abstract.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v
retrieving revision 2.45
retrieving revision 2.46
diff -C2 -r2.45 -r2.46
*** abstract.c 2000/08/17 22:37:32 2.45
--- abstract.c 2000/08/23 23:16:10 2.46
***************
*** 295,299 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_or) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 295,300 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_or) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 314,318 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_xor) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 315,320 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_xor) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 333,337 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_and) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 335,340 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_and) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 352,356 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_lshift) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 355,360 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_lshift) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 371,375 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_rshift) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 375,380 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_rshift) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 395,399 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_add) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 400,405 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_add) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 414,418 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_subtract) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 420,425 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_subtract) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 432,437 ****
BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply);
if (tp->tp_as_number != NULL &&
! w->ob_type->tp_as_sequence != NULL &&
! !PyInstance_Check(v)) {
/* number*sequence -- swap v and w */
PyObject *tmp = v;
--- 439,443 ----
BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply);
if (tp->tp_as_number != NULL &&
! w->ob_type->tp_as_sequence != NULL) {
/* number*sequence -- swap v and w */
PyObject *tmp = v;
***************
*** 443,457 ****
PyObject *x = NULL;
PyObject * (*f)(PyObject *, PyObject *);
! if (PyInstance_Check(v)) {
! /* Instances of user-defined classes get their
! other argument uncoerced, so they may
! implement sequence*number as well as
! number*number. */
! Py_INCREF(v);
! Py_INCREF(w);
! }
! else if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_multiply) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 449,456 ----
PyObject *x = NULL;
PyObject * (*f)(PyObject *, PyObject *);
! if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_multiply) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 490,494 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_divide) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 489,494 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_divide) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 513,517 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_remainder) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 513,518 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_remainder) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 532,536 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_divmod) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
--- 533,538 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_divmod) != NULL)
x = (*f)(v, w);
Py_DECREF(v);
***************
*** 558,562 ****
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if ((f = v->ob_type->tp_as_number->nb_power) != NULL)
res = (*f)(v, w, Py_None);
else
--- 560,565 ----
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v->ob_type->tp_as_number->nb_power) != NULL)
res = (*f)(v, w, Py_None);
else
***************
*** 595,599 ****
if (PyNumber_Coerce(&w2, &z2) != 0)
goto error1;
! if ((f = v1->ob_type->tp_as_number->nb_power) != NULL)
res = (*f)(v1, w2, z2);
else
--- 598,603 ----
if (PyNumber_Coerce(&w2, &z2) != 0)
goto error1;
! if (v->ob_type->tp_as_number != NULL &&
! (f = v1->ob_type->tp_as_number->nb_power) != NULL)
res = (*f)(v1, w2, z2);
else