Index: doc/theses/andrew_beach_MMath/code/FixupEmpty.java
===================================================================
--- doc/theses/andrew_beach_MMath/code/FixupEmpty.java	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/FixupEmpty.java	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/FixupOther.java	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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: doc/theses/andrew_beach_MMath/code/ResumeFixupEmpty.java
===================================================================
--- doc/theses/andrew_beach_MMath/code/ResumeFixupEmpty.java	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/ResumeFixupOther.java
===================================================================
--- doc/theses/andrew_beach_MMath/code/ResumeFixupOther.java	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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/fixup-empty-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty-r.cfa	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty.cpp	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty.py	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-other-r.cfa	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-other.cpp	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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 678f259e022d6bf210462dbdfedd2efab0b1a302)
+++ doc/theses/andrew_beach_MMath/code/fixup-other.py	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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: doc/theses/andrew_beach_MMath/code/resume-fixup-empty-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty-f.cfa	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/resume-fixup-empty-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty-r.cfa	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/resume-fixup-empty.cpp
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty.cpp	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/resume-fixup-empty.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-empty.py	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/resume-fixup-other-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other-f.cfa	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/resume-fixup-other-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other-r.cfa	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/resume-fixup-other.cpp
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other.cpp	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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: doc/theses/andrew_beach_MMath/code/resume-fixup-other.py
===================================================================
--- doc/theses/andrew_beach_MMath/code/resume-fixup-other.py	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ 	(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/test.sh
===================================================================
--- doc/theses/andrew_beach_MMath/code/test.sh	(revision a916aadbb1d545b0967973dc3fcdff28e7f0e14c)
+++ doc/theses/andrew_beach_MMath/code/test.sh	(revision 678f259e022d6bf210462dbdfedd2efab0b1a302)
@@ -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"
 	;;
 *)
