Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision ed5e798d0f3f29bf7d35184b3a9df595b87a81dc)
+++ src/AST/Convert.cpp	(revision 9a0cd9c19e0576d30e3009540ed2a75d356ffcae)
@@ -1277,7 +1277,22 @@
 	virtual void visit( FunctionDecl * old ) override final {
 		if ( inCache( old ) ) return;
-		// TODO
-		auto decl = (ast::FunctionDecl *)nullptr;
+		auto decl = new ast::FunctionDecl{
+			old->location,
+			old->name,
+			GET_ACCEPT_1(type, FunctionType),
+			GET_ACCEPT_1(statements, CompoundStmt),
+			{ old->storageClasses.val },
+			{ old->linkage.val },
+			GET_ACCEPT_V(attributes, Attribute),
+			{ old->get_funcSpec().val }
+		};
+		decl->scopeLevel = old->scopeLevel;
+		decl->mangleName = old->mangleName;
+		decl->isDeleted  = old->isDeleted;
+		decl->uniqueId   = old->uniqueId;
+		decl->extension  = old->extension;
 		cache.emplace( old, decl );
+
+		this->node = decl;
 	}
 
@@ -1364,8 +1379,21 @@
 
 	virtual void visit( TypeDecl * old ) override final {
-		if ( inCache( old ) ) return;
-		// TODO
-		auto decl = (ast::TypeDecl *)nullptr;
+		if ( inCache( old ) ) return;	
+		auto decl = new ast::TypeDecl{
+			old->location,
+			old->name,
+			{ old->storageClasses.val },
+			GET_ACCEPT_1(base, Type),
+			(ast::TypeVar::Kind)(unsigned)old->kind,
+			old->sized,
+			GET_ACCEPT_1(init, Type)
+		};
+		decl->assertions = GET_ACCEPT_V(assertions, DeclWithType);
+		decl->params     = GET_ACCEPT_V(parameters, TypeDecl);
+		decl->extension  = old->extension;
+		decl->uniqueId   = old->uniqueId;
 		cache.emplace( old, decl );
+
+		this->node = decl;
 	}
 
@@ -1387,10 +1415,27 @@
 	}
 
-	virtual void visit( AsmDecl * ) override final {
-
-	}
-
-	virtual void visit( StaticAssertDecl * ) override final {
-
+	virtual void visit( AsmDecl * old ) override final {
+		auto decl = new ast::AsmDecl{
+			old->location, 
+			GET_ACCEPT_1(stmt, AsmStmt)
+		};
+		decl->extension  = old->extension;
+		decl->uniqueId   = old->uniqueId;
+		decl->storage    = { old->storageClasses.val };
+
+		this->node = decl;
+	}
+
+	virtual void visit( StaticAssertDecl * old ) override final {
+		auto decl = new ast::StaticAssertDecl{
+			old->location,
+			GET_ACCEPT_1(condition, Expr),
+			GET_ACCEPT_1(message, ConstantExpr)
+		};
+		decl->extension  = old->extension;
+		decl->uniqueId   = old->uniqueId;
+		decl->storage    = { old->storageClasses.val };
+
+		this->node = decl;
 	}
 
