* Improve readability and remove data dependencies by converting
pre-increment forms to post-increment forms.  Post-incrementing
also eliminates the need for negative array indices for oparg fetches.

* In exception handling code, check for class based exceptions before
  the older string based exceptions.
diff --git a/Python/ceval.c b/Python/ceval.c
index de57ca7..9ea2772 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -625,7 +625,8 @@
 
 #define INSTR_OFFSET()	(next_instr - first_instr)
 #define NEXTOP()	(*next_instr++)
-#define NEXTARG()	(next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
+#define OPARG()		(next_instr[0] + (next_instr[1]<<8))
+#define SKIPARG()	(next_instr += 2)
 #define JUMPTO(x)	(next_instr = first_instr + (x))
 #define JUMPBY(x)	(next_instr += (x))
 
@@ -861,8 +862,10 @@
 		/* Extract opcode and argument */
 
 		opcode = NEXTOP();
-		if (HAS_ARG(opcode))
-			oparg = NEXTARG();
+		if (HAS_ARG(opcode)) {
+			oparg = OPARG();
+			SKIPARG();
+		}
 	  dispatch_opcode:
 #ifdef DYNAMIC_EXECUTION_PROFILE
 #ifdef DXPAIRS
@@ -1653,7 +1656,7 @@
 				if (why & (WHY_RETURN | WHY_CONTINUE))
 					retval = POP();
 			}
-			else if (PyString_Check(v) || PyClass_Check(v)) {
+			else if (PyClass_Check(v) || PyString_Check(v)) {
 				w = POP();
 				u = POP();
 				PyErr_Restore(v, w, u);
@@ -1892,7 +1895,7 @@
 		case BUILD_TUPLE:
 			x = PyTuple_New(oparg);
 			if (x != NULL) {
-				for (; --oparg >= 0;) {
+				while (oparg--) {
 					w = POP();
 					PyTuple_SET_ITEM(x, oparg, w);
 				}
@@ -1904,7 +1907,7 @@
 		case BUILD_LIST:
 			x =  PyList_New(oparg);
 			if (x != NULL) {
-				for (; --oparg >= 0;) {
+				while (oparg--) {
 					w = POP();
 					PyList_SET_ITEM(x, oparg, w);
 				}
@@ -2176,7 +2179,7 @@
 					x = NULL;
 					break;
 				}
-				while (--oparg >= 0) {
+				while (oparg--) {
 					w = POP();
 					PyTuple_SET_ITEM(v, oparg, w);
 				}
@@ -2201,7 +2204,7 @@
 					x = NULL;
 					break;
 				}
-				while (--nfree >= 0) {
+				while (nfree--) {
 					w = POP();
 					PyTuple_SET_ITEM(v, nfree, w);
 				}
@@ -2215,7 +2218,7 @@
 					x = NULL;
 					break;
 				}
-				while (--oparg >= 0) {
+				while (oparg--) {
 					w = POP();
 					PyTuple_SET_ITEM(v, oparg, w);
 				}
@@ -2243,7 +2246,8 @@
 
 		case EXTENDED_ARG:
 			opcode = NEXTOP();
-			oparg = oparg<<16 | NEXTARG();
+			oparg = oparg<<16 | OPARG();
+			SKIPARG();
 			goto dispatch_opcode;
 
 		default:
@@ -3192,7 +3196,7 @@
 		}
 
 		if (size > 0) {
-			while (--size >= 0) {
+			while (size--) {
 				addr += *p++;
 				if (*p++)
 					break;
@@ -3607,7 +3611,7 @@
 	}
 	if (kwdict == NULL)
 		return NULL;
-	while (--nk >= 0) {
+	while (nk--) {
 		int err;
 		PyObject *value = EXT_POP(*pp_stack);
 		PyObject *key = EXT_POP(*pp_stack);
@@ -3652,7 +3656,7 @@
 			PyTuple_SET_ITEM(callargs, nstack + i, a);
 		}
 	}
-	while (--nstack >= 0) {
+	while (nstack--) {
 		w = EXT_POP(*pp_stack);
 		PyTuple_SET_ITEM(callargs, nstack, w);
 	}
@@ -3667,7 +3671,7 @@
 
 	if (args == NULL)
 		return NULL;
-	while (--na >= 0) {
+	while (na--) {
 		w = EXT_POP(*pp_stack);
 		PyTuple_SET_ITEM(args, na, w);
 	}