Index: doc/theses/andrew_beach_MMath/code/FixupEmpty.java
===================================================================
--- doc/theses/andrew_beach_MMath/code/FixupEmpty.java	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/FixupEmpty.java	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,42 @@
+public class FixupEmpty {
+	public interface Fixup {
+		public int op(int fixup);
+	}
+
+	static void nounwind_fixup(int frames, Fixup raised_rtn) {
+		if (0 < frames) {
+			nounwind_fixup(frames - 1, raised_rtn);
+		} else {
+			int fixup = frames;
+			fixup = raised_rtn.op(fixup);
+		}
+	}
+
+	private static long loop(int times, int total_frames) {
+		Fixup raised = (int fixup) -> total_frames + 42; // use local scope => lexical link
+
+		long startTime = System.nanoTime();
+		for (int count = 0 ; count < times ; ++count) {
+			nounwind_fixup(total_frames, raised);
+		}
+		long endTime = System.nanoTime();
+		return endTime - startTime;
+	}
+
+	public static void main(String[] args) {
+		int times = 1;
+		int total_frames = 1;
+		if (0 < args.length) {
+			times = Integer.parseInt(args[0]);
+		}
+		if (1 < args.length) {
+			total_frames = Integer.parseInt(args[1]);
+		}
+
+		// Warm-Up:
+		loop(1000, total_frames);
+
+		long time = loop(times, total_frames);
+		System.out.format("Run-Time (s): %.1f%n", time / 1_000_000_000.);
+	}
+}
Index: doc/theses/andrew_beach_MMath/code/FixupOther.java
===================================================================
--- doc/theses/andrew_beach_MMath/code/FixupOther.java	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/FixupOther.java	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,44 @@
+public class FixupOther {
+	public interface Fixup {
+		public int op(int fixup);
+	}
+
+	static void nounwind_fixup(int frames, Fixup raised_rtn, Fixup not_raised_rtn) {
+	 	Fixup not_raised = (int fixup) -> frames + 42; // use local scope => lexical link
+		if (0 < frames) {
+			nounwind_fixup(frames - 1, raised_rtn, not_raised);
+		} else {
+			int fixup = 17;
+			fixup = raised_rtn.op(fixup);
+		}
+	}
+
+	private static long loop(int times, int total_frames) {
+		Fixup raised = (int fixup) -> total_frames + 42; // use local scope => lexical link
+		Fixup not_raised = (int fixup) -> total_frames + 42; // use local scope => lexical link
+
+		long startTime = System.nanoTime();
+		for (int count = 0 ; count < times ; ++count) {
+		    nounwind_fixup(total_frames, raised, not_raised);
+		}
+		long endTime = System.nanoTime();
+		return endTime - startTime;
+	}
+
+	public static void main(String[] args) {
+		int times = 1;
+		int total_frames = 1;
+		if (0 < args.length) {
+			times = Integer.parseInt(args[0]);
+		}
+		if (1 < args.length) {
+			total_frames = Integer.parseInt(args[1]);
+		}
+
+		// Warm-Up:
+		loop(1000, total_frames);
+
+		long time = loop(times, total_frames);
+		System.out.format("Run-Time (s): %.1f%n", time / 1_000_000_000.);
+	}
+}
Index: c/theses/andrew_beach_MMath/code/ResumeFixupEmpty.java
===================================================================
--- doc/theses/andrew_beach_MMath/code/ResumeFixupEmpty.java	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,42 +1,0 @@
-public class ResumeFixupEmpty {
-	public interface Fixup {
-		public int op(int fixup);
-	}
-
-	static void nounwind_fixup(int frames, Fixup raised_rtn) {
-		if (0 < frames) {
-			nounwind_fixup(frames - 1, raised_rtn);
-		} else {
-			int fixup = frames;
-			fixup = raised_rtn.op(fixup);
-		}
-	}
-
-	private static long loop(int times, int total_frames) {
-		Fixup raised = (int fixup) -> total_frames + 42; // use local scope => lexical link
-
-		long startTime = System.nanoTime();
-		for (int count = 0 ; count < times ; ++count) {
-			nounwind_fixup(total_frames, raised);
-		}
-		long endTime = System.nanoTime();
-		return endTime - startTime;
-	}
-
-	public static void main(String[] args) {
-		int times = 1;
-		int total_frames = 1;
-		if (0 < args.length) {
-			times = Integer.parseInt(args[0]);
-		}
-		if (1 < args.length) {
-			total_frames = Integer.parseInt(args[1]);
-		}
-
-		// Warm-Up:
-		loop(1000, total_frames);
-
-		long time = loop(times, total_frames);
-		System.out.format("Run-Time (s): %.1f%n", time / 1_000_000_000.);
-	}
-}
Index: c/theses/andrew_beach_MMath/code/ResumeFixupOther.java
===================================================================
--- doc/theses/andrew_beach_MMath/code/ResumeFixupOther.java	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,44 +1,0 @@
-public class ResumeFixupOther {
-	public interface Fixup {
-		public int op(int fixup);
-	}
-
-	static void nounwind_fixup(int frames, Fixup raised_rtn, Fixup not_raised_rtn) {
-	 	Fixup not_raised = (int fixup) -> frames + 42; // use local scope => lexical link
-		if (0 < frames) {
-			nounwind_fixup(frames - 1, raised_rtn, not_raised);
-		} else {
-			int fixup = 17;
-			fixup = raised_rtn.op(fixup);
-		}
-	}
-
-	private static long loop(int times, int total_frames) {
-		Fixup raised = (int fixup) -> total_frames + 42; // use local scope => lexical link
-		Fixup not_raised = (int fixup) -> total_frames + 42; // use local scope => lexical link
-
-		long startTime = System.nanoTime();
-		for (int count = 0 ; count < times ; ++count) {
-		    nounwind_fixup(total_frames, raised, not_raised);
-		}
-		long endTime = System.nanoTime();
-		return endTime - startTime;
-	}
-
-	public static void main(String[] args) {
-		int times = 1;
-		int total_frames = 1;
-		if (0 < args.length) {
-			times = Integer.parseInt(args[0]);
-		}
-		if (1 < args.length) {
-			total_frames = Integer.parseInt(args[1]);
-		}
-
-		// Warm-Up:
-		loop(1000, total_frames);
-
-		long time = loop(times, total_frames);
-		System.out.format("Run-Time (s): %.1f%n", time / 1_000_000_000.);
-	}
-}
Index: doc/theses/andrew_beach_MMath/code/cond-catch.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/cond-catch.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/cond-catch.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -32,5 +32,5 @@
 
     end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
 
 
Index: doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,40 @@
+// Resume Across Fixup
+#include <clock.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>									// strto
+
+int nounwind_fixup(unsigned int frames, void (*raised_rtn)(int &)) {
+	if (frames) {
+		int rtn = nounwind_fixup(frames - 1, raised_rtn);
+		if ( rtn == 42 ) printf( "42" );				// make non-tail recursive
+		return rtn;
+
+	} else {
+		int fixup = 17;
+		raised_rtn(fixup);
+		return fixup;
+	}
+}
+
+int main(int argc, char * argv[]) {
+	unsigned int times = 1;
+	unsigned int total_frames = 1;
+	if (1 < argc) {
+		times = strto(argv[1], 0p, 10);
+	}
+	if (2 < argc) {
+		total_frames = strto(argv[2], 0p, 10);
+	}
+
+	void raised(int & fixup) {
+		fixup = total_frames + 42;						// use local scope => lexical link
+		if ( total_frames == 42 ) printf( "42" );
+	}
+
+	Time start_time = timeHiRes();
+	for (unsigned int count = 0 ; count < times ; ++count) {
+		nounwind_fixup(total_frames, raised);
+	}
+	Time end_time = timeHiRes();
+	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
+}
Index: doc/theses/andrew_beach_MMath/code/fixup-empty-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-empty-r.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty-r.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,44 @@
+// Resume Across Empty Function
+#include <clock.hfa>
+#include <exception.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>									// strto
+
+exception fixup_exception {
+	int & fixup;
+};
+vtable(fixup_exception) fixup_vt;
+
+int nounwind_empty(unsigned int frames) {
+	if (frames) {
+		int rtn = nounwind_empty(frames - 1);
+		if ( rtn == 42 ) printf( "42" );				// make non-tail recursive
+		return rtn;
+	} else {
+		int fixup = 17;
+		throwResume (fixup_exception){&fixup_vt, fixup}; // change bad fixup
+		return fixup;
+	}
+}
+
+int main(int argc, char * argv[]) {
+	unsigned int times = 1;
+	unsigned int total_frames = 1;
+	if (1 < argc) {
+		times = strto(argv[1], 0p, 10);
+	}
+	if (2 < argc) {
+		total_frames = strto(argv[2], 0p, 10);
+	}
+
+	Time start_time = timeHiRes();
+	for (unsigned int count = 0 ; count < times ; ++count) {
+		try {
+			nounwind_empty(total_frames);
+		} catchResume (fixup_exception * ex) {
+			ex->fixup = total_frames + 42;
+		}
+	}
+	Time end_time = timeHiRes();
+	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
+}
Index: doc/theses/andrew_beach_MMath/code/fixup-empty.cpp
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-empty.cpp	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty.cpp	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,41 @@
+// Resume Across Fixup
+#include <chrono>
+#include <cstdlib>
+#include <exception>
+#include <iostream>
+#include <iomanip>
+#include <functional>
+
+using namespace std;
+using namespace chrono;
+
+void nounwind_fixup(unsigned int frames, function<void (int &)> raised_rtn ) {
+	if (frames) {
+		nounwind_fixup(frames - 1, raised_rtn);
+	} else {
+		int fixup = 17;
+		raised_rtn(fixup);
+	}
+}
+
+int main(int argc, char * argv[]) {
+	unsigned int times = 1;
+	unsigned int total_frames = 1;
+	if (1 < argc) {
+		times = strtol(argv[1], nullptr, 10);
+	}
+	if (2 < argc) {
+		total_frames = strtol(argv[2], nullptr, 10);
+	}
+
+	auto raised = [=] (int & fixup) -> void {
+					  fixup = total_frames + 42;		// use local scope => lexical link
+				  };
+	time_point<steady_clock> start_time = steady_clock::now();
+	for (unsigned int count = 0 ; count < times ; ++count) {
+		nounwind_fixup(total_frames, raised);
+	}
+	time_point<steady_clock> end_time = steady_clock::now();
+	nanoseconds duration = duration_cast<nanoseconds>(end_time - start_time);
+	cout << "Run-Time (s): " << fixed << setprecision(1) << duration.count() / 1'000'000'000. << endl;
+}
Index: doc/theses/andrew_beach_MMath/code/fixup-empty.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-empty.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+
+from time import thread_time_ns
+
+def nounwind_fixup(frames, raised_rtn):
+    if 0 < frames:
+        nounwind_fixup(frames - 1, raised_rtn)
+    else:
+        fixup = 17;
+        raised_rtn(fixup);
+
+
+def main(argv):
+    times = 1
+    total_frames = 1
+    if 1 < len(argv):
+        times = int(argv[1])
+    if 2 < len(argv):
+        total_frames = int(argv[2])
+
+    raised = lambda lfixup : total_frames + 42		# use local scope => lexical link
+    start_time = thread_time_ns()
+    for count in range(times):
+        nounwind_fixup(total_frames, raised)
+
+    end_time = thread_time_ns()
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
+
+
+if '__main__' == __name__:
+    import sys
+    main(sys.argv)
Index: doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,46 @@
+// Resume Across Fixup
+#include <clock.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>									// strto
+
+unsigned int frames;									// use global because of gcc thunk problem
+
+void nounwind_fixup(unsigned int dummy, void (*raised_rtn)(int &), void (*not_raised_rtn)(int &)) {
+	void not_raised(int & fixup) {
+		fixup = frames + 42;							// use local scope => lexical link
+	}
+
+	if (frames) {
+		frames -= 1;
+		nounwind_fixup(42, raised_rtn, not_raised);
+	} else {
+		int fixup = dummy;
+		raised_rtn(fixup);
+	}
+}
+
+int main(int argc, char * argv[]) {
+	unsigned int times = 1;
+	unsigned int total_frames = 1;
+	if (1 < argc) {
+		times = strto(argv[1], 0p, 10);
+	}
+	if (2 < argc) {
+		total_frames = strto(argv[2], 0p, 10);
+	}
+	frames = total_frames;
+
+	void raised(int & fixup) {
+		fixup = total_frames + 42;						// use local scope => lexical link
+	}
+	void not_raised(int & fixup) {
+		fixup = total_frames + 42;						// use local scope => lexical link
+	}
+
+	Time start_time = timeHiRes();
+	for (int count = 0 ; count < times ; ++count) {
+		nounwind_fixup(42, raised, not_raised);
+	}
+	Time end_time = timeHiRes();
+	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
+}
Index: doc/theses/andrew_beach_MMath/code/fixup-other-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-other-r.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-other-r.cfa	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,52 @@
+// Resume Across Other Handler
+#include <clock.hfa>
+#include <exception.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>									// strto
+
+exception fixup_exception {
+	int & fixup;
+};
+vtable(fixup_exception) fixup_vt;
+exception not_raised_exception {
+	int & fixup;
+};
+
+unsigned int frames;									// use global because of gcc thunk problem
+
+void nounwind_other(unsigned int dummy) {
+	if (frames) {
+		frames -= 1;
+		try {
+			nounwind_other(42);
+		} catchResume (not_raised_exception * ex) {
+			ex->fixup = frames + 42;					// use local scope => lexical link
+		}
+	} else {
+		int fixup = dummy;
+		throwResume (fixup_exception){&fixup_vt, fixup}; // change bad fixup
+	}
+}
+
+int main(int argc, char * argv[]) {
+	unsigned int times = 1;
+	unsigned int total_frames = 1;
+	if (1 < argc) {
+		times = strto(argv[1], 0p, 10);
+	}
+	if (2 < argc) {
+		total_frames = strto(argv[2], 0p, 10);
+	}
+	frames = total_frames;
+
+	Time start_time = timeHiRes();
+	for (int count = 0 ; count < times ; ++count) {
+		try {
+			nounwind_other(42);
+		} catchResume (fixup_exception * ex) {
+			ex->fixup = total_frames + 42;
+		}
+	}
+	Time end_time = timeHiRes();
+	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
+}
Index: doc/theses/andrew_beach_MMath/code/fixup-other.cpp
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-other.cpp	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-other.cpp	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,49 @@
+// Resume Across Fixup
+#include <chrono>
+#include <cstdlib>
+#include <exception>
+#include <iostream>
+#include <iomanip>
+#include <functional>
+
+using namespace std;
+using namespace chrono;
+
+void nounwind_fixup(unsigned int frames, function<void (int &)> raised_rtn, function<void (int &)> not_raised_rtn ) {
+	auto not_raised = [=](int & fixup) -> void {
+						  fixup = frames + 42;			// use local scope => lexical link
+					  };
+
+	if (frames) {
+		nounwind_fixup(frames - 1, raised_rtn, not_raised);
+	} else {
+		int fixup = 17;
+		raised_rtn(fixup);
+	}
+}
+
+int main(int argc, char * argv[]) {
+	unsigned int times = 1;
+	unsigned int total_frames = 1;
+	if (1 < argc) {
+		times = strtol(argv[1], nullptr, 10);
+	}
+	if (2 < argc) {
+		total_frames = strtol(argv[2], nullptr, 10);
+	}
+
+	auto raised = [=] (int & fixup) -> void {
+					  fixup = total_frames + 42;		// use local scope => lexical link
+				  };
+	auto not_raised = [=] (int & fixup) -> void {
+						  fixup = total_frames + 42;	// use local scope => lexical link
+					  };
+
+	time_point<steady_clock> start_time = steady_clock::now();
+	for (unsigned int count = 0 ; count < times ; ++count) {
+		nounwind_fixup(total_frames, raised, not_raised);
+	}
+	time_point<steady_clock> end_time = steady_clock::now();
+	nanoseconds duration = duration_cast<nanoseconds>(end_time - start_time);
+	cout << "Run-Time (s): " << fixed << setprecision(1) << duration.count() / 1'000'000'000. << endl;
+}
Index: doc/theses/andrew_beach_MMath/code/fixup-other.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-other.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/code/fixup-other.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+
+from time import thread_time_ns
+
+def nounwind_fixup(frames, raised_rtn, not_raised_rtn):
+    not_raised = lambda lfixup : frames + 42		# use local scope => lexical link
+    if 0 < frames:
+        nounwind_fixup(frames - 1, raised_rtn, not_raised)
+    else:
+        fixup = 17;
+        raised_rtn(fixup);
+
+
+def main(argv):
+    times = 1
+    total_frames = 1
+    if 1 < len(argv):
+        times = int(argv[1])
+    if 2 < len(argv):
+        total_frames = int(argv[2])
+
+    raised = lambda lfixup : total_frames + 42		# use local scope => lexical link
+    not_raised = lambda lfixup : total_frames + 42	# use local scope => lexical link
+    start_time = thread_time_ns()
+    for count in range(times):
+        nounwind_fixup(total_frames, raised, not_raised)
+
+    end_time = thread_time_ns()
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
+
+
+if '__main__' == __name__:
+    import sys
+    main(sys.argv)
Index: c/theses/andrew_beach_MMath/code/resume-fixup-empty-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty-f.cfa	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,40 +1,0 @@
-// Resume Across Fixup
-#include <clock.hfa>
-#include <fstream.hfa>
-#include <stdlib.hfa>									// strto
-
-int nounwind_fixup(unsigned int frames, void (*raised_rtn)(int &)) {
-	if (frames) {
-		int rtn = nounwind_fixup(frames - 1, raised_rtn);
-		if ( rtn == 42 ) printf( "42" );				// make non-tail recursive
-		return rtn;
-
-	} else {
-		int fixup = 17;
-		raised_rtn(fixup);
-		return fixup;
-	}
-}
-
-int main(int argc, char * argv[]) {
-	unsigned int times = 1;
-	unsigned int total_frames = 1;
-	if (1 < argc) {
-		times = strto(argv[1], 0p, 10);
-	}
-	if (2 < argc) {
-		total_frames = strto(argv[2], 0p, 10);
-	}
-
-	void raised(int & fixup) {
-		fixup = total_frames + 42;						// use local scope => lexical link
-		if ( total_frames == 42 ) printf( "42" );
-	}
-
-	Time start_time = timeHiRes();
-	for (unsigned int count = 0 ; count < times ; ++count) {
-		nounwind_fixup(total_frames, raised);
-	}
-	Time end_time = timeHiRes();
-	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
-}
Index: c/theses/andrew_beach_MMath/code/resume-fixup-empty-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty-r.cfa	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,44 +1,0 @@
-// Resume Across Empty Function
-#include <clock.hfa>
-#include <exception.hfa>
-#include <fstream.hfa>
-#include <stdlib.hfa>									// strto
-
-exception fixup_exception {
-	int & fixup;
-};
-vtable(fixup_exception) fixup_vt;
-
-int nounwind_empty(unsigned int frames) {
-	if (frames) {
-		int rtn = nounwind_empty(frames - 1);
-		if ( rtn == 42 ) printf( "42" );				// make non-tail recursive
-		return rtn;
-	} else {
-		int fixup = 17;
-		throwResume (fixup_exception){&fixup_vt, fixup}; // change bad fixup
-		return fixup;
-	}
-}
-
-int main(int argc, char * argv[]) {
-	unsigned int times = 1;
-	unsigned int total_frames = 1;
-	if (1 < argc) {
-		times = strto(argv[1], 0p, 10);
-	}
-	if (2 < argc) {
-		total_frames = strto(argv[2], 0p, 10);
-	}
-
-	Time start_time = timeHiRes();
-	for (unsigned int count = 0 ; count < times ; ++count) {
-		try {
-			nounwind_empty(total_frames);
-		} catchResume (fixup_exception * ex) {
-			ex->fixup = total_frames + 42;
-		}
-	}
-	Time end_time = timeHiRes();
-	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
-}
Index: c/theses/andrew_beach_MMath/code/resume-fixup-empty.cpp
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty.cpp	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,41 +1,0 @@
-// Resume Across Fixup
-#include <chrono>
-#include <cstdlib>
-#include <exception>
-#include <iostream>
-#include <iomanip>
-#include <functional>
-
-using namespace std;
-using namespace chrono;
-
-void nounwind_fixup(unsigned int frames, function<void (int &)> raised_rtn ) {
-	if (frames) {
-		nounwind_fixup(frames - 1, raised_rtn);
-	} else {
-		int fixup = 17;
-		raised_rtn(fixup);
-	}
-}
-
-int main(int argc, char * argv[]) {
-	unsigned int times = 1;
-	unsigned int total_frames = 1;
-	if (1 < argc) {
-		times = strtol(argv[1], nullptr, 10);
-	}
-	if (2 < argc) {
-		total_frames = strtol(argv[2], nullptr, 10);
-	}
-
-	auto raised = [=] (int & fixup) -> void {
-					  fixup = total_frames + 42;		// use local scope => lexical link
-				  };
-	time_point<steady_clock> start_time = steady_clock::now();
-	for (unsigned int count = 0 ; count < times ; ++count) {
-		nounwind_fixup(total_frames, raised);
-	}
-	time_point<steady_clock> end_time = steady_clock::now();
-	nanoseconds duration = duration_cast<nanoseconds>(end_time - start_time);
-	cout << "Run-Time (s): " << fixed << setprecision(1) << duration.count() / 1'000'000'000. << endl;
-}
Index: c/theses/andrew_beach_MMath/code/resume-fixup-empty.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#!/usr/bin/env python3
-
-from time import thread_time_ns
-
-def nounwind_fixup(frames, raised_rtn):
-    if 0 < frames:
-        nounwind_fixup(frames - 1, raised_rtn)
-    else:
-        fixup = 17;
-        raised_rtn(fixup);
-
-
-def main(argv):
-    times = 1
-    total_frames = 1
-    if 1 < len(argv):
-        times = int(argv[1])
-    if 2 < len(argv):
-        total_frames = int(argv[2])
-
-    raised = lambda lfixup : total_frames + 42		# use local scope => lexical link
-    start_time = thread_time_ns()
-    for count in range(times):
-        nounwind_fixup(total_frames, raised)
-
-    end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
-
-
-if '__main__' == __name__:
-    import sys
-    main(sys.argv)
Index: c/theses/andrew_beach_MMath/code/resume-fixup-other-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other-f.cfa	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,46 +1,0 @@
-// Resume Across Fixup
-#include <clock.hfa>
-#include <fstream.hfa>
-#include <stdlib.hfa>									// strto
-
-unsigned int frames;									// use global because of gcc thunk problem
-
-void nounwind_fixup(unsigned int dummy, void (*raised_rtn)(int &), void (*not_raised_rtn)(int &)) {
-	void not_raised(int & fixup) {
-		fixup = frames + 42;							// use local scope => lexical link
-	}
-
-	if (frames) {
-		frames -= 1;
-		nounwind_fixup(42, raised_rtn, not_raised);
-	} else {
-		int fixup = dummy;
-		raised_rtn(fixup);
-	}
-}
-
-int main(int argc, char * argv[]) {
-	unsigned int times = 1;
-	unsigned int total_frames = 1;
-	if (1 < argc) {
-		times = strto(argv[1], 0p, 10);
-	}
-	if (2 < argc) {
-		total_frames = strto(argv[2], 0p, 10);
-	}
-	frames = total_frames;
-
-	void raised(int & fixup) {
-		fixup = total_frames + 42;						// use local scope => lexical link
-	}
-	void not_raised(int & fixup) {
-		fixup = total_frames + 42;						// use local scope => lexical link
-	}
-
-	Time start_time = timeHiRes();
-	for (int count = 0 ; count < times ; ++count) {
-		nounwind_fixup(42, raised, not_raised);
-	}
-	Time end_time = timeHiRes();
-	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
-}
Index: c/theses/andrew_beach_MMath/code/resume-fixup-other-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other-r.cfa	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,52 +1,0 @@
-// Resume Across Other Handler
-#include <clock.hfa>
-#include <exception.hfa>
-#include <fstream.hfa>
-#include <stdlib.hfa>									// strto
-
-exception fixup_exception {
-	int & fixup;
-};
-vtable(fixup_exception) fixup_vt;
-exception not_raised_exception {
-	int & fixup;
-};
-
-unsigned int frames;									// use global because of gcc thunk problem
-
-void nounwind_other(unsigned int dummy) {
-	if (frames) {
-		frames -= 1;
-		try {
-			nounwind_other(42);
-		} catchResume (not_raised_exception * ex) {
-			ex->fixup = frames + 42;					// use local scope => lexical link
-		}
-	} else {
-		int fixup = dummy;
-		throwResume (fixup_exception){&fixup_vt, fixup}; // change bad fixup
-	}
-}
-
-int main(int argc, char * argv[]) {
-	unsigned int times = 1;
-	unsigned int total_frames = 1;
-	if (1 < argc) {
-		times = strto(argv[1], 0p, 10);
-	}
-	if (2 < argc) {
-		total_frames = strto(argv[2], 0p, 10);
-	}
-	frames = total_frames;
-
-	Time start_time = timeHiRes();
-	for (int count = 0 ; count < times ; ++count) {
-		try {
-			nounwind_other(42);
-		} catchResume (fixup_exception * ex) {
-			ex->fixup = total_frames + 42;
-		}
-	}
-	Time end_time = timeHiRes();
-	sout | "Run-Time (s): " | wd(0,1, (end_time - start_time)`ns / 1_000_000_000.);
-}
Index: c/theses/andrew_beach_MMath/code/resume-fixup-other.cpp
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other.cpp	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,49 +1,0 @@
-// Resume Across Fixup
-#include <chrono>
-#include <cstdlib>
-#include <exception>
-#include <iostream>
-#include <iomanip>
-#include <functional>
-
-using namespace std;
-using namespace chrono;
-
-void nounwind_fixup(unsigned int frames, function<void (int &)> raised_rtn, function<void (int &)> not_raised_rtn ) {
-	auto not_raised = [=](int & fixup) -> void {
-						  fixup = frames + 42;			// use local scope => lexical link
-					  };
-
-	if (frames) {
-		nounwind_fixup(frames - 1, raised_rtn, not_raised);
-	} else {
-		int fixup = 17;
-		raised_rtn(fixup);
-	}
-}
-
-int main(int argc, char * argv[]) {
-	unsigned int times = 1;
-	unsigned int total_frames = 1;
-	if (1 < argc) {
-		times = strtol(argv[1], nullptr, 10);
-	}
-	if (2 < argc) {
-		total_frames = strtol(argv[2], nullptr, 10);
-	}
-
-	auto raised = [=] (int & fixup) -> void {
-					  fixup = total_frames + 42;		// use local scope => lexical link
-				  };
-	auto not_raised = [=] (int & fixup) -> void {
-						  fixup = total_frames + 42;	// use local scope => lexical link
-					  };
-
-	time_point<steady_clock> start_time = steady_clock::now();
-	for (unsigned int count = 0 ; count < times ; ++count) {
-		nounwind_fixup(total_frames, raised, not_raised);
-	}
-	time_point<steady_clock> end_time = steady_clock::now();
-	nanoseconds duration = duration_cast<nanoseconds>(end_time - start_time);
-	cout << "Run-Time (s): " << fixed << setprecision(1) << duration.count() / 1'000'000'000. << endl;
-}
Index: c/theses/andrew_beach_MMath/code/resume-fixup-other.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,34 +1,0 @@
-#!/usr/bin/env python3
-
-from time import thread_time_ns
-
-def nounwind_fixup(frames, raised_rtn, not_raised_rtn):
-    not_raised = lambda lfixup : frames + 42		# use local scope => lexical link
-    if 0 < frames:
-        nounwind_fixup(frames - 1, raised_rtn, not_raised)
-    else:
-        fixup = 17;
-        raised_rtn(fixup);
-
-
-def main(argv):
-    times = 1
-    total_frames = 1
-    if 1 < len(argv):
-        times = int(argv[1])
-    if 2 < len(argv):
-        total_frames = int(argv[2])
-
-    raised = lambda lfixup : total_frames + 42		# use local scope => lexical link
-    not_raised = lambda lfixup : total_frames + 42	# use local scope => lexical link
-    start_time = thread_time_ns()
-    for count in range(times):
-        nounwind_fixup(total_frames, raised, not_raised)
-
-    end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
-
-
-if '__main__' == __name__:
-    import sys
-    main(sys.argv)
Index: doc/theses/andrew_beach_MMath/code/run.sh
===================================================================
--- doc/theses/andrew_beach_MMath/code/run.sh	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/run.sh	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-readonly ALL_TESTS=(raise-{empty,detor,finally,other} try-{catch,finally} cond-match-{all,none} \
-		    raise-{fixup-empty,fixup-other})
+readonly ALL_TESTS=(raise-{empty,detor,finally,other} try-{catch,finally} \
+			cond-match-{all,none} fixup-{empty,other})
 
 gen-file-name() (
@@ -18,5 +18,4 @@
 )
 
-#readonly N=${1:-5}
 readonly N=${1:-1}
 readonly OUT_FILE=$(gen-file-name ${2:-run-%-$N})
Index: doc/theses/andrew_beach_MMath/code/test.sh
===================================================================
--- doc/theses/andrew_beach_MMath/code/test.sh	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/test.sh	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -13,8 +13,10 @@
 #   View the result from TEST in LANGUAGE stored in FILE.
 
-readonly ITERS_1M=1000000 # 1 000 000, one million
-readonly ITERS_10M=10000000 # 10 000 000, ten million
-readonly ITERS_100M=100000000 # 100 000 000, hundred million
-readonly ITERS_1000M=1000000000 # 1 000 000 000, billion
+readonly MIL=000000
+# Various preset values used as arguments.
+readonly ITERS_1M=1$MIL
+readonly ITERS_10M=10$MIL
+readonly ITERS_100M=100$MIL
+readonly ITERS_1000M=1000$MIL
 readonly STACK_HEIGHT=100
 
@@ -30,6 +32,10 @@
 	case "$1" in
 	*.cfa)
-		# Requires a symbolic link.
-		mmake "${1%.cfa}" "$1" cfa -DNDEBUG -nodebug -O3 "$1" -o "${1%.cfa}"
+		# A symbolic link/local copy can be used as an override.
+		cmd=./cfa
+		if [ ! -x $cmd ]; then
+			cmd=cfa
+		fi
+		mmake "${1%.cfa}" "$1" $cmd -DNDEBUG -nodebug -O3 "$1" -o "${1%.cfa}"
 		;;
 	*.cpp)
@@ -83,5 +89,5 @@
 raise-empty)
 	CFAT="./throw-empty $ITERS_1M $STACK_HEIGHT"
-# see resume-fixup-empty-r	CFAR="./resume-empty $ITERS_1M $STACK_HEIGHT"
+	CFAR="./resume-empty $ITERS_1M $STACK_HEIGHT"
 	CPP="./throw-empty-cpp $ITERS_1M $STACK_HEIGHT"
 	JAVA="java ThrowEmpty $ITERS_1M $STACK_HEIGHT"
@@ -90,5 +96,5 @@
 raise-detor)
 	CFAT="./throw-detor $ITERS_1M $STACK_HEIGHT"
-# N/A	CFAR="./resume-detor $ITERS_1M $STACK_HEIGHT"
+	CFAR="./resume-detor $ITERS_1M $STACK_HEIGHT"
 	CPP="./throw-detor-cpp $ITERS_1M $STACK_HEIGHT"
 	JAVA=unsupported
@@ -97,5 +103,5 @@
 raise-finally)
 	CFAT="./throw-finally $ITERS_1M $STACK_HEIGHT"
-# N/A	CFAR="./resume-finally $ITERS_1M $STACK_HEIGHT"
+	CFAR="./resume-finally $ITERS_1M $STACK_HEIGHT"
 	CPP=unsupported
 	JAVA="java ThrowFinally $ITERS_1M $STACK_HEIGHT"
@@ -104,5 +110,5 @@
 raise-other)
 	CFAT="./throw-other $ITERS_1M $STACK_HEIGHT"
-# N/A	CFAR="./resume-other $ITERS_1M $STACK_HEIGHT"
+	CFAR="./resume-other $ITERS_1M $STACK_HEIGHT"
 	CPP="./throw-other-cpp $ITERS_1M $STACK_HEIGHT"
 	JAVA="java ThrowOther $ITERS_1M $STACK_HEIGHT"
@@ -137,17 +143,17 @@
 	PYTHON="./cond-catch.py $ITERS_10M 0"
 	;;
-raise-fixup-empty)
-	CFAT="./resume-fixup-empty-f $ITERS_10M $STACK_HEIGHT"
-	CFAR="./resume-fixup-empty-r $ITERS_10M $STACK_HEIGHT"
-	CPP="./resume-fixup-empty-cpp $ITERS_10M $STACK_HEIGHT"
-	JAVA="java ResumeFixupEmpty $ITERS_10M $STACK_HEIGHT"
-	PYTHON="./resume-fixup-empty.py $ITERS_10M $STACK_HEIGHT"
+fixup-empty)
+	CFAT="./fixup-empty-f $ITERS_10M $STACK_HEIGHT"
+	CFAR="./fixup-empty-r $ITERS_10M $STACK_HEIGHT"
+	CPP="./fixup-empty-cpp $ITERS_10M $STACK_HEIGHT"
+	JAVA="java FixupEmpty $ITERS_10M $STACK_HEIGHT"
+	PYTHON="./fixup-empty.py $ITERS_10M $STACK_HEIGHT"
 	;;
-raise-fixup-other)
-	CFAT="./resume-fixup-other-f $ITERS_10M $STACK_HEIGHT"
-	CFAR="./resume-fixup-other-r $ITERS_10M $STACK_HEIGHT"
-	CPP="./resume-fixup-other-cpp $ITERS_10M $STACK_HEIGHT"
-	JAVA="java ResumeFixupOther $ITERS_10M $STACK_HEIGHT"
-	PYTHON="./resume-fixup-other.py $ITERS_10M $STACK_HEIGHT"
+fixup-other)
+	CFAT="./fixup-other-f $ITERS_10M $STACK_HEIGHT"
+	CFAR="./fixup-other-r $ITERS_10M $STACK_HEIGHT"
+	CPP="./fixup-other-cpp $ITERS_10M $STACK_HEIGHT"
+	JAVA="java FixupOther $ITERS_10M $STACK_HEIGHT"
+	PYTHON="./fixup-other.py $ITERS_10M $STACK_HEIGHT"
 	;;
 *)
Index: doc/theses/andrew_beach_MMath/code/throw-empty.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/throw-empty.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/throw-empty.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -33,5 +33,5 @@
 
     end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
 
 
Index: doc/theses/andrew_beach_MMath/code/throw-finally.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/throw-finally.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/throw-finally.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -36,5 +36,5 @@
 
     end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
 
 
Index: doc/theses/andrew_beach_MMath/code/throw-other.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/throw-other.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/throw-other.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -40,5 +40,5 @@
 
     end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
 
 
Index: doc/theses/andrew_beach_MMath/code/throw-with.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/throw-with.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/throw-with.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -43,5 +43,5 @@
 
     end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
 
 
Index: doc/theses/andrew_beach_MMath/code/try-catch.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/try-catch.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/try-catch.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -23,5 +23,5 @@
 
     end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
 
 
Index: doc/theses/andrew_beach_MMath/code/try-finally.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/try-finally.py	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/code/try-finally.py	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -22,5 +22,5 @@
 
     end_time = thread_time_ns()
-    print('Run-Time (s) {:.1f}:'.format((end_time - start_time) / 1_000_000_000.))
+    print('Run-Time (s): {:.1f}'.format((end_time - start_time) / 1_000_000_000.))
 
 
Index: doc/theses/andrew_beach_MMath/features.tex
===================================================================
--- doc/theses/andrew_beach_MMath/features.tex	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/features.tex	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -162,4 +162,7 @@
 type a child of that type and part of the same tree. The parent may itself
 be a child or a root type and may have any number of existing children.
+
+% OK, for some reason the b and t positioning options are reversed here.
+\begin{minipage}[b]{0.6\textwidth}
 \begin{cfa}
 trait child_a(T) virtual(root_type) {}
@@ -167,5 +170,10 @@
 trait child_b(T) virtual(root_type) {}
 \end{cfa}
-\todo{Update the diagram in vtable.fig to show the new type tree.}
+\end{minipage}
+\begin{minipage}{0.4\textwidth}
+\begin{center}
+\input{virtual-tree}
+\end{center}
+\end{minipage}
 
 Every virtual type also has a list of virtual members and a unique id,
@@ -499,5 +507,5 @@
 throwResume EXPRESSION;
 \end{cfa}
-\todo{Decide on a final set of keywords and use them everywhere.}
+% The new keywords are currently ``experimental" and not used in this work.
 It works much the same way as the termination raise, except the
 type must satisfy the \snake{is_resumption_exception} that uses the
@@ -544,6 +552,6 @@
 and run, its try block (the guarded statements) and every try statement
 searched before it are still on the stack. There presence can lead to
-the recursive resumption problem.
-\todo{Is there a citation for the recursive resumption problem?}
+the recursive resumption problem.\cite{Buhr00a}
+% Other possible citation is MacLaren77, but the form is different.
 
 The recursive resumption problem is any situation where a resumption handler
Index: doc/theses/andrew_beach_MMath/future.tex
===================================================================
--- doc/theses/andrew_beach_MMath/future.tex	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/future.tex	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -21,4 +21,8 @@
 capability, programmers will want to use it. Once fixed, this capability should
 result in little or no change in the exception system but simplify usage.
+\item
+The @copy@ function in the exception virtual table is an adapter to address
+some limitations in the \CFA copy constructor. If the copy constructor is
+improved it can be used directly without the adapter.
 \item
 Termination handlers cannot use local control-flow transfers, \eg by @break@,
@@ -57,4 +61,8 @@
 type is a child of another. This check precisely captures many of the
 current ad-hoc correctness requirements.
+
+Other features of the virtual system could also remove some of the
+special cases around exception virtual tables, such as the generation
+of the @msg@ function, could be removed.
 
 The full virtual system might also include other improvement like associated
Index: doc/theses/andrew_beach_MMath/implement.tex
===================================================================
--- doc/theses/andrew_beach_MMath/implement.tex	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/implement.tex	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -99,5 +99,5 @@
 
 Type information is constructed as follows:
-\begin{enumerate}
+\begin{enumerate}[nosep]
 \item
 Use the type's name to generate a name for the type information structure,
@@ -123,5 +123,4 @@
 including different instances of the same polymorphic type.
 \end{enumerate}
-\todo{The list is making me realize, some of this isn't ordered.}
 
 Writing that code manually, with helper macros for the early name mangling,
@@ -176,6 +175,5 @@
 below.
 
-The layout always comes in three parts.
-\todo{Add labels to the virtual table layout figure.}
+The layout always comes in three parts (see \autoref{f:VirtualTableLayout}).
 The first section is just the type id at the head of the table. It is always
 there to ensure that it can be found even when the accessing code does not
@@ -190,8 +188,9 @@
 
 \begin{figure}
+\begin{center}
 \input{vtable-layout}
+\end{center}
 \caption{Virtual Table Layout}
 \label{f:VirtualTableLayout}
-\todo*{Improve the Virtual Table Layout diagram.}
 \end{figure}
 
@@ -674,5 +673,5 @@
 \newsavebox{\stackBox}
 \begin{lrbox}{\codeBox}
-\begin{lstlisting}[language=CFA,{moredelim=**[is][\color{red}]{@}{@}}]
+\begin{cfa}
 unsigned num_exceptions = 0;
 void throws() {
@@ -693,17 +692,17 @@
     throws();
 }
-\end{lstlisting}
+\end{cfa}
 \end{lrbox}
 
 \begin{lrbox}{\stackBox}
 \begin{lstlisting}
-| try-finally
-| try-catch (Example)
+| finally block (Example)
+| try block
 throws()
-| try-finally
-| try-catch (Example)
+| finally block (Example)
+| try block
 throws()
-| try-finally
-| try-catch (Example)
+| finally block (Example)
+| try block
 throws()
 main()
@@ -718,5 +717,4 @@
 \label{f:MultipleExceptions}
 \end{figure}
-\todo*{Work on multiple exceptions code sample.}
 
 All exceptions are stored in nodes, which are then linked together in lists
@@ -797,5 +795,4 @@
 \autoref{f:TerminationTransformation} shows the pattern used to transform
 a \CFA try statement with catch clauses into the appropriate C functions.
-\todo{Explain the Termination Transformation figure.}
 
 \begin{figure}
@@ -855,5 +852,4 @@
 \caption{Termination Transformation}
 \label{f:TerminationTransformation}
-\todo*{Improve (compress?) Termination Transformations.}
 \end{figure}
 
@@ -894,6 +890,6 @@
 
 \autoref{f:ResumptionTransformation} shows the pattern used to transform
-a \CFA try statement with catch clauses into the appropriate C functions.
-\todo{Explain the Resumption Transformation figure.}
+a \CFA try statement with catchResume clauses into the appropriate
+C functions.
 
 \begin{figure}
@@ -936,5 +932,4 @@
 \caption{Resumption Transformation}
 \label{f:ResumptionTransformation}
-\todo*{Improve (compress?) Resumption Transformations.}
 \end{figure}
 
@@ -964,5 +959,4 @@
 \caption{Resumption Marking}
 \label{f:ResumptionMarking}
-\todo*{Label Resumption Marking to aid clarity.}
 \end{figure}
 
Index: doc/theses/andrew_beach_MMath/performance.tex
===================================================================
--- doc/theses/andrew_beach_MMath/performance.tex	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/performance.tex	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -74,10 +74,9 @@
 three results are discarded and the remaining five values are averaged.
 The test are run with the latest (still pre-release) \CFA compiler,
-using gcc-10 as a backend.
-g++-10 is used for \Cpp.
+using gcc-10 10.3.0 as a backend.
+g++-10 10.3.0 is used for \Cpp.
 Java tests are complied and run with version 11.0.11.
-Python used version 3.8.
+Python used version 3.8.10.
 The machines used to run the tests are:
-\todo{Get patch versions for python, gcc and g++.}
 \begin{itemize}[nosep]
 \item ARM 2280 Kunpeng 920 48-core 2$\times$socket
@@ -312,5 +311,5 @@
 For example, there are a few cases where Python out-performs
 \CFA, \Cpp and Java.
-\todo{Make sure there are still cases where Python wins.}
+% To be exact, the Match All and Match None cases.
 The most likely explanation is that, since exceptions
 are rarely considered to be the common case, the more optimized languages
@@ -351,5 +350,4 @@
 finally clauses seem to avoid the spike that run-time destructors have.
 Possibly some optimization removes the cost of changing contexts.
-\todo{OK, I think the finally clause may have been optimized out.}
 
 \item[Other Traversal]
@@ -362,5 +360,4 @@
 but they could avoid the spike by not having the same kind of overhead for
 switching to the check's context.
-\todo{Could revisit Other Traversal, after Finally Traversal.}
 
 \item[Cross Handler]
Index: doc/theses/andrew_beach_MMath/resumption-marking.fig
===================================================================
--- doc/theses/andrew_beach_MMath/resumption-marking.fig	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/resumption-marking.fig	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -32,16 +32,4 @@
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	 2205 1620 1845 1620
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 3735 2340 3375 2340
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 5445 945 5085 945
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 7065 1620 6705 1620
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
 	 1665 1755 1665 2205
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
@@ -60,12 +48,40 @@
 	1 1 1.00 60.00 120.00
 	 6525 2475 6525 2925
-4 1 0 50 -1 0 12 0.0000 0 135 945 1665 3375 Initial State\001
-4 1 0 50 -1 0 12 0.0000 0 135 1215 3195 3375 Found Handler\001
-4 1 0 50 -1 0 12 0.0000 0 180 1605 6570 3375 Handling Complete\001
-4 0 0 50 -1 0 12 0.0000 0 135 390 3825 2385 head\001
-4 0 0 50 -1 0 12 0.0000 0 135 390 5535 990 head\001
-4 0 0 50 -1 0 12 0.0000 0 135 390 7155 1665 head\001
-4 2 0 50 -1 0 12 0.0000 0 135 690 1485 2385 handlers\001
-4 1 0 50 -1 0 12 0.0000 0 135 855 4905 3375 Handler in\001
-4 1 0 50 -1 0 12 0.0000 0 180 795 4905 3600 Try block\001
-4 0 0 50 -1 0 12 0.0000 0 135 390 2295 1665 head\001
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1260 1620 1485 1620
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1980 1440 1755 1440
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2790 2340 3015 2340
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3600 1620 3375 1620
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4500 945 4725 945
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 5265 765 5040 765
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6120 1620 6345 1620
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6840 1440 6615 1440
+4 1 0 50 -1 0 12 0.0000 0 135 1170 1665 3375 Initial State\001
+4 1 0 50 -1 0 12 0.0000 0 135 1170 3195 3375 Found Handler\001
+4 1 0 50 -1 0 12 0.0000 0 165 1530 6570 3375 Handling Complete\001
+4 2 0 50 -1 0 12 0.0000 0 135 720 1485 2385 handlers\001
+4 1 0 50 -1 0 12 0.0000 0 135 900 4905 3375 Handler in\001
+4 1 0 50 -1 0 12 0.0000 0 165 810 4905 3600 Try block\001
+4 0 0 50 -1 0 12 0.0000 0 135 360 855 1665 head\001
+4 0 0 50 -1 0 12 0.0000 4 120 810 2025 1485 execution\001
+4 0 0 50 -1 0 12 0.0000 0 135 360 2385 2385 head\001
+4 0 0 50 -1 0 12 0.0000 4 120 810 3645 1665 execution\001
+4 0 0 50 -1 0 12 0.0000 0 135 360 4095 990 head\001
+4 0 0 50 -1 0 12 0.0000 4 120 810 5310 810 execution\001
+4 0 0 50 -1 0 12 0.0000 0 135 360 5715 1665 head\001
+4 0 0 50 -1 0 12 0.0000 4 120 810 6885 1485 execution\001
Index: doc/theses/andrew_beach_MMath/uw-ethesis-frontpgs.tex
===================================================================
--- doc/theses/andrew_beach_MMath/uw-ethesis-frontpgs.tex	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/uw-ethesis-frontpgs.tex	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -129,5 +129,21 @@
 \begin{center}\textbf{Abstract}\end{center}
 
-This is the abstract.
+The \CFA (Cforall) programming language is an evolutionary refinement of
+the C programming language, adding modern programming features without
+changing the programming paradigms of C.
+One of these modern programming features is more powerful error handling
+through the addition of an exception handling mechanism (EHM).
+
+This thesis covers the design and implementation of the \CFA EHM,
+along with a review of the other required \CFA features.
+The EHM includes common features of termination exception handling and
+similar support for resumption exception handling.
+The design of both has been adapted to utilize other tools \CFA provides,
+as well as fit with the assertion based interfaces of the language.
+
+The EHM has been implemented into the \CFA compiler and run-time environment.
+Although it has not yet been optimized, performance testing has shown it has
+comparable performance to other EHM's,
+which is sufficient for use in current \CFA programs.
 
 \cleardoublepage
@@ -138,5 +154,7 @@
 \begin{center}\textbf{Acknowledgements}\end{center}
 
-I would like to thank all the little people who made this thesis possible.
+I would like to thank all the people who made this thesis possible.
+(I'm waiting until who is involved is finalized.)
+
 \cleardoublepage
 
Index: doc/theses/andrew_beach_MMath/virtual-tree.fig
===================================================================
--- doc/theses/andrew_beach_MMath/virtual-tree.fig	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
+++ doc/theses/andrew_beach_MMath/virtual-tree.fig	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -0,0 +1,23 @@
+#FIG 3.2  Produced by xfig version 3.2.7b
+Landscape
+Center
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 90.00
+	 2070 1395 2520 1665
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 90.00
+	 2070 1395 1530 1665
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 90.00
+	 1530 1845 1530 2160
+4 0 0 50 -1 0 12 0.0000 4 165 900 1035 2295 grandchild\001
+4 1 0 50 -1 5 12 0.0000 2 150 720 1485 1800 child\\_a\001
+4 1 0 50 -1 5 12 0.0000 2 150 720 2520 1800 child\\_b\001
+4 1 0 50 -1 5 12 0.0000 2 165 900 2070 1350 root\\_type\001
+4 1 0 50 -1 0 12 0.0000 2 165 1530 2115 1080 Virtual Type Tree\001
Index: doc/theses/andrew_beach_MMath/vtable-layout.fig
===================================================================
--- doc/theses/andrew_beach_MMath/vtable-layout.fig	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ doc/theses/andrew_beach_MMath/vtable-layout.fig	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -8,6 +8,4 @@
 -2
 1200 2
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 1
-	 1620 1665
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
 	 3510 1890 3645 1755
@@ -16,4 +14,10 @@
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
 	 3645 1305 3645 1755
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2115 1935 2250 1935
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
+	 2250 1170 2115 1170 2115 2475 2250 2475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2250 1350 2115 1350
 4 0 0 50 -1 0 12 0.0000 4 165 630 2295 1305 type_id\001
 4 0 0 50 -1 0 12 0.0000 4 165 1170 2295 1500 parent_field0\001
Index: c/theses/andrew_beach_MMath/vtable.fig
===================================================================
--- doc/theses/andrew_beach_MMath/vtable.fig	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#FIG 3.2  Produced by xfig version 3.2.7b
-Landscape
-Center
-Metric
-A4
-100.00
-Single
--2
-1200 2
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 45.00 90.00
-	 1260 1350 1485 1665
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 45.00 90.00
-	 1260 1350 1035 1665
-2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
-	1 1 1.00 45.00 90.00
-	 1263 1346 1578 1571
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 45.00 90.00
-	 2520 1350 2520 1665
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 45.00 90.00
-	 2520 1800 2520 2115
-2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
-	1 1 1.00 45.00 90.00
-	 2520 1350 2835 1575
-2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
-	1 1 1.00 45.00 90.00
-	 2517 1804 2832 2029
-4 1 0 50 -1 5 12 0.0000 2 120 240 1035 1800 V1\001
-4 1 0 50 -1 5 12 0.0000 2 120 240 1485 1800 V2\001
-4 1 0 50 -1 5 12 0.0000 2 120 240 1260 1350 V0\001
-4 0 0 50 -1 0 12 0.0000 2 135 420 1620 1665 vtable\001
-4 1 0 50 -1 5 12 0.0000 2 120 240 2520 1350 W0\001
-4 1 0 50 -1 5 12 0.0000 2 120 240 2520 2250 W2\001
-4 1 0 50 -1 5 12 0.0000 2 120 240 2520 1800 W1\001
-4 0 0 50 -1 0 12 0.0000 2 135 420 2880 1620 vtable\001
-4 0 0 50 -1 0 12 0.0000 2 135 420 2880 2070 vtable\001
-4 1 0 50 -1 0 12 0.0000 2 180 1365 1935 1080 virtual type trees\001
-4 0 0 50 -1 5 12 0.0000 2 150 735 3060 1755 Id; <,+\001
-4 0 0 50 -1 5 12 0.0000 2 150 1155 3060 2250 Id; <,+,w,-\001
Index: libcfa/src/Makefile.am
===================================================================
--- libcfa/src/Makefile.am	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ libcfa/src/Makefile.am	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -48,4 +48,5 @@
 	math.hfa \
 	time_t.hfa \
+	bits/algorithm.hfa \
 	bits/align.hfa \
 	bits/containers.hfa \
@@ -59,5 +60,4 @@
 	containers/array.hfa \
 	concurrency/iofwd.hfa \
-	concurrency/mutex_stmt.hfa \
 	containers/list.hfa \
 	containers/queueLockFree.hfa \
@@ -92,5 +92,4 @@
 libsrc = ${inst_headers_src} ${inst_headers_src:.hfa=.cfa} \
 	assert.cfa \
-	bits/algorithm.hfa \
 	bits/debug.cfa \
 	exception.c \
@@ -108,5 +107,6 @@
 	concurrency/invoke.h \
 	concurrency/future.hfa \
-	concurrency/kernel/fwd.hfa
+	concurrency/kernel/fwd.hfa \
+	concurrency/mutex_stmt.hfa
 
 inst_thread_headers_src = \
Index: tests/Makefile.am
===================================================================
--- tests/Makefile.am	(revision 24ebddac8cb6c9f0c7eace68ce40fcee372b75b6)
+++ tests/Makefile.am	(revision 761e1466b11259e0ef62b75565b01d89df973f29)
@@ -82,5 +82,6 @@
 	concurrent/clib_tls.c \
 	exceptions/with-threads.hfa \
-	exceptions/except-io.hfa
+	exceptions/except-io.hfa \
+	unified_locking/mutex_test.hfa
 
 dist-hook:
