Simplify use of NB_BINOP and NB_TERNOP by making them do the pointer
dereference rather than the caller.
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 8845dce..5f98a4c 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -318,9 +318,9 @@
 
 #define NB_SLOT(x) offsetof(PyNumberMethods, x)
 #define NB_BINOP(nb_methods, slot) \
-		((binaryfunc*)(& ((char*)nb_methods)[slot] ))
+		(*(binaryfunc*)(& ((char*)nb_methods)[slot]))
 #define NB_TERNOP(nb_methods, slot) \
-		((ternaryfunc*)(& ((char*)nb_methods)[slot] ))
+		(*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
 
 /*
   Calling scheme used for binary operations:
@@ -352,10 +352,10 @@
 	binaryfunc slotw = NULL;
 
 	if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v))
-		slotv = *NB_BINOP(v->ob_type->tp_as_number, op_slot);
+		slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
 	if (w->ob_type != v->ob_type &&
 	    w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) {
-		slotw = *NB_BINOP(w->ob_type->tp_as_number, op_slot);
+		slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
 		if (slotw == slotv)
 			slotw = NULL;
 	}
@@ -387,7 +387,7 @@
 			PyNumberMethods *mv = v->ob_type->tp_as_number;
 			if (mv) {
 				binaryfunc slot;
-				slot = *NB_BINOP(mv, op_slot);
+				slot = NB_BINOP(mv, op_slot);
 				if (slot) {
 					PyObject *x = slot(v, w);
 					Py_DECREF(v);
@@ -466,10 +466,10 @@
 	mv = v->ob_type->tp_as_number;
 	mw = w->ob_type->tp_as_number;
 	if (mv != NULL && NEW_STYLE_NUMBER(v))
-		slotv = *NB_TERNOP(mv, op_slot);
+		slotv = NB_TERNOP(mv, op_slot);
 	if (w->ob_type != v->ob_type &&
 	    mv != NULL && NEW_STYLE_NUMBER(w)) {
-		slotw = *NB_TERNOP(mw, op_slot);
+		slotw = NB_TERNOP(mw, op_slot);
 		if (slotw == slotv)
 			slotw = NULL;
 	}
@@ -494,7 +494,7 @@
 	}
 	mz = z->ob_type->tp_as_number;
 	if (mz != NULL && NEW_STYLE_NUMBER(z)) {
-		slotz = *NB_TERNOP(mz, op_slot);
+		slotz = NB_TERNOP(mz, op_slot);
 		if (slotz == slotv || slotz == slotw)
 			slotz = NULL;
 		if (slotz) {
@@ -519,8 +519,8 @@
 		   treated as absent argument and not coerced. */
 		if (z == Py_None) {
 			if (v->ob_type->tp_as_number) {
-				slotz = *NB_TERNOP(v->ob_type->tp_as_number,
-						   op_slot);
+				slotz = NB_TERNOP(v->ob_type->tp_as_number,
+						  op_slot);
 				if (slotz)
 					x = slotz(v, w, z);
 				else
@@ -542,8 +542,8 @@
 			goto error1;
 
 		if (v1->ob_type->tp_as_number != NULL) {
-			slotv = *NB_TERNOP(v1->ob_type->tp_as_number,
-					   op_slot);
+			slotv = NB_TERNOP(v1->ob_type->tp_as_number,
+					  op_slot);
 			if (slotv)
 				x = slotv(v1, w2, z2);
 			else
@@ -673,9 +673,9 @@
 {
 	PyNumberMethods *mv = v->ob_type->tp_as_number;
 	if (mv != NULL && HASINPLACE(v)) {
-		binaryfunc *slot = NB_BINOP(mv, iop_slot);
-		if (*slot) {
-			PyObject *x = (*slot)(v, w);
+		binaryfunc slot = NB_BINOP(mv, iop_slot);
+		if (slot) {
+			PyObject *x = (slot)(v, w);
 			if (x != Py_NotImplemented) {
 				return x;
 			}