Add "if (x != NULL) continue;" (or similar for err==0) before the
break to most cases, as suggested by Tim Peters.  This gives another
8-10% speedup.
diff --git a/Python/ceval.c b/Python/ceval.c
index dbfaf7d..a959e34 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -649,14 +649,14 @@
 		case POP_TOP:
 			v = POP();
 			DECREF(v);
-			break;
+			continue;
 		
 		case ROT_TWO:
 			v = POP();
 			w = POP();
 			PUSH(v);
 			PUSH(w);
-			break;
+			continue;
 		
 		case ROT_THREE:
 			v = POP();
@@ -665,19 +665,20 @@
 			PUSH(v);
 			PUSH(x);
 			PUSH(w);
-			break;
+			continue;
 		
 		case DUP_TOP:
 			v = TOP();
 			INCREF(v);
 			PUSH(v);
-			break;
+			continue;
 		
 		case UNARY_POSITIVE:
 			v = POP();
 			x = pos(v);
 			DECREF(v);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case UNARY_NEGATIVE:
@@ -685,6 +686,7 @@
 			x = neg(v);
 			DECREF(v);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case UNARY_NOT:
@@ -692,6 +694,7 @@
 			x = not(v);
 			DECREF(v);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case UNARY_CONVERT:
@@ -699,6 +702,7 @@
 			x = reprobject(v);
 			DECREF(v);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 			
 		case UNARY_INVERT:
@@ -706,6 +710,7 @@
 			x = invert(v);
 			DECREF(v);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_POWER:
@@ -715,6 +720,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_MULTIPLY:
@@ -724,6 +730,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_DIVIDE:
@@ -733,6 +740,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_MODULO:
@@ -742,6 +750,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_ADD:
@@ -751,6 +760,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_SUBTRACT:
@@ -760,6 +770,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_SUBSCR:
@@ -769,6 +780,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_LSHIFT:
@@ -778,6 +790,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_RSHIFT:
@@ -787,6 +800,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_AND:
@@ -796,6 +810,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_XOR:
@@ -805,6 +820,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case BINARY_OR:
@@ -814,6 +830,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case SLICE+0:
@@ -834,6 +851,7 @@
 			XDECREF(v);
 			XDECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case STORE_SLICE+0:
@@ -855,6 +873,7 @@
 			DECREF(u);
 			XDECREF(v);
 			XDECREF(w);
+			if (err == 0) continue;
 			break;
 		
 		case DELETE_SLICE+0:
@@ -875,6 +894,7 @@
 			DECREF(u);
 			XDECREF(v);
 			XDECREF(w);
+			if (err == 0) continue;
 			break;
 		
 		case STORE_SUBSCR:
@@ -886,6 +906,7 @@
 			DECREF(u);
 			DECREF(v);
 			DECREF(w);
+			if (err == 0) continue;
 			break;
 		
 		case DELETE_SUBSCR:
@@ -895,6 +916,7 @@
 			err = assign_subscript(v, w, (object *)NULL);
 			DECREF(v);
 			DECREF(w);
+			if (err == 0) continue;
 			break;
 		
 		case PRINT_EXPR:
@@ -929,6 +951,7 @@
 					softspace(w, 0);
 			}
 			DECREF(v);
+			if (err == 0) continue;
 			break;
 		
 		case PRINT_NEWLINE:
@@ -1294,6 +1317,7 @@
 #endif
 				INCREF(x);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 
 		case STORE_FAST:
@@ -1307,7 +1331,7 @@
 			}
 #endif
 			SETLOCAL(oparg, v);
-			break;
+			continue;
 
 		case DELETE_FAST:
 #ifdef SUPPORT_OBSOLETE_ACCESS
@@ -1325,7 +1349,7 @@
 			}
 #endif
 			SETLOCAL(oparg, NULL);
-			break;
+			continue;
 		
 		case BUILD_TUPLE:
 			x = newtupleobject(oparg);
@@ -1335,6 +1359,7 @@
 					SETTUPLEITEM(x, oparg, w);
 				}
 				PUSH(x);
+				continue;
 			}
 			break;
 		
@@ -1348,12 +1373,14 @@
 						break;
 				}
 				PUSH(x);
+				continue;
 			}
 			break;
 		
 		case BUILD_MAP:
 			x = newdictobject();
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case LOAD_ATTR:
@@ -1362,6 +1389,7 @@
 			x = getattro(v, w);
 			DECREF(v);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case COMPARE_OP:
@@ -1371,6 +1399,7 @@
 			DECREF(v);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case IMPORT_NAME:
@@ -1405,6 +1434,7 @@
 			x = call_object(x, w);
 			DECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		
 		case IMPORT_FROM:
@@ -1417,6 +1447,7 @@
 			}
 			err = import_from(x, v, w);
 			locals_2_fast(f, 0);
+			if (err == 0) continue;
 			break;
 
 #ifdef SUPPORT_OBSOLETE_ACCESS
@@ -1433,7 +1464,7 @@
 		
 		case JUMP_FORWARD:
 			JUMPBY(oparg);
-			break;
+			continue;
 		
 		case JUMP_IF_FALSE:
 			err = testbool(TOP());
@@ -1441,7 +1472,9 @@
 				err = 0;
 			else if (err == 0)
 				JUMPBY(oparg);
-			break;
+			else
+				break;
+			continue;
 		
 		case JUMP_IF_TRUE:
 			err = testbool(TOP());
@@ -1449,11 +1482,15 @@
 				err = 0;
 				JUMPBY(oparg);
 			}
-			break;
+			else if (err == 0)
+				;
+			else
+				break;
+			continue;
 		
 		case JUMP_ABSOLUTE:
 			JUMPTO(oparg);
-			break;
+			continue;
 		
 		case FOR_LOOP:
 			/* for v in s: ...
@@ -1470,6 +1507,7 @@
 				PUSH(x);
 				DECREF(w);
 				PUSH(u);
+				if (x != NULL) continue;
 			}
 			else {
 				DECREF(v);
@@ -1478,8 +1516,10 @@
 				   but also an error: */
 				if (err_occurred())
 					why = WHY_EXCEPTION;
-				else
+				else {
 					JUMPBY(oparg);
+					continue;
+				}
 			}
 			break;
 		
@@ -1488,7 +1528,7 @@
 		case SETUP_FINALLY:
 			setup_block(f, opcode, INSTR_OFFSET() + oparg,
 						STACK_LEVEL());
-			break;
+			continue;
 		
 		case SET_LINENO:
 #ifdef LLTRACE
@@ -1496,12 +1536,12 @@
 				printf("--- %s:%d \n", filename, oparg);
 #endif
 			f->f_lineno = oparg;
-			if (f->f_trace != NULL) {
-				/* Trace each line of code reached */
-				f->f_lasti = INSTR_OFFSET();
-				err = call_trace(&f->f_trace, &f->f_trace,
-						 f, "line", None);
-			}
+			if (f->f_trace == NULL)
+				continue;
+			/* Trace each line of code reached */
+			f->f_lasti = INSTR_OFFSET();
+			err = call_trace(&f->f_trace, &f->f_trace,
+					 f, "line", None);
 			break;
 
 		case CALL_FUNCTION:
@@ -1619,6 +1659,7 @@
 				DECREF(w);
 			}
 			PUSH(x);
+			if (x != NULL) continue;
 			break;
 		}
 		
@@ -1656,6 +1697,7 @@
 			DECREF(v);
 			XDECREF(w);
 			PUSH(x);
+			if (x != NULL) continue;
 			break;