Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 28c89f4832f02b9f74f6894954fc415ed4392a62)
+++ src/AST/Convert.cpp	(revision ed5e798d0f3f29bf7d35184b3a9df595b87a81dc)
@@ -948,6 +948,6 @@
 			get<Type>().accept1( node->base ),
 			get<Expression>().accept1( node->dimension ),
-			node->isVarLen,
-			node->isStatic
+			(bool)node->isVarLen,
+			(bool)node->isStatic
 		};
 		return nullptr;
@@ -959,6 +959,6 @@
 			get<Type>().accept1( node->base ),
 			get<Expression>().accept1( node->dimension ),
-			node->isVarLen,
-			node->isStatic
+			(bool)node->isVarLen,
+			(bool)node->isStatic
 		};
 		return nullptr;
@@ -983,5 +983,8 @@
 
 	const ast::Type * visit( const ast::FunctionType * node ) override final {
-		auto ty = new FunctionType { cv( node ), node->isVarArgs };
+		auto ty = new FunctionType {
+			cv( node ), 
+			(bool)node->isVarArgs
+		};
 		ty->returnVals = get<DeclarationWithType>().acceptL( node->returns );
 		ty->parameters = get<DeclarationWithType>().acceptL( node->params );
@@ -1100,30 +1103,38 @@
 
 	const ast::Type * visit( const ast::TupleType * node ) override final {
-		(void)node;
+		this->node = new TupleType{
+			cv( node ),
+			get<Type>().acceptL( node->types )
+			// members generated by TupleType c'tor
+		};
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::TypeofType * node ) override final {
-		(void)node;
+		this->node = new TypeofType{
+			cv( node ),
+			get<Expression>().accept1( node->expr ),
+			(bool)node->kind
+		};
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::VarArgsType * node ) override final {
-		(void)node;
+		this->node = new VarArgsType{ cv( node ) };
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::ZeroType * node ) override final {
-		(void)node;
+		this->node = new ZeroType{ cv( node ) };
 		return nullptr;
 	}
 
 	const ast::Type * visit( const ast::OneType * node ) override final {
-		(void)node;
-		return nullptr;
-	}
-
-	const ast::Type * visit( const ast::GlobalScopeType * node ) override final {
-		(void)node;
+		this->node = new OneType{ cv( node ) };
+		return nullptr;
+	}
+
+	const ast::Type * visit( const ast::GlobalScopeType * ) override final {
+		this->node = new GlobalScopeType{};
 		return nullptr;
 	}
@@ -2215,30 +2226,38 @@
 	}
 
-	virtual void visit( TupleType * ) override final {
-
-	}
-
-	virtual void visit( TypeofType * ) override final {
-
+	virtual void visit( TupleType * old ) override final {
+		this->node = new ast::TupleType{
+			GET_ACCEPT_V( types, Type ),
+			// members generated by TupleType c'tor
+			cv( old )
+		};
+	}
+
+	virtual void visit( TypeofType * old ) override final {
+		this->node = new ast::TypeofType{
+			GET_ACCEPT_1( expr, Expr ),
+			(ast::TypeofType::Kind)old->is_basetypeof,
+			cv( old )
+		};
 	}
 
 	virtual void visit( AttrType * ) override final {
-
-	}
-
-	virtual void visit( VarArgsType * ) override final {
-
-	}
-
-	virtual void visit( ZeroType * ) override final {
-
-	}
-
-	virtual void visit( OneType * ) override final {
-
+		assertf( false, "AttrType deprecated in new AST." );
+	}
+
+	virtual void visit( VarArgsType * old ) override final {
+		this->node = new ast::VarArgsType{ cv( old ) };
+	}
+
+	virtual void visit( ZeroType * old ) override final {
+		this->node = new ast::ZeroType{ cv( old ) };
+	}
+
+	virtual void visit( OneType * old ) override final {
+		this->node = new ast::OneType{ cv( old ) };
 	}
 
 	virtual void visit( GlobalScopeType * ) override final {
-
+		this->node = new ast::GlobalScopeType{};
 	}
 
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision 28c89f4832f02b9f74f6894954fc415ed4392a62)
+++ src/AST/Type.hpp	(revision ed5e798d0f3f29bf7d35184b3a9df595b87a81dc)
@@ -514,5 +514,5 @@
 class GlobalScopeType final : public Type {
 public:
-	GlobalScopeType( CV::Qualifiers q = {} ) : Type( q ) {}
+	GlobalScopeType() : Type() {}
 
 	const Type * accept( Visitor & v ) const override { return v.visit( this ); }
