diff options
| -rw-r--r-- | Objects/abstract.c | 35 | 
1 files changed, 20 insertions, 15 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index 4e9ed96a60..ef3064b737 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -810,28 +810,33 @@ PyNumber_InPlaceAdd(PyObject *v, PyObject *w)  	if (PyInstance_Check(v)) {  		if (PyInstance_HalfBinOp(v, w, "__iadd__", &x, -					PyNumber_Add, 0) <= 0) +					 PyNumber_Add, 0) <= 0)  			return x;  	} -	else if (HASINPLACE(v) -		  && ((v->ob_type->tp_as_sequence != NULL && -		       (f = v->ob_type->tp_as_sequence->sq_inplace_concat) -		       != NULL) -		 || (v->ob_type->tp_as_number != NULL && -		     (f = v->ob_type->tp_as_number->nb_inplace_add) != NULL))) -		return (*f)(v, w); +	else if (HASINPLACE(v)) { +		if (v->ob_type->tp_as_sequence != NULL) +			f = v->ob_type->tp_as_sequence->sq_inplace_concat; +		if (f == NULL && v->ob_type->tp_as_number != NULL) +			f = v->ob_type->tp_as_number->nb_inplace_add; +		if (f != NULL) +			return (*f)(v, w); +	}  	BINOP(v, w, "__add__", "__radd__", PyNumber_Add); -	if (v->ob_type->tp_as_sequence != NULL && -	    (f = v->ob_type->tp_as_sequence->sq_concat) != NULL) -		return (*f)(v, w); -	else if (v->ob_type->tp_as_number != NULL) { +	if (v->ob_type->tp_as_sequence != NULL) { +		f = v->ob_type->tp_as_sequence->sq_concat; +		if (f != NULL) +			return (*f)(v, w); +	} +	if (v->ob_type->tp_as_number != NULL) {  		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); +		if (v->ob_type->tp_as_number != NULL) { +			f = v->ob_type->tp_as_number->nb_add; +			if (f != NULL) +				x = (*f)(v, w); +		}  		Py_DECREF(v);  		Py_DECREF(w);  		if (f != NULL)  | 
