Index: src/Validate/Autogen.cpp
===================================================================
--- src/Validate/Autogen.cpp	(revision 81e768d1c7e5b625cf5e14ca13ea80c649602ad5)
+++ src/Validate/Autogen.cpp	(revision 5d3d281c4eabcd465b84b7b5001ee86b376872d1)
@@ -71,5 +71,4 @@
 class FuncGenerator {
 public:
-	std::list<ast::ptr<ast::Decl>> forwards;
 	std::list<ast::ptr<ast::Decl>> definitions;
 
@@ -90,5 +89,4 @@
 	virtual void genStandardFuncs();
 	void produceDecl( const ast::FunctionDecl * decl );
-	void produceForwardDecl( const ast::FunctionDecl * decl );
 
 	const CodeLocation& getLocation() const { return getDecl()->location; }
@@ -196,6 +194,4 @@
 
 	bool shouldAutogen() const final { return true; }
-	void generateAndPrependDecls( std::list<ast::ptr<ast::Decl>> & );
-	void genForwards();
 private:
 	void genFuncBody( ast::FunctionDecl * decl ) final;
@@ -245,11 +241,7 @@
 	ast::EnumInstType enumInst( enumDecl->name );
 	enumInst.base = enumDecl;
-	if ( enumDecl->isCfa ) {
-		EnumFuncGenerator gen( enumDecl, &enumInst, functionNesting );
-		gen.generateAndPrependDecls( declsToAddBefore );
-	}
-
-	EnumFuncGenerator gen2( enumDecl, &enumInst, functionNesting );
-	gen2.generateAndAppendFunctions( declsToAddAfter );
+
+	EnumFuncGenerator gen( enumDecl, &enumInst, functionNesting );
+	gen.generateAndAppendFunctions( declsToAddAfter );
 }
 
@@ -320,5 +312,5 @@
 
 	// Now export the lists contents.
-	decls.splice( decls.end(), forwards );
+//	decls.splice( decls.end(), forwards );    // mlb wip: delete me
 	decls.splice( decls.end(), definitions );
 }
@@ -329,13 +321,4 @@
 
 	definitions.push_back( decl );
-}
-
-/// Make a forward declaration of the decl and add it to forwards.
-void FuncGenerator::produceForwardDecl( const ast::FunctionDecl * decl ) {
-	if (0 != functionNesting) return;
-	ast::FunctionDecl * fwd =
-		( decl->stmts ) ? ast::asForward( decl ) : ast::deepCopy( decl ) ;
-	fwd->fixUniqueId();
-	forwards.push_back( fwd );
 }
 
@@ -483,5 +466,4 @@
 	for ( auto & generator : standardProtos ) {
 		ast::FunctionDecl * decl = (this->*generator)();
-		produceForwardDecl( decl );
 		genFuncBody( decl );
 		if ( CodeGen::isAssignment( decl->name ) ) {
@@ -505,5 +487,4 @@
 			continue;
 		}
-		produceForwardDecl( ctor );
 		makeFieldCtorBody( decl->members.begin(), decl->members.end(), ctor );
 		produceDecl( ctor );
@@ -667,5 +648,4 @@
 			return;
 		}
-		produceForwardDecl( ctor );
 		auto params = ctor->params;
 		auto dstParam = params.front().strict_as<ast::ObjectDecl>();
@@ -695,10 +675,4 @@
 		// Add unused attribute to parameter to silence warnings.
 		addUnusedAttribute( params.front() );
-
-		// Just an extra step to make the forward and declaration match.
-		if ( forwards.empty() ) return;
-		ast::FunctionDecl * fwd = strict_dynamic_cast<ast::FunctionDecl *>(
-			forwards.back().get_and_mutate() );
-		addUnusedAttribute( fwd->params.front() );
 	}
 }
@@ -718,22 +692,4 @@
 }
 
-void EnumFuncGenerator::generateAndPrependDecls( std::list<ast::ptr<ast::Decl>> & decls ) {
-	genForwards();
-	decls.splice( decls.end(), forwards );
-}
-
-void EnumFuncGenerator::genForwards() {
-	forwards.push_back( ast::asForward(decl) );
-
-	ast::FunctionDecl *(FuncGenerator::*standardProtos[4])() const = {
-		&EnumFuncGenerator::genCtorProto, &EnumFuncGenerator::genCopyProto,
-		&EnumFuncGenerator::genDtorProto, &EnumFuncGenerator::genAssignProto };
-
-	for ( auto & generator: standardProtos) {
-		ast::FunctionDecl * decl = (this->*generator)();
-		produceForwardDecl( decl );
-	}
-}
-
 void EnumFuncGenerator::genStandardFuncs() {
 	// do everything FuncGenerator does except not make ForwardDecls
@@ -744,5 +700,4 @@
 	for ( auto & generator : standardProtos ) {
 		ast::FunctionDecl * decl = (this->*generator)();
-		produceForwardDecl( decl );
 		genFuncBody( decl );
 		if ( CodeGen::isAssignment( decl->name ) ) {
@@ -794,10 +749,4 @@
 		// Just add unused attribute to parameter to silence warnings.
 		addUnusedAttribute( params.front() );
-
-		// Just an extra step to make the forward and declaration match.
-		if ( forwards.empty() ) return;
-		ast::FunctionDecl * fwd = strict_dynamic_cast<ast::FunctionDecl *>(
-			forwards.back().get_and_mutate() );
-		addUnusedAttribute( fwd->params.front() );
 	}
 }
