Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 43e0949c5f8c1f5a4cfb68e9506dd718e55a6b07)
+++ src/SynTree/Declaration.h	(revision 2f42718dd1dafad85f808eaefd91c3a4c1871b20)
@@ -182,5 +182,5 @@
 	Type *base;
 	std::list< TypeDecl* > parameters;
-	std::list< DeclarationWithType* > assertions;
+	std::vector< DeclarationWithType* > assertions;
 
 	NamedTypeDecl( const std::string &name, Type::StorageClasses scs, Type *type );
@@ -191,5 +191,4 @@
 	void set_base( Type *newValue ) { base = newValue; }
 	std::list< TypeDecl* >& get_parameters() { return parameters; }
-	std::list< DeclarationWithType* >& get_assertions() { return assertions; }
 
 	virtual std::string typeString() const = 0;
Index: src/SynTree/FunctionType.cc
===================================================================
--- src/SynTree/FunctionType.cc	(revision 43e0949c5f8c1f5a4cfb68e9506dd718e55a6b07)
+++ src/SynTree/FunctionType.cc	(revision 2f42718dd1dafad85f808eaefd91c3a4c1871b20)
@@ -39,5 +39,5 @@
 
 namespace {
-	bool containsTtype( const std::list<DeclarationWithType * > & l ) {
+	bool containsTtype( const std::vector<DeclarationWithType * > & l ) {
 		if ( ! l.empty() ) {
 			return Tuples::isTtype( l.back()->get_type() );
Index: src/SynTree/TupleExpr.cc
===================================================================
--- src/SynTree/TupleExpr.cc	(revision 43e0949c5f8c1f5a4cfb68e9506dd718e55a6b07)
+++ src/SynTree/TupleExpr.cc	(revision 2f42718dd1dafad85f808eaefd91c3a4c1871b20)
@@ -66,5 +66,5 @@
 	TupleType * type = strict_dynamic_cast< TupleType * >( tuple->get_result() );
 	assertf( type->size() > index, "TupleIndexExpr index out of bounds: tuple size %d, requested index %d in expr %s", type->size(), index, toString( tuple ).c_str() );
-	set_result( (*std::next( type->get_types().begin(), index ))->clone() );
+	set_result( (*std::next( type->types.begin(), index ))->clone() );
 	// like MemberExpr, TupleIndexExpr is always an lvalue
 	get_result()->set_lvalue( true );
Index: src/SynTree/TupleType.cc
===================================================================
--- src/SynTree/TupleType.cc	(revision 43e0949c5f8c1f5a4cfb68e9506dd718e55a6b07)
+++ src/SynTree/TupleType.cc	(revision 2f42718dd1dafad85f808eaefd91c3a4c1871b20)
@@ -25,5 +25,5 @@
 class Attribute;
 
-TupleType::TupleType( const Type::Qualifiers &tq, const std::list< Type * > & types, const std::vector< Attribute * > & attributes ) : Type( tq, attributes ), types( types ) {
+TupleType::TupleType( const Type::Qualifiers &tq, const std::vector< Type * > & types, const std::vector< Attribute * > & attributes ) : Type( tq, attributes ), types( types ) {
 	for ( Type * t : *this ) {
 		// xxx - this is very awkward. TupleTypes should contain objects so that members can be named, but if they don't have an initializer node then
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 43e0949c5f8c1f5a4cfb68e9506dd718e55a6b07)
+++ src/SynTree/Type.h	(revision 2f42718dd1dafad85f808eaefd91c3a4c1871b20)
@@ -359,6 +359,6 @@
 class FunctionType : public Type {
   public:
-	std::list<DeclarationWithType*> returnVals;
-	std::list<DeclarationWithType*> parameters;
+	std::vector<DeclarationWithType*> returnVals;
+	std::vector<DeclarationWithType*> parameters;
 
 	// Does the function accept a variable number of arguments following the arguments specified in the parameters list.
@@ -372,6 +372,4 @@
 	virtual ~FunctionType();
 
-	std::list<DeclarationWithType*> & get_returnVals() { return returnVals; }
-	std::list<DeclarationWithType*> & get_parameters() { return parameters; }
 	bool get_isVarArgs() const { return isVarArgs; }
 	void set_isVarArgs( bool newValue ) { isVarArgs = newValue; }
@@ -564,15 +562,14 @@
 class TupleType : public Type {
   public:
-	std::list<Type *> types;
+	std::vector<Type *> types;
 	std::list<Declaration *> members;
 
-	TupleType( const Type::Qualifiers & tq, const std::list< Type * > & types, const std::vector< Attribute * > & attributes = std::vector< Attribute * >()  );
+	TupleType( const Type::Qualifiers & tq, const std::vector< Type * > & types, const std::vector< Attribute * > & attributes = std::vector< Attribute * >()  );
 	TupleType( const TupleType& );
 	virtual ~TupleType();
 
-	typedef std::list<Type*> value_type;
+	typedef std::vector< Type * > value_type;
 	typedef value_type::iterator iterator;
 
-	std::list<Type *> & get_types() { return types; }
 	virtual unsigned size() const override { return types.size(); };
 
