Index: doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa	(revision 49b3389e6e21dcaa864c8562aed949bc43f23925)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty-f.cfa	(revision 812ba3de51e3d02fbce656b13d48602cf828adf1)
@@ -2,10 +2,11 @@
 #include <clock.hfa>
 #include <fstream.hfa>
-#include <stdlib.hfa>									// strto
+#include <stdlib.hfa>
 
 void nounwind_fixup(unsigned int frames, void (*raised_rtn)(int &)) {
 	if (frames) {
 		nounwind_fixup(frames - 1, raised_rtn);
-		if ( frames == -1 ) printf( "42" );				// prevent recursion optimizations
+		// "Always" false, but prevents recursion elimination.
+		if (-1 == frames) printf("~");
 	} else {
 		int fixup = 17;
@@ -24,7 +25,8 @@
 	}
 
+	// Closures at the top level are allowed to be true closures.
 	void raised(int & fixup) {
-		fixup = total_frames + 42;						// use local scope => lexical link
-		if ( total_frames == 42 ) printf( "42" );
+		fixup = total_frames + 42;
+		if (total_frames == 42) printf("42");
 	}
 
Index: doc/theses/andrew_beach_MMath/code/fixup-empty-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-empty-r.cfa	(revision 49b3389e6e21dcaa864c8562aed949bc43f23925)
+++ doc/theses/andrew_beach_MMath/code/fixup-empty-r.cfa	(revision 812ba3de51e3d02fbce656b13d48602cf828adf1)
@@ -3,5 +3,5 @@
 #include <exception.hfa>
 #include <fstream.hfa>
-#include <stdlib.hfa>									// strto
+#include <stdlib.hfa>
 
 exception fixup_exception {
@@ -13,8 +13,9 @@
 	if (frames) {
 		nounwind_empty(frames - 1);
-		if ( frames == -1 ) printf( "42" );				// prevent recursion optimizations
+		// "Always" false, but prevents recursion elimination.
+		if (-1 == frames) printf("~");
 	} else {
 		int fixup = 17;
-		throwResume (fixup_exception){&fixup_vt, fixup}; // change bad fixup
+		throwResume (fixup_exception){&fixup_vt, fixup};
 	}
 }
Index: doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa	(revision 49b3389e6e21dcaa864c8562aed949bc43f23925)
+++ doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa	(revision 812ba3de51e3d02fbce656b13d48602cf828adf1)
@@ -2,11 +2,12 @@
 #include <clock.hfa>
 #include <fstream.hfa>
-#include <stdlib.hfa>									// strto
+#include <stdlib.hfa>
 
-unsigned int frames;									// use global because of gcc thunk problem
+// Using a global value to allow hoisting (and avoid thunks).
+unsigned int frames;
 
 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
+		fixup = frames + 42;
 	}
 
@@ -14,5 +15,6 @@
 		frames -= 1;
 		nounwind_fixup(42, raised_rtn, not_raised);
-		if ( frames == -1 ) printf( "42" );				// prevent recursion optimizations
+		// Always false, but prevents recursion elimination.
+		if (-1 == frames) printf("~");
 	} else {
 		int fixup = dummy;
@@ -32,9 +34,10 @@
 	frames = total_frames;
 
+	// Closures at the top level are allowed to be true closures.
 	void raised(int & fixup) {
-		fixup = total_frames + 42;						// use local scope => lexical link
+		fixup = total_frames + 42;
 	}
 	void not_raised(int & fixup) {
-		fixup = total_frames + 42;						// use local scope => lexical link
+		fixup = total_frames + 42;
 	}
 
Index: doc/theses/andrew_beach_MMath/code/fixup-other-r.cfa
===================================================================
--- doc/theses/andrew_beach_MMath/code/fixup-other-r.cfa	(revision 49b3389e6e21dcaa864c8562aed949bc43f23925)
+++ doc/theses/andrew_beach_MMath/code/fixup-other-r.cfa	(revision 812ba3de51e3d02fbce656b13d48602cf828adf1)
@@ -3,5 +3,5 @@
 #include <exception.hfa>
 #include <fstream.hfa>
-#include <stdlib.hfa>									// strto
+#include <stdlib.hfa>
 
 exception fixup_exception {
@@ -13,5 +13,6 @@
 };
 
-unsigned int frames;									// use global because of gcc thunk problem
+// Using a global value to allow hoisting (and avoid thunks).
+unsigned int frames;
 
 void nounwind_other(unsigned int dummy) {
@@ -20,11 +21,12 @@
 		try {
 			nounwind_other(42);
-			if ( frames == -1 ) printf( "42" );			// prevent recursion optimizations
+			// Always false, but prevents recursion elimination.
+			if (-1 == frames) printf("~");
 		} catchResume (not_raised_exception * ex) {
-			ex->fixup = frames + 42;					// use local scope => lexical link
+			ex->fixup = frames + 42;
 		}
 	} else {
 		int fixup = dummy;
-		throwResume (fixup_exception){&fixup_vt, fixup}; // change bad fixup
+		throwResume (fixup_exception){&fixup_vt, fixup};
 	}
 }
Index: doc/theses/andrew_beach_MMath/code/test.sh
===================================================================
--- doc/theses/andrew_beach_MMath/code/test.sh	(revision 49b3389e6e21dcaa864c8562aed949bc43f23925)
+++ doc/theses/andrew_beach_MMath/code/test.sh	(revision 812ba3de51e3d02fbce656b13d48602cf828adf1)
@@ -12,4 +12,7 @@
 # test.sh -v LANGUAGE TEST FILE
 #   View the result from TEST in LANGUAGE stored in FILE.
+
+readonly DIR=$(dirname "$(readlink -f "$0")")
+cd $DIR
 
 readonly MIL=000000
