blob: b626c45272c4729dbc1a598cdaab8b81378b3401 [file] [log] [blame]
Reid Spencer5f016e22007-07-11 17:01:13 +00001//===--- ModuleBuilder.cpp - Emit LLVM Code from ASTs ---------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner0bc735f2007-12-29 19:59:25 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Reid Spencer5f016e22007-07-11 17:01:13 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This builds an AST and converts it to LLVM Code.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/CodeGen/ModuleBuilder.h"
15#include "CodeGenModule.h"
Chris Lattnerc6fdc342008-01-12 07:05:38 +000016#include "clang/AST/Decl.h"
Reid Spencer5f016e22007-07-11 17:01:13 +000017using namespace clang;
18
19
20/// Init - Create an ModuleBuilder with the specified ASTContext.
Chris Lattnera36c4862007-11-13 18:16:41 +000021clang::CodeGen::CodeGenModule *
Chris Lattner45e8cbd2007-11-28 05:34:05 +000022clang::CodeGen::Init(ASTContext &Context, const LangOptions &Features,
Chris Lattnerfb97b032007-12-02 01:40:18 +000023 llvm::Module &M, const llvm::TargetData &TD,
24 Diagnostic &Diags) {
25 return new CodeGenModule(Context, Features, M, TD, Diags);
Reid Spencer5f016e22007-07-11 17:01:13 +000026}
27
Chris Lattnera36c4862007-11-13 18:16:41 +000028void clang::CodeGen::Terminate(CodeGenModule *B) {
29 delete B;
Reid Spencer5f016e22007-07-11 17:01:13 +000030}
31
32/// CodeGenFunction - Convert the AST node for a FunctionDecl into LLVM.
33///
Chris Lattnera36c4862007-11-13 18:16:41 +000034void clang::CodeGen::CodeGenFunction(CodeGenModule *B, FunctionDecl *D) {
35 B->EmitFunction(D);
Reid Spencer5f016e22007-07-11 17:01:13 +000036}
37
Chris Lattnerc6fdc342008-01-12 07:05:38 +000038/// CodeGenLinkageSpec - Emit the specified linkage space to LLVM.
39void clang::CodeGen::CodeGenLinkageSpec(CodeGenModule *Builder,
40 LinkageSpecDecl *LS) {
41 if (LS->getLanguage() == LinkageSpecDecl::lang_cxx)
42 Builder->WarnUnsupported(LS, "linkage spec");
43
44 // FIXME: implement C++ linkage, C linkage works mostly by C
45 // language reuse already.
46}
47
Chris Lattner88a69ad2007-07-13 05:13:43 +000048/// CodeGenGlobalVar - Emit the specified global variable to LLVM.
Chris Lattnera36c4862007-11-13 18:16:41 +000049void clang::CodeGen::CodeGenGlobalVar(CodeGenModule *Builder, FileVarDecl *D) {
50 Builder->EmitGlobalVarDeclarator(D);
Chris Lattner88a69ad2007-07-13 05:13:43 +000051}
52
Chris Lattnerd86e6bc2008-02-05 08:06:13 +000053/// CodeGenTypeDecl - Compile a type.
54void clang::CodeGen::CodeGenTypeDecl(CodeGenModule *Builder, TypeDecl *D) {
55 Builder->EmitType(D);
56}
57
Chris Lattner88a69ad2007-07-13 05:13:43 +000058
Reid Spencer5f016e22007-07-11 17:01:13 +000059/// PrintStats - Emit statistic information to stderr.
60///
Chris Lattnera36c4862007-11-13 18:16:41 +000061void clang::CodeGen::PrintStats(CodeGenModule *B) {
62 B->PrintStats();
Reid Spencer5f016e22007-07-11 17:01:13 +000063}