Index: tests/exceptions/.expect/except-0.txt
===================================================================
--- tests/exceptions/.expect/except-0.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
+++ tests/exceptions/.expect/except-0.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
@@ -0,0 +1,51 @@
+Exiting: terminate function
+Exiting: bar function
+foo caught exception zen.
+Exiting: foo function
+
+alpha caught exception zen
+resume returned
+Exiting: resume function
+Exiting: beta function
+Exiting: alpha function
+
+walk out of farewell
+See you next time
+leaving farewell
+
+jump out of farewell
+See you next time
+leaving farewell
+
+Exiting: resume function
+fallback caught termination zen
+
+Exiting: terminate function
+Exiting: terminate function
+Exiting: terminate_swap
+terminate_swapped caught exception yang
+Exiting: terminate_swapped
+
+resume_swapped caught exception yang
+resume returned
+Exiting: resume function
+resume returned
+Exiting: resume function
+Exiting: resume_swap
+
+Exiting: terminate function
+reterminate zen caught and will rethrow exception zen
+reterminate 1 caught exception zen
+
+reresume zen caught and rethrows exception zen
+reresume 1 caught exception zen
+resume returned
+Exiting: resume function
+
+Exiting: terminate function
+fy caught exception zen
+fee caught exception zen
+resume returned
+Exiting: resume function
+
+Exiting: main function
Index: tests/exceptions/.expect/except-1.txt
===================================================================
--- tests/exceptions/.expect/except-1.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
+++ tests/exceptions/.expect/except-1.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
@@ -0,0 +1,13 @@
+First Caught
+Both Caught
+Part A Complete
+First Catch and rethrow
+Second Catch
+Part B Complete
+Throw before cleanup
+Catch after cleanup
+Part C Complete
+Caught initial throw.
+Caught intermediate throw.
+Caught final throw.
+Part D Complete
Index: tests/exceptions/.expect/except-2.txt
===================================================================
--- tests/exceptions/.expect/except-2.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
+++ tests/exceptions/.expect/except-2.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
@@ -0,0 +1,3 @@
+throw yin caught.
+throwResume yang caught <> throwResume returned.
+Should be printed.
Index: tests/exceptions/.expect/except-3.txt
===================================================================
--- tests/exceptions/.expect/except-3.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
+++ tests/exceptions/.expect/except-3.txt	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
@@ -0,0 +1,1 @@
+throw [] unwind <> catch
Index: tests/exceptions/except-0.cfa
===================================================================
--- tests/exceptions/except-0.cfa	(revision 921cd8222a6cdad5b6b7ba84b755a001b52169ba)
+++ tests/exceptions/except-0.cfa	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
@@ -19,10 +19,10 @@
 };
 
-void ?{}(signal_exit * this, const char * area) {
-	this->area = area;
-}
-
-void ^?{}(signal_exit * this) {
-	printf("Exiting: %s\n", this->area);
+void ?{}(signal_exit & this, const char * area) {
+	this.area = area;
+}
+
+void ^?{}(signal_exit & this) {
+	printf("Exiting: %s\n", this.area);
 //	sout | "Exiting:" | this->area;
 }
@@ -242,6 +242,8 @@
 
 	// Uncaught termination test.
+	/* Removed due to non-deterministic output.
 	printf("Throw uncaught.\n");
 	yang z;
 	terminate(&z);
-}
+	*/
+}
Index: tests/exceptions/except-2.cfa
===================================================================
--- tests/exceptions/except-2.cfa	(revision 921cd8222a6cdad5b6b7ba84b755a001b52169ba)
+++ tests/exceptions/except-2.cfa	(revision 3b9c674d6b564a0b4f7d960bcd9069290dca19fa)
@@ -12,6 +12,6 @@
 	struct TABLE(BASE_EXCEPT) const * parent;
 	size_t size;
-	void (*copy)(num_error *this, num_error * other);
-	void (*free)(num_error *this);
+	void (*copy)(num_error &this, num_error & other);
+	void (*free)(num_error &this);
 	const char * (*msg)(num_error *this);
 	int (*code)(num_error *this);
@@ -28,5 +28,5 @@
 	if ( ! this->msg ) {
 		static const char * base = "Num Error with code: X";
-		this->msg = malloc(22);
+		this->msg = (char *)malloc(22);
 		for (int i = 0 ; (this->msg[i] = base[i]) ; ++i);
 	}
@@ -34,16 +34,16 @@
 	return this->msg;
 }
-void ?{}(num_error * this, int num) {
-	this->virtual_table = &INSTANCE(num_error);
-	this->msg = 0;
-	this->num = num;
+void ?{}(num_error & this, int num) {
+	this.virtual_table = &INSTANCE(num_error);
+	this.msg = 0;
+	this.num = num;
 }
-void ?{}(num_error * this, num_error * other) {
-	this->virtual_table = other->virtual_table;
-	this->msg = 0;
-	this->num = other->num;
+void ?{}(num_error & this, num_error & other) {
+	this.virtual_table = other.virtual_table;
+	this.msg = 0;
+	this.num = other.num;
 }
-void ^?{}(num_error * this) {
-	if( this->msg ) free( this->msg );
+void ^?{}(num_error & this) {
+	if( this.msg ) free( this.msg );
 }
 int num_error_code( num_error * this ) {
