Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision f3b0a07aaf0466e2dd02c4a242002b90d321b115)
+++ src/ResolvExpr/Unify.cc	(revision 0a86a3094427d9c3e2c86bb1a3758bf2d3bf3728)
@@ -123,31 +123,4 @@
 	}
 
-	struct CompleteTypeChecker : public Visitor {
-		virtual void visit( VoidType *basicType ) { status = false; }
-		virtual void visit( BasicType *basicType ) {}
-		virtual void visit( PointerType *pointerType ) {}
-		virtual void visit( ArrayType *arrayType ) { status = ! arrayType->get_isVarLen(); }
-		virtual void visit( FunctionType *functionType ) {}
-		virtual void visit( StructInstType *aggregateUseType ) { status = aggregateUseType->get_baseStruct()->has_body(); }
-		virtual void visit( UnionInstType *aggregateUseType ) { status = aggregateUseType->get_baseUnion()->has_body(); }
-		// xxx - enum inst does not currently contain a pointer to base, this should be fixed.
-		virtual void visit( EnumInstType *aggregateUseType ) { /* status = aggregateUseType->get_baseEnum()->hasBody(); */ }
-		virtual void visit( TraitInstType *aggregateUseType ) { assert( false ); }
-		virtual void visit( TypeInstType *aggregateUseType ) { status = aggregateUseType->get_baseType()->isComplete(); }
-		virtual void visit( TupleType *tupleType ) {} // xxx - not sure if this is right, might need to recursively check complete-ness
-		virtual void visit( TypeofType *typeofType ) { assert( false ); }
-		virtual void visit( AttrType *attrType ) { assert( false ); } // xxx - not sure what to do here
-		virtual void visit( VarArgsType *varArgsType ){} // xxx - is this right?
-		virtual void visit( ZeroType *zeroType ) {}
-		virtual void visit( OneType *oneType ) {}
-		bool status = true;
-	};
-	bool isComplete( Type * type ) {
-		CompleteTypeChecker checker;
-		assert( type );
-		type->accept( checker );
-		return checker.status;
-	}
-
 	bool tyVarCompatible( const TypeDecl::Data & data, Type *type, const SymTab::Indexer &indexer ) {
 		switch ( data.kind ) {
@@ -158,5 +131,5 @@
 			// type must also be complete
 			// xxx - should this also check that type is not a tuple type and that it's not a ttype?
-			return ! isFtype( type, indexer ) && (! data.isComplete || isComplete( type ));
+			return ! isFtype( type, indexer ) && (! data.isComplete || type->isComplete() );
 		  case TypeDecl::Ftype:
 			return isFtype( type, indexer );
