PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_or) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_xor) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_and) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_lshift) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_rshift) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_add) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_subtract) != 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);
Py_DECREF(w);
BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply);
if (tp->tp_as_number != NULL &&
- w->ob_type->tp_as_sequence != NULL &&
- !PyInstance_Check(v)) {
+ w->ob_type->tp_as_sequence != NULL) {
/* number*sequence -- swap v and w */
PyObject *tmp = v;
v = w;
if (tp->tp_as_number != NULL) {
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)
+ if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_multiply) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_divide) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_remainder) != 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);
Py_DECREF(w);
PyObject * (*f)(PyObject *, PyObject *);
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_divmod) != 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);
Py_DECREF(w);
}
if (PyNumber_Coerce(&v, &w) != 0)
return NULL;
- if ((f = v->ob_type->tp_as_number->nb_power) != 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
res = type_error("pow(x, y) not defined for these operands");
z2 = z1;
if (PyNumber_Coerce(&w2, &z2) != 0)
goto error1;
- if ((f = v1->ob_type->tp_as_number->nb_power) != NULL)
+ if (v->ob_type->tp_as_number != NULL &&
+ (f = v1->ob_type->tp_as_number->nb_power) != NULL)
res = (*f)(v1, w2, z2);
else
res = type_error(