Index: doc/working/exception/translate.c
===================================================================
--- doc/working/exception/translate.c	(revision b73bd709bb788f60341596dfaa40285cf1dc0a13)
+++ doc/working/exception/translate.c	(revision 186b39852694fdb50e4870b81018fcbb65cf3762)
@@ -1,7 +1,9 @@
 /* Translation rules for exception handling code, from Cforall to C.
  *
- * Note that these are not final. Names, syntax and the exact translation
- * will be updated. The first section is the shared definitions, not generated
- * by the local translations but used by the translated code.
+ * Reminder: This is not final. Besides names and things it is also going very
+ * much for correctness and simplisity over efficiency.
+ *
+ * The first section is the shared definitions, not generated by the local
+ * translations but used by the translated code.
  *
  * Most of these exist only after translation (in C code). The first (the
@@ -16,4 +18,8 @@
 typedef int exception;
 
+// Will have to be availibe to user. Consider new name. Requires tagged types.
+forall(dtype parent | tagged(parent), dtype child | tagged(child))
+parent *dynamic_cast(child *);
+
 void __throw_terminate(exception except) __attribute__((noreturn));
 void __rethrow_terminate() __attribute__((noreturn));
@@ -116,13 +122,17 @@
 		}
 		int match1(exception except) {
-			OtherException inner_except;
-			if (dynamic_cast__SomeException(except)) {
-				return 1;
-			}
-			else if ( (inner_except = dynamic_cast__OtherException(except)) &&
-					inner_except.priority > 3) {
-				return 2;
-			}
-			else return 0;
+			{
+				if (dynamic_cast__SomeException(except)) {
+					return 1;
+				}
+			}
+			{
+				OtherException err;
+				if ( (err = dynamic_cast__OtherException(except)) &&
+						err.priority > 3) {
+					return 2;
+				}
+			}
+			return 0;
 		}
 		__try_terminate(try1, catch1, match1);
@@ -151,15 +161,19 @@
 	{
 		bool handle1(exception except) {
-			OtherException inner_except;
-			if (dynamic_cast__SomeException(except)) {
-				fiddleThing();
-				return true;
-			} else if (dynamic_cast__OtherException(except) &&
-					inner_except.priority > 3) {
-				twiddleWidget();
-				return true;
-			} else {
-				return false;
-			}
+			{
+				if (dynamic_cast__SomeException(except)) {
+					fiddleThing();
+					return true;
+				}
+			}
+			{
+				OtherException err;
+ 				if ( ( err = dynamic_cast__OtherException(except) ) &&
+						err.priority > 3) {
+					twiddleWidget();
+					return true;
+				}
+			}
+			return false;
 		}
 		struct __try_resume_node data =
@@ -230,10 +244,11 @@
 		}
 		bool handle1(exception except) {
-			if (dynamic_cast__SomeException(except)) {
-				fiddleThing();
-				return true;
-			} else {
-				return false;
-			}
+			{
+				if (dynamic_cast__SomeException(except)) {
+					fiddleThing();
+					return true;
+				}
+			}
+			return false;
 		}
 		struct __cleanup_hook generated_name
@@ -273,7 +288,9 @@
 	{
 		bool handle1() {
-			if (dynamic_cast__OtherException(except)) {
-				twiddleWidget();
-				return true;
+			{
+				if (dynamic_cast__OtherException(except)) {
+					twiddleWidget();
+					return true;
+				}
 			}
 			return false;
@@ -297,6 +314,8 @@
 		}
 		int match1(exception except) {
-			if (dynamic_cast__SomeException(except)) {
-				return 1;
+			{
+				if (dynamic_cast__SomeException(except)) {
+					return 1;
+				}
 			}
 			return 0;
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision b73bd709bb788f60341596dfaa40285cf1dc0a13)
+++ src/GenPoly/Specialize.cc	(revision 186b39852694fdb50e4870b81018fcbb65cf3762)
@@ -99,4 +99,6 @@
 		if ( FunctionType * fftype = getFunctionType( formalType ) ) {
 			if ( fftype->isTtype() ) return true;
+			// conversion of 0 (null) to function type does not require tuple specialization
+			if ( dynamic_cast< ZeroType * >( actualType ) ) return false;
 			FunctionType * aftype = getFunctionType( actualType );
 			assertf( aftype, "formal type is a function type, but actual type is not." );
Index: src/SynTree/Constant.cc
===================================================================
--- src/SynTree/Constant.cc	(revision b73bd709bb788f60341596dfaa40285cf1dc0a13)
+++ src/SynTree/Constant.cc	(revision 186b39852694fdb50e4870b81018fcbb65cf3762)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 21 16:44:48 2017
-// Update Count     : 27
+// Last Modified By : Andrew Beach
+// Last Modified On : Thr Jun 22 10:11:00 2017
+// Update Count     : 28
 //
 
@@ -29,4 +29,8 @@
 
 Constant::~Constant() { delete type; }
+
+Constant Constant::from_bool( bool b ) {
+	return Constant( new BasicType( Type::Qualifiers(), BasicType::Bool ), b ? "1" : "0" , (unsigned long long int)b );
+}
 
 Constant Constant::from_int( int i ) {
Index: src/SynTree/Constant.h
===================================================================
--- src/SynTree/Constant.h	(revision b73bd709bb788f60341596dfaa40285cf1dc0a13)
+++ src/SynTree/Constant.h	(revision 186b39852694fdb50e4870b81018fcbb65cf3762)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 21 16:44:48 2017
-// Update Count     : 14
+// Last Modified By : Andrew Beach
+// Last Modified On : Thr Jun 22 10:13:00 2017
+// Update Count     : 15
 //
 
@@ -33,4 +33,6 @@
 	void set_value( std::string newValue ) { rep = newValue; }
 
+	/// generates a boolean constant of the given bool
+	static Constant from_bool( bool b );
 	/// generates an integer constant of the given int
 	static Constant from_int( int i );
