Index: libcfa/src/enum.cfa
===================================================================
--- libcfa/src/enum.cfa	(revision a1a1f37d7d17459fbc460ce2bf20161d668d4835)
+++ libcfa/src/enum.cfa	(revision d796be70ffd585b1fe3d76c6c3d82d2213614cfd)
@@ -42,5 +42,6 @@
 	if ( eof( is ) ) throwResume ExceptionInst( missing_data );
 
-	// Match input enumerator string to enumerator labels.
+	// Match longest input enumerator string to enumerator labels, where enumerator names are unique.
+
 	int N = Countof( e ), lnths[N], max = 0;
 //	printf( "N %d\n", N );
@@ -60,18 +61,20 @@
 	for ( c; max ) {
 		int args = fmt( is, "%c", &ch );				// read character
-		if ( eof( is ) ) {
+	  if ( eof( is ) ) {
 //			fprintf( stderr, "Eof1\n" );
 			if ( c == 0 ) return is;					// no characters read ?
-			clear( is );								// => reset EOF => detect again on next read
+			clear( is );								// => read something => reset EOF => detect again on next read
 //			fprintf( stderr, "Eof2\n" );
-			goto W;
-		}
+			break;
+		} // if
 		if ( args != 1 ) throwResume ExceptionInst( missing_data );
+
 //		printf( "read '%c'\n", ch );
-		for ( i; N ) {
+		for ( i; N ) {									// scan enumeration strings for winner
 //			printf( "%d %d %d\n", c, i, lnths[i] );
 			if ( c < lnths[i] ) {						// eligible for this checking round ?
 				char match = label( fromInt( i ) )[c];	// optimization
 //				printf( "%c '%c'\n", match, ch );
+				// Stop on first match, could be other matches.
 				if ( (match == ch) && (c == 0 || curr == label( fromInt( i ) )[c - 1]) ) {
 //					printf( "match %d %d %d '%c' '%c' '%c' '%c' 'c'\n", c, i, lnths[i], match, ch, prev, label( fromInt( i ) )[c - 1] );
@@ -92,6 +95,6 @@
 //		fprintf( stderr, "finished2 %d\n", win );
  	} // for
-  W :;
-	for ( i; N ) {										// scan for winner, must succeed
+  W: ;
+	for ( i; N ) {										// scan enumeration strings for winner
 		if ( win == lnths[i] - 1 ) {
 			char match = label( fromInt( i ) )[win];	// optimization
@@ -100,5 +103,5 @@
 				e = fromInt( i );
 				break;
-			}
+			} // if
 		} // if
 	} else {
Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision a1a1f37d7d17459fbc460ce2bf20161d668d4835)
+++ libcfa/src/iostream.cfa	(revision d796be70ffd585b1fe3d76c6c3d82d2213614cfd)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 12 05:45:45 2024
-// Update Count     : 2019
+// Last Modified On : Mon Jul 15 08:16:48 2024
+// Update Count     : 2020
 //
 
@@ -781,5 +781,5 @@
 		// Optional leading whitespace at start of strings.
 		fmt( is, " " FALSE "%n", &len );				// try false
-		if ( len != sizeof( FALSE ) - 1 ) {				// remove null terminate
+		if ( len != sizeof( FALSE ) - 1 ) {				// -1 removes null terminate
 			fmt( is, " " TRUE "%n", &len );				// try true
 			if ( len != sizeof( TRUE ) - 1 ) throwResume ExceptionInst( missing_data );
