-#define CXt_SUB 1
-#define CXt_EVAL 2
-#define CXt_LOOP 3
-#define CXt_SUBST 4
-#define CXt_BLOCK 5
-#define CXt_FORMAT 6
-#define CXt_GIVEN 7
-#define CXt_WHEN 8
-
-/* private flags for CXt_SUB and CXt_NULL */
-#define CXp_MULTICALL 0x00000400 /* part of a multicall (so don't
- tear down context on exit). */
+#define CXt_WHEN 1
+#define CXt_BLOCK 2
+/* When micro-optimising :-) keep GIVEN next to the LOOPs, as these 5 share a
+ jump table in pp_ctl.c
+ The first 4 don't have a 'case' in at least one switch statement in pp_ctl.c
+*/
+#define CXt_GIVEN 3
+/* This is first so that CXt_LOOP_FOR|CXt_LOOP_LAZYIV is CXt_LOOP_LAZYIV */
+#define CXt_LOOP_FOR 4
+#define CXt_LOOP_PLAIN 5
+#define CXt_LOOP_LAZYSV 6
+#define CXt_LOOP_LAZYIV 7
+#define CXt_SUB 8
+#define CXt_FORMAT 9
+#define CXt_EVAL 10
+#define CXt_SUBST 11
+/* SUBST doesn't feature in all switch statements. */
+
+/* private flags for CXt_SUB and CXt_NULL
+ However, this is checked in many places which do not check the type, so
+ this bit needs to be kept clear for most everything else. For reasons I
+ haven't investigated, it can coexist with CXp_FOR_DEF */
+#define CXp_MULTICALL 0x10 /* part of a multicall (so don't
+ tear down context on exit). */
+
+/* private flags for CXt_SUB and CXt_FORMAT */
+#define CXp_HASARGS 0x20