Index: tests/ctrl-flow/.expect/loopctrl.txt
===================================================================
--- tests/ctrl-flow/.expect/loopctrl.txt	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/.expect/loopctrl.txt	(revision e15293bbf556de0eadee7da47879cec458405ca3)
@@ -61,4 +61,15 @@
 (10 10)(9 9)(8 8)(7 7)(6 6)(5 5)(4 4)(3 3)(2 2)(1 1)(0 0)
 
+3 4 5 6 7 8 9
+3 4 5 6 7 8 9
+10 9 8 7 6 5 4
+3.5 4.5 5.5 6.5 7.5 8.5 9.5
+abcde
+edcba
+(0 0)(1 1)(2 2)(3 3)(4 4)(5 5)(6 6)
+(1 1)(2 2)(3 3)(4 4)(5 5)(6 6)
+(3 0)(4 1)(5 2)(6 3)
+(7 0)(6 -1)(5 -2)(4 -3)
+
 A A A A A A A A A A
 B B B B B B B B B B B
@@ -108,2 +119,4 @@
 0 -2 -4 -6 -8
 0 1 2 3 4 5 6 7 8 9
+A B C D
+D C B A
Index: tests/ctrl-flow/loopctrl.cfa
===================================================================
--- tests/ctrl-flow/loopctrl.cfa	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/loopctrl.cfa	(revision e15293bbf556de0eadee7da47879cec458405ca3)
@@ -10,9 +10,10 @@
 // Created On       : Wed Aug  8 18:32:59 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 27 11:00:09 2024
-// Update Count     : 161
+// Last Modified On : Fri Aug  2 08:42:55 2024
+// Update Count     : 185
 // 
 
 #include <fstream.hfa>
+#include <enum.hfa>
 
 void fred() {
@@ -81,10 +82,10 @@
 	for ( int j; s ~ @ ~ @ ) { if ( j == 10 ) break; sout | j; j += 1; } sout | nl;
 
-	// enum E { A, B, C, D };
-	// for ( e; A ~= C ) { sout | j; }
-	// for ( e; A ~= D ) { sout | j; }
-	// for ( e; A -~= D ~ 2 ) { sout | j; }
-	// for ( e; E ) { sout | j; }
-	// for ( e; -~ E ) { sout | j; }
+	enum(int) E { A, B, C, D };
+//	for ( E e; A ~= C ) { sout | e; } sout | nl;
+//	for ( e; A ~= D ) { sout | e; } sout | nl;
+//	for ( e; A -~= D ~ 2 ) { sout | e; } sout | nl;
+	for ( e; E ) { sout | e; } sout | nl;
+	for ( e; -~= E ) { sout | e; } sout | nl;
 }
 
@@ -95,14 +96,14 @@
 void ?{}( S & s, zero_t ) { s.[i, j] = 0; }
 void ?{}( S & s, one_t ) { s.[i, j] = 1; }
-int ?<?( S t1, S t2 ) { return t1.i < t2.i && t1.j < t2.j; }
-int ?<=?( S t1, S t2 ) { return t1.i <= t2.i && t1.j <= t2.j; }
-int ?>?( S t1, S t2 ) { return t1.i > t2.i && t1.j > t2.j; }
-int ?>=?( S t1, S t2 ) { return t1.i >= t2.i && t1.j >= t2.j; }
-S ?+=?( S & t1, S t2 ) { t1.i += t2.i; t1.j += t2.j; return t1; }
-S ?+=?( S & t, one_t ) { t.i += 1; t.j += 1; return t; }
-S ?-=?( S & t1, S t2 ) { t1.i -= t2.i; t1.j -= t2.j; return t1; }
-S ?-=?( S & t, one_t ) { t.i -= 1; t.j -= 1; return t; }
-ofstream & ?|?( ofstream & os, S v ) { return os | '(' | v.i | v.j | ')'; }
-void & ?|?( ofstream & os, S v ) { (ofstream &)(os | v); ends( os ); }
+int ?<?( S s1, S s2 ) { return s1.i < s2.i || s1.j < s2.j; }
+int ?<=?( S s1, S s2 ) { return s1.i <= s2.i || s1.j <= s2.j; }
+int ?>?( S s1, S s2 ) { return s1.i > s2.i || s1.j > s2.j; }
+int ?>=?( S s1, S s2 ) { return s1.i >= s2.i || s1.j >= s2.j; }
+S ?+=?( S & s1, S s2 ) { s1.i += s2.i; s1.j += s2.j; return s1; }
+S ?+=?( S & s, one_t ) { s.i += 1; s.j += 1; return s; }
+S ?-=?( S & s1, S s2 ) { s1.i -= s2.i; s1.j -= s2.j; return s1; }
+S ?-=?( S & s, one_t ) { s.i -= 1; s.j -= 1; return s; }
+ofstream & ?|?( ofstream & os, S s ) { return os | '(' | s.i | s.j | ')'; }
+void & ?|?( ofstream & os, S s ) { (ofstream &)(os | s); ends( os ); }
 
 int main() {
@@ -183,5 +184,5 @@
 	for ( k; 1.5 ~ @ : j; @ -~ -5 ~ 2 : i; 10 ) { sout | i | j | k; } sout | nl;
 
-	for ( S s = (S){0}; s < (S){10,10}; s += (S){1} ) { sout | s; } sout | nl;
+	for ( S s = (S){0}; s < (S){10,10}; s += (S){1} ) { sout | s; } sout | nl; // 0 does not work
 	for ( s; (S){10,10} ) { sout | s; } sout | nl;
 	sout | nl;
@@ -196,4 +197,20 @@
 	for ( s; (S){0} -~= (S){10,10} ~ (S){1} ) { sout | s; } sout | nl | nl;
 
+	int i = 10;
+	double d = 10.;
+	char c = 'e';
+	S s = { 7 };
+
+	for ( anon; 3 ~ i ) sout | anon;					sout | nl;
+	for ( anon; 3 ~ i ) sout | anon;					sout | nl;
+	for ( anon; 3 -~ i ) sout | anon;					sout | nl;
+	for ( anon; 3.5 ~ d ) sout | anon;					sout | nl;
+	for ( anon; 'a' ~= c ) sout | anon;					sout | nl;
+	for ( anon; 'a' -~= c ) sout | anon;				sout | nl;
+	for ( anon; (S){0} ~ s ) sout | anon;				sout | nl; // 0 does not work
+	for ( anon; (S){1} ~ s ) sout | anon;				sout | nl; // 1 does not work
+	for ( anon; (S){3} ~ s ) sout | anon;				sout | nl;
+	for ( anon; (S){3} -~ s ) sout | anon;				sout | nl | nl;
+
 	fred();
 }
