Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 452747a874e502a4fcc82e43921e6dc1fac67e6e)
+++ src/InitTweak/FixInit.cc	(revision 5fe35d604ff44afc2ac1fbd0310797d09fa78823)
@@ -943,17 +943,4 @@
 		}
 
-		void addIds( SymTab::Indexer & indexer, const std::list< DeclarationWithType * > & decls ) {
-			for ( auto d : decls ) {
-				indexer.addId( d );
-			}
-		}
-
-		void addTypes( SymTab::Indexer & indexer, const std::list< TypeDecl * > & tds ) {
-			for ( auto td : tds ) {
-				indexer.addType( td );
-				addIds( indexer, td->assertions );
-			}
-		}
-
 		void GenStructMemberCalls::previsit( FunctionDecl * funcDecl ) {
 			GuardValue( function );
@@ -1012,7 +999,5 @@
 				// need to explicitly re-add function parameters to the indexer in order to resolve copy constructors
 				auto guard = makeFuncGuard( [this]() { indexer.enterScope(); }, [this]() { indexer.leaveScope(); } );
-				addTypes( indexer, function->type->forall );
-				addIds( indexer, function->type->returnVals );
-				addIds( indexer, function->type->parameters );
+				indexer.addFunctionType( function->type );
 
 				// need to iterate through members in reverse in order for
@@ -1029,5 +1014,5 @@
 					// insert and resolve default/copy constructor call for each field that's unhandled
 					std::list< Statement * > stmt;
-					Expression * arg2 = 0;
+					Expression * arg2 = nullptr;
 					if ( isCopyConstructor( function ) ) {
 						// if copy ctor, need to pass second-param-of-this-function.field
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 452747a874e502a4fcc82e43921e6dc1fac67e6e)
+++ src/SymTab/Indexer.cc	(revision 5fe35d604ff44afc2ac1fbd0310797d09fa78823)
@@ -567,4 +567,23 @@
 	}
 
+	void Indexer::addIds( const std::list< DeclarationWithType * > & decls ) {
+		for ( auto d : decls ) {
+			addId( d );
+		}
+	}
+
+	void Indexer::addTypes( const std::list< TypeDecl * > & tds ) {
+		for ( auto td : tds ) {
+			addType( td );
+			addIds( td->assertions );
+		}
+	}
+
+	void Indexer::addFunctionType( FunctionType * ftype ) {
+		addTypes( ftype->forall );
+		addIds( ftype->returnVals );
+		addIds( ftype->parameters );
+	}
+
 	void Indexer::enterScope() {
 		++scope;
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 452747a874e502a4fcc82e43921e6dc1fac67e6e)
+++ src/SymTab/Indexer.h	(revision 5fe35d604ff44afc2ac1fbd0310797d09fa78823)
@@ -76,4 +76,13 @@
 		void addTrait( TraitDecl *decl );
 
+		/// convenience function for adding a list of Ids to the indexer
+		void addIds( const std::list< DeclarationWithType * > & decls );
+
+		/// convenience function for adding a list of forall parameters to the indexer
+		void addTypes( const std::list< TypeDecl * > & tds );
+
+		/// convenience function for adding all of the declarations in a function type to the indexer
+		void addFunctionType( FunctionType * ftype );
+
 		bool doDebug = false; ///< Display debugging trace?
 	  private:
