Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 65660bd065cbc0b68c92db2425b5984d675dff58)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision ac9ca967fc4b0004f809382a113690d4c01cae00)
@@ -138,11 +138,4 @@
 		}
 
-		template< typename InputIterator >
-		void simpleCombineEnvironments( InputIterator begin, InputIterator end, TypeEnvironment &result ) {
-			while ( begin != end ) {
-				result.simpleCombine( (*begin++).env );
-			}
-		}
-
 		void renameTypes( Expression *expr ) {
 			expr->get_result()->accept( global_renamer );
@@ -216,27 +209,23 @@
 	template< typename StructOrUnionType >
 	void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const TypeEnvironment & env, Expression * member ) {
-
-		// // member must be either a tuple expression or a name expr
-		// if ( NameExpr * nameExpr = dynamic_cast< NameExpr * >( memberExpr->get_member() ) ) {
-		//  addAggMembers( structInst, agg->expr, agg->cost, nameExpr->get_name() );
-		// } else {
-		//  TupleExpr * tupleExpr = safe_dynamic_cast< TupleExpr * >( memberExpr->get_member() );
-		//  // xxx - ...
-		//  assert( false );
-		// }
-		// if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( memberExpr->get_member() ) ) {
-
-		// }
-		NameExpr * nameExpr = safe_dynamic_cast< NameExpr * >( member );
-		const std::string & name = nameExpr->get_name();
-		std::list< Declaration* > members;
-		aggInst->lookup( name, members );
-		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
-			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) {
-				alternatives.push_back( Alternative( new MemberExpr( dwt, expr->clone() ), env, newCost ) );
-				renameTypes( alternatives.back().expr );
-			} else {
-				assert( false );
-			}
+		// member must be either a tuple expression or a name expr
+		if ( NameExpr * nameExpr = dynamic_cast< NameExpr * >( member ) ) {
+			const std::string & name = nameExpr->get_name();
+			std::list< Declaration* > members;
+			aggInst->lookup( name, members );
+			for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
+				if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) {
+					alternatives.push_back( Alternative( new MemberExpr( dwt, expr->clone() ), env, newCost ) );
+					renameTypes( alternatives.back().expr );
+				} else {
+					assert( false );
+				}
+			}
+		} else if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( member ) ) {
+			assert( false );
+		} else {
+			// xxx - temporary
+			std::cerr << member << std::endl;
+			assertf( false, "reached unexpected case of addAggMembers" );
 		}
 	}
Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision 65660bd065cbc0b68c92db2425b5984d675dff58)
+++ src/ResolvExpr/AlternativeFinder.h	(revision ac9ca967fc4b0004f809382a113690d4c01cae00)
@@ -113,4 +113,11 @@
 
 	Cost sumCost( const AltList &in );
+
+	template< typename InputIterator >
+	void simpleCombineEnvironments( InputIterator begin, InputIterator end, TypeEnvironment &result ) {
+		while ( begin != end ) {
+			result.simpleCombine( (*begin++).env );
+		}
+	}
 } // namespace ResolvExpr
 
