Index: doc/LaTeXmacros/lstlang.sty
===================================================================
--- doc/LaTeXmacros/lstlang.sty	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/LaTeXmacros/lstlang.sty	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -8,6 +8,6 @@
 %% Created On       : Sat May 13 16:34:42 2017
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Wed Jul 24 07:40:11 2024
-%% Update Count     : 45
+%% Last Modified On : Fri Jan 17 14:29:52 2025
+%% Update Count     : 46
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -117,5 +117,5 @@
 		__auto_type, basetypeof, _Bool, bool, catch, catchResume, choose, coerce, cofor, corun, countof, _Complex, __complex, __complex__,
 		__const, __const__, continue, coroutine, _Decimal32, _Decimal64, _Decimal128, disable, dtype, enable, exception, __extension__,
-		fallthrough, fallthru, finally, fixup, __float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64,
+		fallthrough, finally, fixup, __float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64,
 		_Float64x, _Float128, _Float128x, forall, fortran, ftype, generator, _Generic, _Imaginary, __imag, __imag__, inline,
 		__inline, __inline__, int128, __int128, __int128_t, __label__, monitor, mutex, _Noreturn, __builtin_offsetof, one_t, or,
Index: doc/papers/OOPSLA17/generic_types.tex
===================================================================
--- doc/papers/OOPSLA17/generic_types.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/papers/OOPSLA17/generic_types.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -66,5 +66,5 @@
 	morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto,
 		_Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__,
-		fallthrough,fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,one_t,otype,restrict,_Static_assert,
+		fallthrough,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,one_t,otype,restrict,_Static_assert,
 		_Thread_local,throw,throwResume,trait,try,ttype,typeof,__typeof,__typeof__,zero_t},
 }%
Index: doc/papers/concurrency/Paper.tex
===================================================================
--- doc/papers/concurrency/Paper.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/papers/concurrency/Paper.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -162,5 +162,5 @@
 		_Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__,
 		auto, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__,
-		coroutine, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, finally,
+		coroutine, disable, dtype, enable, exception, __extension__, fallthrough, finally,
 		__float80, float80, __float128, float128, forall, ftype, generator, _Generic, _Imaginary, __imag, __imag__,
 		inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or,
Index: doc/papers/general/Paper.tex
===================================================================
--- doc/papers/general/Paper.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/papers/general/Paper.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -143,5 +143,5 @@
 		_Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__,
 		auto, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__,
-		coroutine, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, finally,
+		coroutine, disable, dtype, enable, exception, __extension__, fallthrough, finally,
 		__float80, float80, __float128, float128, forall, ftype, _Generic, _Imaginary, __imag, __imag__,
 		inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or,
Index: doc/papers/llheap/Paper.tex
===================================================================
--- doc/papers/llheap/Paper.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/papers/llheap/Paper.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -108,5 +108,5 @@
 		_Alignas, _Alignof, __alignof, __alignof__, and, asm, __asm, __asm__, _Atomic, __attribute, __attribute__,
 		__auto_type, basetypeof, _Bool, catch, catchResume, choose, coerce, _Complex, __complex, __complex__, __const, __const__,
-		coroutine, _Decimal32, _Decimal64, _Decimal128, disable, enable, exception, __extension__, fallthrough, fallthru, finally, fixup,
+		coroutine, _Decimal32, _Decimal64, _Decimal128, disable, enable, exception, __extension__, fallthrough, finally, fixup,
 		__float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64, _Float64x, _Float128, _Float128x,
 		forall, fortran, generator, _Generic, _Imaginary, __imag, __imag__, inline, __inline, __inline__, int128, __int128, __int128_t,
Index: doc/refrat/keywords.tex
===================================================================
--- doc/refrat/keywords.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/refrat/keywords.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -11,6 +11,6 @@
 %% Created On       : Sun Aug  6 08:17:27 2017
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Fri Apr  6 15:16:11 2018
-%% Update Count     : 7
+%% Last Modified On : Fri Jan 17 14:45:13 2025
+%% Update Count     : 8
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{tabular}{@{}llllll@{}}
@@ -28,5 +28,4 @@
 ©exception©		\\
 ©fallthrough©	\\
-©fallthru©		\\
 \end{tabular}
 &
Index: doc/refrat/refrat.tex
===================================================================
--- doc/refrat/refrat.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/refrat/refrat.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:52:25 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Mon Oct  5 09:02:53 2020
-%% Update Count     : 110
+%% Last Modified On : Fri Jan 17 14:45:04 2025
+%% Update Count     : 111
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -3348,5 +3348,5 @@
 
 The ©choose© statement is the same as the ©switch© statement except control transfers to the end of the ©choose© statement at a ©case© or ©default© labeled statement.
-The ©fallthru© statement is used to fall through to the next ©case© or ©default© labeled statement.
+The ©fallthrough© statement is used to fall through to the next ©case© or ©default© labeled statement.
 The following have identical meaning:
 \begin{flushleft}
@@ -3366,6 +3366,6 @@
   case 1: ... ; // exit
   case 2: ... ; // exit
-  case 3: ... ; fallthru;
-  case 4: ... ; fallthru;
+  case 3: ... ; fallthrough;
+  case 4: ... ; fallthrough;
   default: ... ; // exit
 }
Index: doc/theses/aaron_moss_PhD/phd/cfa-macros.tex
===================================================================
--- doc/theses/aaron_moss_PhD/phd/cfa-macros.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/theses/aaron_moss_PhD/phd/cfa-macros.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -27,5 +27,5 @@
 		_Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__,
 		auto, bool, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__,
-		coroutine, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, finally,
+		coroutine, disable, dtype, enable, exception, __extension__, fallthrough, finally,
 		__float80, float80, __float128, float128, forall, ftype, _Generic, _Imaginary, __imag, __imag__,
 		inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or,
Index: doc/theses/andrew_beach_MMath/cfalab.sty
===================================================================
--- doc/theses/andrew_beach_MMath/cfalab.sty	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/theses/andrew_beach_MMath/cfalab.sty	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -76,5 +76,5 @@
         choose, _Complex, __complex, __complex__, __const, __const__,
         coroutine, disable, dtype, enable, exception, __extension__,
-        fallthrough, fallthru, finally, __float80, float80, __float128,
+        fallthrough, finally, __float80, float80, __float128,
         float128, forall, ftype, generator, _Generic, _Imaginary, __imag,
         __imag__, inline, __inline, __inline__, __int128, int128, __label__,
Index: doc/theses/andrew_beach_MMath/features.tex
===================================================================
--- doc/theses/andrew_beach_MMath/features.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/theses/andrew_beach_MMath/features.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -822,5 +822,5 @@
 control flow.
 Because of this requirement, local control flow out of the finally block
-is forbidden. The compiler precludes any @break@, @continue@, @fallthru@ or
+is forbidden. The compiler precludes any @break@, @continue@, @fallthrough@ or
 @return@ that causes control to leave the finally block. Other ways to leave
 the finally block, such as a @longjmp@ or termination are much harder to check,
Index: doc/theses/fangren_yu_MMath/intro.tex
===================================================================
--- doc/theses/fangren_yu_MMath/intro.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/theses/fangren_yu_MMath/intro.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -518,7 +518,7 @@
 
 \begin{enumerate}
-\item
-\item
-\item
+\item The \CFA compiler performance and capability have been greatly improved through recent development. The compilation time of various \CFA library units and test programs have been reduced from the order of minutes down to 10-20 seconds, which made it possible to develop and test more complicated \CFA programs that utilize sophisticated type system features. The details of compiler optimization work are covered in a previous technical report.
+\item The thesis presents a systematic review of the new features that have been added to the \CFA language and its type system. Some of the more recent inclusions to \CFA such as tuples and generic structure types were not well tested when they were being developed, due to the limitation of compiler performance. Several issues coming from the interactions of various language features are identified and discussed in this thesis; some of them are now fully resolved, while others are given temporary fixes and need to be reworked in the future.
+\item Finally, this thesis provides constructive ideas of fixing the outstanding issues in \CFA language design and implementation, and gives a path for future improvements to \CFA language and compiler.
 \end{enumerate}
 
Index: doc/uC++toCFA/uC++toCFA.tex
===================================================================
--- doc/uC++toCFA/uC++toCFA.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/uC++toCFA/uC++toCFA.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Fri Nov 15 09:55:34 2024
-%% Update Count     : 6249
+%% Last Modified On : Fri Jan 17 07:39:09 2025
+%% Update Count     : 6284
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -197,28 +197,4 @@
 
 
-\section{Stream I/O}
-
-\CFA output streams automatically separate values and insert a newline at the end of the print.
-\begin{cquote}
-\begin{tabular}{@{}l|l@{}}
-\begin{uC++}
-#include <@iostream@>
-using namespace std;
-int i;   double d;   char c;
-cin >> i >> d >> c;
-cout << i << ' ' << d << ' ' << c | endl;
-\end{uC++}
-&
-\begin{cfa}
-#include <@fstream.hfa@>
-
-int i;   double d;   char c;
-sin | i | d | c;
-sout | i | d | c
-\end{cfa}
-\end{tabular}
-\end{cquote}
-
-
 \section{Looping}
 
@@ -240,6 +216,9 @@
 for ( i; 0 @-@~ 10 ) { ... }
 \end{cfa}
-\\
-\hline
+\end{tabular}
+\end{cquote}
+
+\begin{cquote}
+\begin{tabular}{@{}l|l@{}}
 \begin{uC++}
 int i = 0
@@ -253,6 +232,9 @@
 @else@ { ... } // i == 10
 \end{cfa}
-\\
-\hline
+\end{tabular}
+\end{cquote}
+
+\begin{cquote}
+\begin{tabular}{@{}l|l@{}}
 \begin{uC++}
 @L1:@ for ( ;; ) {
@@ -271,4 +253,62 @@
 	}
 }
+\end{cfa}
+\end{tabular}
+\end{cquote}
+
+
+\section{Stream I/O}
+
+\CFA output streams automatically separate values and insert a newline at the end of the print.
+\begin{cquote}
+\begin{tabular}{@{}l|l@{}}
+\begin{uC++}
+#include <@iostream@>
+using namespace std;
+int i;   double d;   char c;
+cin >> i >> d >> c;
+cout << i << ' ' << d << ' ' << c << endl;
+\end{uC++}
+&
+\begin{cfa}
+#include <@fstream.hfa@>
+
+int i;   double d;   char c;
+sin | i | d | c;
+sout | i | d | c
+\end{cfa}
+\end{tabular}
+\end{cquote}
+To disable/enable automatic newline at the end of printing, use @nlOff@/@nlOn@ and @nl@.
+\begin{cquote}
+\begin{tabular}{@{}l|l@{}}
+\begin{uC++}
+
+for ( int i = 0; i < 5; i += 1 ) cout << i << ' ';
+cout << @endl@;
+
+0 1 2 3 4 
+\end{uC++}
+&
+\begin{cfa}
+sout | @nlOff@; // disable auto nl
+for ( i; 5 ) sout | i;
+sout | @nl@;
+sout | @nlOn@;  // reenable auto nl
+0 1 2 3 4 
+\end{cfa}
+\end{tabular}
+\end{cquote}
+Floating-point numbers without a fraction print with a decimal point, which can be disabled with @nodp@.
+\begin{cquote}
+\begin{tabular}{@{}l|l@{}}
+\begin{uC++}
+cout << 3.0 << ' ' << showpoint << setprecision(0) << 3.0 << endl;
+3 3.
+\end{uC++}
+&
+\begin{cfa}
+sout | @nodp( 3.0 )@ | 3.0;
+3 3.
 \end{cfa}
 \end{tabular}
@@ -291,9 +331,8 @@
 	if ( ... ) @_Throw@ E( /* initialization */ );
 		...
-} @_CatchResume@( E & ) { ... // reference
-} catch( E & ) { ...
-} catch( ... ) { ... // catch any
-} _Finally { ...
-}
+} @_CatchResume@( E & /* reference */ ) { ... }
+  catch( E & ) { ... }
+  catch( ... /* catch any */ ) { ... }
+  _Finally { ... }
 \end{uC++}
 &
@@ -308,9 +347,8 @@
 	if ( ... ) @throw@ @ExceptionInst@( E, /* intialization */ );
 	...
-} @catchResume@( E * ) { ... // pointer
-} catch( E * ) { ...
-} catch( exception_t * ) { ... // catch any
-} finally { ...
-}
+} @catchResume@( E @*@ /* pointer */ ) { ... }
+  catch( E * ) { ... }
+  catch( exception_t @*@ /* catch any */ ) { ... }
+  finally { ... }
 \end{cfa}
 \end{tabular}
@@ -330,9 +368,6 @@
 			... suspend(); ...
 		}
-	} @_CatchResume@( E & ) { // reference
-		...
-	} catch( E & ) {
-		...
-	}
+	} @_CatchResume@( E & /* reference */ ) { ... }
+	  catch( E & ) { ... }
 }
 \end{uC++}
@@ -346,9 +381,6 @@
 		... suspendPoll ...
 		disable_ehm();
-	} @catchResume@( E * ) { // pointer
-		...
-	} catch( E & ) {
-		...
-	}
+	} @catchResume@( E * ) { ... }
+	  catch( E & ) { ... }
 }
 \end{cfa}
@@ -556,37 +588,4 @@
 
 
-\section{Thread}
-
-\begin{cquote}
-\begin{tabular}{@{}l|ll@{}}
-\begin{uC++}
-
-@_Task@ T {
-	// private task fields
-	void main() {
-		... @_Resume E( ... ) _At partner@;
-		... @uThisTask();@ ...
-	}
-  public:
-};
-\end{uC++}
-&
-\begin{cfa}
-#include <$thread$.hfa>
-@thread@ T {
-	// private task fields
-
-};
-void main( @T & t@ ) {
-	... @resumeAt( partner, ExceptionInst( E, ... )@ );
-	... @active_thread();@ ...
-}
-\end{cfa}
-\\
-\multicolumn{2}{@{}l@{}}{\lstinline{T t; // start thread in main routine}}
-\end{tabular}
-\end{cquote}
-
-
 \section{\lstinline{COBEGIN}/\lstinline{COFOR}}
 
@@ -602,5 +601,4 @@
 		BEGIN osacquire( cout ) << "C" << endl; END
 		BEGIN osacquire( cout ) << "D" << endl; END
-		BEGIN osacquire( cout ) << "E" << endl; END
 	@COEND@
 	@COFOR@( i, 1, 10,
@@ -619,5 +617,4 @@
 		corun { mutex( sout ) sout | "C"; }
 		corun { mutex( sout ) sout | "D"; }
-		corun { mutex( sout ) sout | "E"; }
 	}
 	@cofor@( i; 10 ) {
@@ -703,4 +700,37 @@
 }
 \end{cfa}
+\end{tabular}
+\end{cquote}
+
+
+\section{Thread}
+
+\begin{cquote}
+\begin{tabular}{@{}l|ll@{}}
+\begin{uC++}
+
+@_Task@ T {
+	// private task fields
+	void main() {
+		... @_Resume E( ... ) _At partner@;
+		... @uThisTask();@ ...
+	}
+  public:
+};
+\end{uC++}
+&
+\begin{cfa}
+#include <$thread$.hfa>
+@thread@ T {
+	// private task fields
+
+};
+void main( @T & t@ ) {
+	... @resumeAt( partner, ExceptionInst( E, ... )@ );
+	... @active_thread();@ ...
+}
+\end{cfa}
+\\
+\multicolumn{2}{@{}l@{}}{\lstinline{T t; // start thread in main routine}}
 \end{tabular}
 \end{cquote}
Index: doc/user/user.tex
===================================================================
--- doc/user/user.tex	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ doc/user/user.tex	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Sat Dec  7 16:53:37 2024
-%% Update Count     : 6970
+%% Last Modified On : Fri Jan 17 14:20:39 2025
+%% Update Count     : 6971
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -893,5 +893,5 @@
 still works.
 Nevertheless, reversing the default action would have a non-trivial effect on case actions that compound, such as the above example of processing shell arguments.
-Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called \Indexc{choose}, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword \Indexc{fallthrough}/\-\Indexc{fallthru}, \eg:
+Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called \Indexc{choose}, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword \Indexc{fallthrough}, \eg:
 \begin{cfa}
 ®choose® ( i ) {
@@ -901,5 +901,5 @@
   case 5:
 	...
-	®fallthru®; §\C{// explicit fall through}§
+	®fallthrough®; §\C{// explicit fall through}§
   case 7:
 	...
@@ -911,5 +911,5 @@
 Like the ©switch© statement, the ©choose© statement retains the fall-through semantics for a list of ©case© clauses.
 An implicit ©break© is applied only at the end of the \emph{statements} following a ©case© clause.
-An explicit ©fallthru© is retained because it is a C-idiom most C programmers expect, and its absence might discourage programmers from using the ©choose© statement.
+An explicit ©fallthrough© is retained because it is a C-idiom most C programmers expect, and its absence might discourage programmers from using the ©choose© statement.
 As well, allowing an explicit ©break© from the ©choose© is a carry over from the ©switch© statement, and expected by C programmers.
 \item
@@ -950,5 +950,5 @@
   case 3:
 	if ( ... ) {
-		... ®fallthru;® // goto case 4
+		... ®fallthrough;® // goto case 4
 	} else {
 		...
@@ -985,5 +985,5 @@
 		for ( ... ) {
 			// multi-level transfer
-			... ®fallthru common;®
+			... ®fallthrough common;®
 		}
 		...
@@ -8053,5 +8053,5 @@
 \begin{cquote}
 \Indexc{basetypeof}, \Indexc{choose}, \Indexc{coroutine}, \Indexc{disable},
-\Indexc{enable}, \Indexc{exception}, \Indexc{fallthrough}, \Indexc{fallthru},
+\Indexc{enable}, \Indexc{exception}, \Indexc{fallthrough}, \Indexc{fallthrough},
 \Indexc{finally}, \Indexc{fixup}, \Indexc{forall},\Indexc{generator},
 \Indexc{int128}, \Indexc{monitor}, \Indexc{mutex}, \Indexc{one_t},
@@ -8079,5 +8079,5 @@
 \Indexc{exception}		\\
 \Indexc{fallthrough}	\\
-\Indexc{fallthru}		\\
+\Indexc{fallthrough}	\\
 \end{tabular}
 &
Index: libcfa/src/concurrency/monitor.cfa
===================================================================
--- libcfa/src/concurrency/monitor.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ libcfa/src/concurrency/monitor.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -9,7 +9,7 @@
 // Author           : Thierry Delisle
 // Created On       : Thd Feb 23 12:27:26 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Nov 27 12:13:14 2024
-// Update Count     : 72
+// Last Modified By : Kyoung Seo
+// Last Modified On : Thd Jan 16 12:59:00 2025
+// Update Count     : 73
 //
 
@@ -922,37 +922,9 @@
 static inline [thread$ *, int] search_entry_queue( const __waitfor_mask_t & mask, monitor$ * monitors [], __lock_size_t count ) {
 	__queue_t(thread$) & entry_queue = monitors[0]->entry_queue;
-
-#if 0
-	#if defined( __CFA_WITH_VERIFY__ )
-		thread$ * last = 0p;
-	#endif
-	// For each thread in the entry-queue
-	for ( thread$ ** thrd_it = &entry_queue.head; (*thrd_it) != 1p; thrd_it = &get_next(**thrd_it) ) {
-		thread$ * curr = *thrd_it;
-
-		/* paranoid */ verifyf( !last || last->user_link.next == curr, "search not making progress, from %p (%p) to %p",
-								last, last->user_link.next, curr );
-		/* paranoid */ verifyf( curr != last, "search not making progress, from %p to %p", last, curr );
-
-		// For each acceptable check if it matches
-		int i = 0;
-		__acceptable_t * end = end(mask);
-		__acceptable_t * begin = begin(mask);
-		for ( __acceptable_t * it = begin; it != end; it++, i++ ) {
-			// Check for match
-			if ( *it == curr->monitors ) {
-				// If match, return it after removeing it from the entry queue
-				return [remove( entry_queue, thrd_it ), i];
-			}
-		}
-
-		#if defined( __CFA_WITH_VERIFY__ )
-			last = curr;
-		#endif
-	}
-#else
 	// For each acceptable (respect lexical priority in waitfor statement)
-	__acceptable_t * it = end(mask); it--;				// end is passed the last node, so backup
-	for ( int i = mask.size - 1; i >= 0; i -= 1, it-- ) {
+	int i = 0;
+	__acceptable_t * end = end(mask);
+	__acceptable_t * begin = begin(mask);
+	for ( __acceptable_t * it = begin; it != end; it++, i++ ) {
 		#if defined( __CFA_WITH_VERIFY__ )
 		thread$ * last = 0p;
@@ -977,5 +949,4 @@
 		} // for
 	} // for
-#endif
 	return [0, -1];
 }
Index: _tests/floating.cfa
===================================================================
--- my_tests/floating.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ 	(revision )
@@ -1,5 +1,0 @@
-struct S {};
-
-enum( struct S ) mary { MX = {} };
-
-int main() {}
Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ src/AST/Expr.cpp	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -122,6 +122,9 @@
 
 bool VariableExpr::get_lvalue() const {
-	// It isn't always an lvalue, but it is never an rvalue.
+	// Special case for enumeration labels (more literals than variables):
 	if(dynamic_cast<const ast::EnumInstType *>(var->get_type())) return !var->isMember;
+	// The remaining uses are either actual variables (lvalues) or function
+	// names which are a special value catagory that can be treated as
+	// lvalues in the places we are worried about.
 	return true;
 }
Index: src/AST/Stmt.hpp
===================================================================
--- src/AST/Stmt.hpp	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ src/AST/Stmt.hpp	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -9,7 +9,7 @@
 // Author           : Aaron B. Moss
 // Created On       : Wed May  8 13:00:00 2019
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Apr  5 10:34:00 2023
-// Update Count     : 37
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Jan 17 14:18:56 2025
+// Update Count     : 38
 //
 
@@ -280,5 +280,5 @@
 };
 
-// Branch control flow statement: goto ... or break or continue or fallthru
+// Branch control flow statement: goto ... or break or continue or fallthrough
 class BranchStmt final : public Stmt {
   public:
Index: src/CodeGen/CodeGenerator.cpp
===================================================================
--- src/CodeGen/CodeGenerator.cpp	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ src/CodeGen/CodeGenerator.cpp	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -9,7 +9,7 @@
 // Author           : Andrew Beach
 // Created On       : Tue Oct 17 15:54:00 2023
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Oct 25 18:28:00 2023
-// Update Count     : 0
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Jan 17 14:19:22 2025
+// Update Count     : 1
 //
 
@@ -1092,11 +1092,11 @@
 	case ast::BranchStmt::FallThrough:
 	case ast::BranchStmt::FallThroughDefault:
-		assertf( !options.genC, "fallthru should not reach code generation." );
-		output << "fallthru";
+		assertf( !options.genC, "fallthrough should not reach code generation." );
+		output << "fallthrough";
 		break;
 	default:
 		assertf( false, "Bad BranchStmt value." );
 	}
-	// Print branch target for labelled break/continue/fallthru in debug mode.
+	// Print branch target for labelled break/continue/fallthrough in debug mode.
 	if ( !options.genC && stmt->kind != ast::BranchStmt::Goto ) {
 		if ( !stmt->target.empty() ) {
Index: src/Parser/StatementNode.cpp
===================================================================
--- src/Parser/StatementNode.cpp	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ src/Parser/StatementNode.cpp	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -10,7 +10,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 14:59:41 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 23 22:50:35 2024
-// Update Count     : 432
+// Last Modified By : Kyoung Seo
+// Last Modified On : Thd Jan 16 13:05:00 2025
+// Update Count     : 433
 //
 
@@ -351,5 +351,5 @@
 	delete targetExpr;
 
-	existing->clauses.insert( existing->clauses.begin(), clause );
+	existing->clauses.insert( existing->clauses.end(), clause );
 
 	return existing;
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ src/Parser/lex.ll	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Sun Dec 15 17:23:46 2024
- * Update Count     : 877
+ * Last Modified On : Fri Jan 17 14:36:16 2025
+ * Update Count     : 878
  */
 
@@ -273,5 +273,4 @@
 extern			{ KEYWORD_RETURN(EXTERN); }
 fallthrough		{ KEYWORD_RETURN(FALLTHROUGH); }		// CFA
-fallthru		{ KEYWORD_RETURN(FALLTHRU); }			// CFA
 finally			{ QKEYWORD_RETURN(FINALLY); }			// CFA
 fixup			{ QKEYWORD_RETURN(FIXUP); }				// CFA
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ src/Parser/parser.yy	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Dec 15 21:30:38 2024
-// Update Count     : 6933
+// Last Modified On : Fri Jan 17 14:35:08 2025
+// Update Count     : 6935
 //
 
@@ -377,5 +377,5 @@
 %token ATTRIBUTE EXTENSION								// GCC
 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
-%token CHOOSE FALLTHRU FALLTHROUGH WITH WHEN WAITFOR WAITUNTIL // CFA
+%token CHOOSE FALLTHROUGH WITH WHEN WAITFOR WAITUNTIL	// CFA
 %token CORUN COFOR
 %token DISABLE ENABLE TRY THROW THROWRESUME AT			// CFA
@@ -1680,10 +1680,10 @@
 		// whereas normal operator precedence yields goto (*i)+3;
 		{ $$ = new StatementNode( build_computedgoto( $3 ) ); }
-		// A semantic check is required to ensure fallthru appears only in the body of a choose statement.
-	| fall_through_name ';'								// CFA
+		// A semantic check is required to ensure fallthrough appears only in the body of a choose statement.
+	| FALLTHROUGH ';'									// CFA
 		{ $$ = new StatementNode( build_branch( yylloc, ast::BranchStmt::FallThrough ) ); }
-	| fall_through_name identifier_or_type_name ';'		// CFA
+	| FALLTHROUGH identifier_or_type_name ';'			// CFA
 		{ $$ = new StatementNode( build_branch( yylloc, $2, ast::BranchStmt::FallThrough ) ); }
-	| fall_through_name DEFAULT ';'						// CFA
+	| FALLTHROUGH DEFAULT ';'							// CFA
 		{ $$ = new StatementNode( build_branch( yylloc, ast::BranchStmt::FallThroughDefault ) ); }
 	| CONTINUE ';'
@@ -1723,9 +1723,4 @@
 	| THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
 		{ $$ = new StatementNode( build_resume_at( $2, $4 ) ); }
-	;
-
-fall_through_name:										// CFA
-	FALLTHRU
-	| FALLTHROUGH
 	;
 
Index: tests/concurrency/actors/dynamic.cfa
===================================================================
--- tests/concurrency/actors/dynamic.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/actors/dynamic.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -37,5 +37,5 @@
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Times = ato( argv[1] );
-			if ( Times < 1 ) fallthru default;
+			if ( Times < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/actors/executor.cfa
===================================================================
--- tests/concurrency/actors/executor.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/actors/executor.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -41,30 +41,30 @@
 		if ( strcmp( argv[6], "d" ) != 0 ) {			// default ?
 			BufSize = ato( argv[6] );
-			if ( BufSize < 0 ) fallthru default;
+			if ( BufSize < 0 ) fallthrough default;
 		} // if
 	  case 6:
 		if ( strcmp( argv[5], "d" ) != 0 ) {			// default ?
 			Batch = ato( argv[5] );
-			if ( Batch < 1 ) fallthru default;
+			if ( Batch < 1 ) fallthrough default;
 		} // if
 	  case 5:
 		if ( strcmp( argv[4], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[4] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 4:
 		if ( strcmp( argv[3], "d" ) != 0 ) {			// default ?
 			Rounds = ato( argv[3] );
-			if ( Rounds < 1 ) fallthru default;
+			if ( Rounds < 1 ) fallthrough default;
 		} // if
 	  case 3:
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			Set = ato( argv[2] );
-			if ( Set < 1 ) fallthru default;
+			if ( Set < 1 ) fallthrough default;
 		} // if
 	  case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Actors = ato( argv[1] );
-			if ( Actors < 1 || Actors <= Set || Actors % Set != 0 ) fallthru default;
+			if ( Actors < 1 || Actors <= Set || Actors % Set != 0 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/actors/matrixMultiply.cfa
===================================================================
--- tests/concurrency/actors/matrixMultiply.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/actors/matrixMultiply.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -39,20 +39,20 @@
 		if ( strcmp( argv[4], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[4] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 4:
 		if ( strcmp( argv[3], "d" ) != 0 ) {			// default ?
 			xr = ato( argv[3] );
-			if ( xr < 1 ) fallthru default;
+			if ( xr < 1 ) fallthrough default;
 		} // if
 	  case 3:
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			xc = ato( argv[2] );
-			if ( xc < 1 ) fallthru default;
+			if ( xc < 1 ) fallthrough default;
 		} // if
 	  case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			yc = ato( argv[1] );
-			if ( yc < 1 ) fallthru default;
+			if ( yc < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/actors/static.cfa
===================================================================
--- tests/concurrency/actors/static.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/actors/static.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -34,5 +34,5 @@
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Times = ato( argv[1] );
-			if ( Times < 1 ) fallthru default;
+			if ( Times < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/channels/barrier.cfa
===================================================================
--- tests/concurrency/channels/barrier.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/channels/barrier.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -66,10 +66,10 @@
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			BarrierSize = ato( argv[2] );
-            if ( Processors < 1 ) fallthru default;
+            if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[1] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/channels/churn.cfa
===================================================================
--- tests/concurrency/channels/churn.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/channels/churn.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -91,15 +91,15 @@
 		if ( strcmp( argv[3], "d" ) != 0 ) {			// default ?
 			ChannelSize = ato( argv[3] );
-			if ( ChannelSize < 1 ) fallthru default;
+			if ( ChannelSize < 1 ) fallthrough default;
 		} // if
       case 3:
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			Channels = ato( argv[2] );
-			if ( Channels < 1 ) fallthru default;
+			if ( Channels < 1 ) fallthrough default;
 		} // if
       case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[1] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/channels/contend.cfa
===================================================================
--- tests/concurrency/channels/contend.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/channels/contend.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -128,10 +128,10 @@
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			ChannelSize = ato( argv[2] );
-			if ( ChannelSize < 1 ) fallthru default;
+			if ( ChannelSize < 1 ) fallthrough default;
 		} // if
 	  case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[1] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/channels/daisy_chain.cfa
===================================================================
--- tests/concurrency/channels/daisy_chain.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/channels/daisy_chain.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -38,10 +38,10 @@
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			Tasks = ato( argv[2] );
-            if ( Tasks < 1 ) fallthru default;
+            if ( Tasks < 1 ) fallthrough default;
 		} // if
 	  case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[1] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/channels/hot_potato.cfa
===================================================================
--- tests/concurrency/channels/hot_potato.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/channels/hot_potato.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -43,10 +43,10 @@
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			Tasks = ato( argv[2] );
-            if ( Tasks < 1 ) fallthru default;
+            if ( Tasks < 1 ) fallthrough default;
 		} // if
 	  case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[1] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/channels/pub_sub.cfa
===================================================================
--- tests/concurrency/channels/pub_sub.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/concurrency/channels/pub_sub.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -88,10 +88,10 @@
 		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
 			Tasks = ato( argv[2] );
-            if ( Tasks < 1 ) fallthru default;
+            if ( Tasks < 1 ) fallthrough default;
 		} // if
 	  case 2:
 		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
 			Processors = ato( argv[1] );
-			if ( Processors < 1 ) fallthru default;
+			if ( Processors < 1 ) fallthrough default;
 		} // if
 	  case 1:											// use defaults
Index: tests/concurrency/waitfor/.expect/lexical_priority.txt
===================================================================
--- tests/concurrency/waitfor/.expect/lexical_priority.txt	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
+++ tests/concurrency/waitfor/.expect/lexical_priority.txt	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -0,0 +1,2 @@
+f f f f f f f f f f f f f f f f f f f f f f f f f g g g g g g g g g g g g g g g g g g g g g g g g g
+f f f f f f f f f f f f f f f f f f f f f f f f f g g g g g g g g g g g g g g g g g g g g g g g g g
Index: tests/concurrency/waitfor/lexical_priority.cfa
===================================================================
--- tests/concurrency/waitfor/lexical_priority.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
+++ tests/concurrency/waitfor/lexical_priority.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -0,0 +1,47 @@
+#include <thread.hfa>
+#include <fstream.hfa>
+
+// Test priority order of waitfor clauses. To get deterministic output for repeatable testing, preemption is disabled
+// and the threads defer to each other at certain points.
+
+Duration default_preemption() {	return 0; }				// disable preemption
+
+enum { Times = 50, Half = Times / 2 };
+
+thread T {};
+void f( T & mutex ) {}
+void g( T & mutex ) {}
+void main( T & t ) {
+	sout | nlOff;
+	for ( Times / Half ) {
+		for ( Half ) {
+			waitfor( f : t ) sout | "f";
+			or waitfor( g :t ) sout | "g";				// service f before g
+		} // for
+		for ( Half ) {
+			waitfor( g : t ) sout | "g";				// service g before f
+			or waitfor( f : t )	sout | "f";
+		} // for
+		sout | "\n";
+	} // for
+}
+
+T t;													// shared
+
+thread F{};
+void main( F & ) {
+	for ( Half ) f( t );
+	for ( Half ) f( t );
+}
+
+thread G{};
+void main( G & ) {
+	for ( Half ) g( t );
+	for ( Half ) g( t );
+}
+
+int main() {
+	F f;
+	yield();											// let f get ahead
+	G g;
+}
Index: tests/ctrl-flow/fallthrough.cfa
===================================================================
--- tests/ctrl-flow/fallthrough.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/ctrl-flow/fallthrough.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar 14 10:06:25 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Dec 24 11:24:35 2018
-// Update Count     : 22
+// Last Modified On : Fri Jan 17 14:09:49 2025
+// Update Count     : 23
 //
 
@@ -20,15 +20,15 @@
 	  case 1:
 		sout | "case 1";
-		fallthru;
+		fallthrough;
 	  case 2:
 		sout | "case 2";
-		fallthru;
-		sout | "did not fallthru";
-		if ( 7 ) fallthru common2;
-		fallthru common1;
+		fallthrough;
+		sout | "did not fallthrough";
+		if ( 7 ) fallthrough common2;
+		fallthrough common1;
 	  case 3:
 		sout | "case 3";
-		fallthru default;
-		fallthru common1;
+		fallthrough default;
+		fallthrough common1;
 	  common1:
 		sout | "common1";
@@ -36,12 +36,12 @@
 	  case 4:
 		sout | "case 4";
-		fallthru common2;
+		fallthrough common2;
 	  case 5:
 		sout | "case 5";
-		fallthru common2;
-		fallthru default;
+		fallthrough common2;
+		fallthrough default;
 	  case 6:
 		sout | "case 6";
-		fallthru common2;
+		fallthrough common2;
 	  common2:
 		sout | "common2";
@@ -49,5 +49,5 @@
 	  default:
 		sout | "default";
-		fallthru;
+		fallthrough;
 	} // choose
 
@@ -62,5 +62,5 @@
 			for ( int i = 0; i < 4; i += 1 ) {
 				sout | i;
-				if ( i == 2 ) fallthru common;
+				if ( i == 2 ) fallthrough common;
 			} // for
 		} // switch
@@ -73,23 +73,23 @@
 			} else {
 				sout | "check";
-				fallthru common;
+				fallthrough common;
 			} // if
 		} // if
 	  common:
 		sout | "common";
-		fallthru;
+		fallthrough;
 		break;
 	  default:
 		sout | "default";
-		fallthru;
+		fallthrough;
 	} // switch
 
 #if ERR1
 	// ERROR: fallthrough must be enclosed in switch or choose
-	fallthru;
+	fallthrough;
 	// ERROR: fallthrough must be enclosed in switch or choose
-	fallthru common4;
+	fallthrough common4;
 	// ERROR: fallthrough must be enclosed in switch or choose
-	fallthru default;
+	fallthrough default;
 	choose ( 3 ) {
 	  case 2:
@@ -98,7 +98,7 @@
 			  case 1:
 				// ERROR: default is later, but in a different switch
-				fallthru default;
+				fallthrough default;
 				// ERROR: common3 is later, but not at the same level as a case clause
-				fallthru common3;
+				fallthrough common3;
 			}
 		  common3: ;
@@ -108,7 +108,7 @@
 	  common4:
 		// ERROR: attempt to jump up with fallthrough
-		if ( 7 ) fallthru common4;
+		if ( 7 ) fallthrough common4;
 		// ERROR: attempt to jump up with fallthrough
-		fallthru default;
+		fallthrough default;
 	} // choose
 #endif
Index: tests/ctrl-flow/labelledExit.cfa
===================================================================
--- tests/ctrl-flow/labelledExit.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/ctrl-flow/labelledExit.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -10,6 +10,6 @@
 // Created On       : Wed Aug 10 07:29:39 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  5 10:07:34 2021
-// Update Count     : 13
+// Last Modified On : Fri Jan 17 14:18:15 2025
+// Update Count     : 14
 // 
 
@@ -131,5 +131,5 @@
   			break Choose;
   		}
-  		fallthru;
+  		fallthrough;
   	  case 2:
   		i += 1;
Index: tests/exceptions/try-ctrl-flow.cfa
===================================================================
--- tests/exceptions/try-ctrl-flow.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/exceptions/try-ctrl-flow.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -81,9 +81,9 @@
 }
 
-void choose_fallthru_in_finally() {
+void choose_fallthrough_in_finally() {
 	choose (1) {
 	case 1:
 		try {} finally {
-			fallthru;
+			fallthrough;
 		}
 	default:
@@ -105,9 +105,9 @@
 }
 
-void labelled_choose_fallthru_in_finally() {
+void labelled_choose_fallthrough_in_finally() {
 	mainBlock: choose (1) {
 	case 1:
 		try {} finally {
-			fallthru mainBlock;
+			fallthrough mainBlock;
 		}
 	case 2:
@@ -118,9 +118,9 @@
 }
 
-void choose_fallthru_default_in_finally() {
+void choose_fallthrough_default_in_finally() {
 	choose (1) {
 	case 1:
 		try {} finally {
-			fallthru default;
+			fallthrough default;
 		}
 	default:
Index: tests/quotedKeyword.cfa
===================================================================
--- tests/quotedKeyword.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/quotedKeyword.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 23 20:31:05 2023
-// Update Count     : 26
+// Last Modified On : Fri Jan 17 14:10:32 2025
+// Update Count     : 27
 //
 
@@ -29,5 +29,5 @@
 	``__attribute__, ``auto, ``_Bool, ``break, ``case, ``catch, ``catchResume, ``char, ``choose, ``_Complex, ``__complex,
 	``__complex__, ``const, ``__const, ``__const__, ``continue, ``default, ``disable, ``do, ``double, ``dtype, ``else,
-	``enable, ``enum, ``__extension__, ``extern, ``fallthru, ``finally, ``float, ``__float128, ``for, ``forall, ``fortran,
+	``enable, ``enum, ``__extension__, ``extern, ``fallthrough, ``finally, ``float, ``__float128, ``for, ``forall, ``fortran,
 	``ftype, ``_Generic, ``goto, ``if, ``_Imaginary, ``__imag, ``__imag__, ``inline, ``__inline, ``__inline__, ``int,
 	``__int128, ``__label__, ``long, ``lvalue, ``_Noreturn, ``__builtin_offsetof, ``otype, ``register, ``restrict,
Index: tests/switch.cfa
===================================================================
--- tests/switch.cfa	(revision fa59c40f277c4183ad9f98defb4b63e87372cefa)
+++ tests/switch.cfa	(revision 8e90fd6bdd26acf67f6a5bae4b294ee9084241dc)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jul 12 06:50:22 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  5 10:08:20 2021
-// Update Count     : 44
+// Last Modified On : Fri Jan 17 14:10:12 2025
+// Update Count     : 45
 // 
 
@@ -96,5 +96,5 @@
 	  case 8~10:
 		f( 3 );
-		fallthru;
+		fallthrough;
 	  case 'd':
 		j = 5;
