Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 6f8e87dcf3d0ad0a04666c2efea62740d347610d)
+++ src/AST/Convert.cpp	(revision d66e7b7b110efcf99370d5d03e97d25793df250a)
@@ -10,6 +10,6 @@
 // Created On       : Thu May 09 15::37::05 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Thu May 16 17:21:00 2019
-// Update Count     : 1
+// Last Modified On : Fri May 17 11:14:00 2019
+// Update Count     : 2
 //
 
@@ -54,16 +54,4 @@
 //================================================================================================
 
-#define ACCEPT_1(name, child, type) \
-	old->child->accept(*this); \
-	auto name = strict_dynamic_cast< ast::type * >( node );
-
-#define ACCEPT_N(name, child, type) \
-	std::vector< ast::ptr<ast::type> > name; \
-	name.reserve( old->child.size() ); \
-	for( auto a : old->child ) { \
-		a->accept( *this ); \
-		name.emplace_back( strict_dynamic_cast< ast::type * >(node) ); \
-	}
-
 class ConverterOldToNew : public Visitor {
 public:
@@ -122,18 +110,13 @@
 
 	virtual void visit( ObjectDecl * old ) override final {
-		ACCEPT_1(type, type, Type)
-		ACCEPT_1(init, init, Init)
-		ACCEPT_1(bitWd, bitfieldWidth, Expr)
-		ACCEPT_N(attr, attributes, Attribute)
-
 		auto decl = new ast::ObjectDecl(
 			old->location,
 			old->name,
-			type,
-			init,
+			GET_ACCEPT_1(type, Type),
+			GET_ACCEPT_1(init, Init),
 			{ old->get_storageClasses().val },
 			{ old->linkage.val },
-			bitWd,
-			std::move( attr ),
+			GET_ACCEPT_1(bitfieldWidth, Expr),
+			GET_ACCEPT_V(attributes, Attribute),
 			{ old->get_funcSpec().val }
 		);
@@ -152,20 +135,15 @@
 
 	virtual void visit( StructDecl * old ) override final {
-		ACCEPT_N(members, members, Decl)
-		ACCEPT_N(params, parameters, TypeDecl)
-		ACCEPT_1(parent, parent, AggregateDecl)
-		ACCEPT_N(attr, attributes, Attribute)
-
 		auto decl = new ast::StructDecl(
 			old->location,
 			old->name,
 			old->kind,
-			std::move( attr ),
+			GET_ACCEPT_V(attributes, Attribute),
 			{ old->linkage.val }
 		);
-		decl->parent = parent;
+		decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
 		decl->body   = old->body;
-		decl->params = params;
-		decl->members    = members;
+		decl->params = GET_ACCEPT_V(parameters, TypeDecl);
+		decl->members    = GET_ACCEPT_V(members, Decl);
 		decl->extension  = old->extension;
 		decl->uniqueId   = old->uniqueId;
@@ -176,19 +154,14 @@
 
 	virtual void visit( UnionDecl * old ) override final {
-		ACCEPT_N(members, members, Decl)
-		ACCEPT_N(params, parameters, TypeDecl)
-		ACCEPT_1(parent, parent, AggregateDecl)
-		ACCEPT_N(attr, attributes, Attribute)
-
 		auto decl = new ast::UnionDecl(
 			old->location,
 			old->name,
-			std::move( attr ),
+			GET_ACCEPT_V(attributes, Attribute),
 			{ old->linkage.val }
 		);
-		decl->parent = parent;
+		decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
 		decl->body   = old->body;
-		decl->params = params;
-		decl->members    = members;
+		decl->params = GET_ACCEPT_V(parameters, TypeDecl);
+		decl->members    = GET_ACCEPT_V(members, Decl);
 		decl->extension  = old->extension;
 		decl->uniqueId   = old->uniqueId;
@@ -199,19 +172,14 @@
 
 	virtual void visit( EnumDecl * old ) override final {
-		ACCEPT_N(members, members, Decl)
-		ACCEPT_N(params, parameters, TypeDecl)
-		ACCEPT_1(parent, parent, AggregateDecl)
-		ACCEPT_N(attr, attributes, Attribute)
-
 		auto decl = new ast::UnionDecl(
 			old->location,
 			old->name,
-			std::move( attr ),
+			GET_ACCEPT_V(attributes, Attribute),
 			{ old->linkage.val }
 		);
-		decl->parent = parent;
+		decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
 		decl->body   = old->body;
-		decl->params = params;
-		decl->members    = members;
+		decl->params = GET_ACCEPT_V(parameters, TypeDecl);
+		decl->members    = GET_ACCEPT_V(members, Decl);
 		decl->extension  = old->extension;
 		decl->uniqueId   = old->uniqueId;
@@ -222,19 +190,14 @@
 
 	virtual void visit( TraitDecl * old ) override final {
-		ACCEPT_N(members, members, Decl)
-		ACCEPT_N(params, parameters, TypeDecl)
-		ACCEPT_1(parent, parent, AggregateDecl)
-		ACCEPT_N(attr, attributes, Attribute)
-
 		auto decl = new ast::UnionDecl(
 			old->location,
 			old->name,
-			std::move( attr ),
+			GET_ACCEPT_V(attributes, Attribute),
 			{ old->linkage.val }
 		);
-		decl->parent = parent;
+		decl->parent = GET_ACCEPT_1(parent, AggregateDecl);
 		decl->body   = old->body;
-		decl->params = params;
-		decl->members    = members;
+		decl->params = GET_ACCEPT_V(parameters, TypeDecl);
+		decl->members    = GET_ACCEPT_V(members, Decl);
 		decl->extension  = old->extension;
 		decl->uniqueId   = old->uniqueId;
@@ -249,17 +212,13 @@
 
 	virtual void visit( TypedefDecl * old ) override final {
-		ACCEPT_1(type, base, Type)
-		ACCEPT_N(params, parameters, TypeDecl)
-		ACCEPT_N(asserts, assertions, DeclWithType)
 		auto decl = new ast::TypedefDecl(
 			old->location,
 			old->name,
 			{ old->storageClasses.val },
-			type,
+			GET_ACCEPT_1(base, Type),
 			{ old->linkage.val }
 		);
-
-		decl->assertions = asserts;
-		decl->params     = params;
+		decl->assertions = GET_ACCEPT_V(assertions, DeclWithType);
+		decl->params     = GET_ACCEPT_V(parameters, TypeDecl);
 		decl->extension  = old->extension;
 		decl->uniqueId   = old->uniqueId;
@@ -278,10 +237,9 @@
 
 	virtual void visit( CompoundStmt * old ) override final {
-		ACCEPT_N(kids, kids, Stmt)
 		auto stmt = new ast::CompoundStmt(
 			old->location,
-			to<std::list>::from( std::move(kids) )
-		);
-		stmt->labels = to<std::vector>::from( make_labels( std::move( old->labels ) ) );
+			to<std::list>::from( GET_ACCEPT_V(kids, Stmt) ),
+			GET_LABELS_V(old->labels)
+		);
 
 		this->node = stmt;
@@ -388,4 +346,6 @@
 			CASE(FallThroughDefault);
 			#undef CASE
+			default:
+				assertf(false, "Invalid BranchStmt::Type %d\n", old->type);
 			}
 
@@ -419,4 +379,6 @@
 			kind = ast::ThrowStmt::Resume;
 			break;
+		default:
+			assertf(false, "Invalid ThrowStmt::Kind %d\n", old->kind);
 		}
 
@@ -449,4 +411,6 @@
 			kind = ast::CatchStmt::Resume;
 			break;
+		default:
+			assertf(false, "Invalid CatchStmt::Kind %d\n", old->kind);
 		}
 
@@ -789,7 +753,4 @@
 #undef GET_ACCEPT_1
 
-#undef ACCEPT_N
-#undef ACCEPT_1
-
 std::list< ast::ptr< ast::Decl > > convert( const std::list< Declaration * > & translationUnit ) {
 	ConverterOldToNew c;
