I often like to look through the generated assembly code - it helps me be sure that the code will do what I want, and to be sure that I am not accidently doing something very inefficiently. One thing I notice is that the way code for if-else blocks is generated seems a bit odd. Consider the code: if (x) doTrue() else doFalse(); doTheRest();
This compiles roughly to: if (!x) goto L1 doTrue(); L2: doTheRest(); ret L1: doFalse() goto L2 I would have thought the obvious code would be: if (!x) goto L1 doTrue(); goto L2 L1: doFalse(); L2: doTheRest(); ret Is there any reason for generating the first form? It means one less jump for the true case, but one more jump for the false case. It also makes it a lot more difficult to follow the generated assembly code. mvh. David