]> granicus.if.org Git - clang/commitdiff
give CreateObjCRuntime a full CGM so it can get whatever state it needs,
authorChris Lattner <sabre@nondot.org>
Thu, 26 Jun 2008 04:19:03 +0000 (04:19 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 26 Jun 2008 04:19:03 +0000 (04:19 +0000)
instead of passing in just a couple random things it currently
happens to use.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52756 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCEtoile.cpp
lib/CodeGen/CGObjCGNU.cpp
lib/CodeGen/CGObjCRuntime.h
lib/CodeGen/CodeGenModule.cpp

index 94471ad4df906a331c35abc23dcf6deb301f9915..8c59aadb8658ec70ccb8494de99895f4ac223909 100644 (file)
@@ -243,11 +243,3 @@ llvm::Function *CGObjCEtoile::MethodPreamble(
   return Method;
 }
 
-/*
-clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime(
-    llvm::Module &M,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType) {
-  return new CGObjCEtoile(M, LLVMIntType, LLVMLongType);
-}
-*/
index 8eb42636f33ceeb4c8741e9bea35d88695b31c90..7d9a6aa21eabd3c3b37fb5b1f31ecf541c64d216 100644 (file)
 //===----------------------------------------------------------------------===//
 
 #include "CGObjCRuntime.h"
+#include "CodeGenModule.h"
+#include "clang/AST/ASTContext.h"
 #include "llvm/Module.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/IRBuilder.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
 #include <map>
+using namespace clang;
 
 // FIXME: Remove THIS!
 #include "llvm/Analysis/ValueTracking.h"
@@ -39,8 +42,9 @@ static const int RuntimeVersion = 8;
 static const int ProtocolVersion = 2;
 
 namespace {
-class CGObjCGNU : public clang::CodeGen::CGObjCRuntime {
+class CGObjCGNU : public CodeGen::CGObjCRuntime {
 private:
+  CodeGen::CodeGenModule &CGM;
   llvm::Module &TheModule;
   const llvm::StructType *SelStructTy;
   const llvm::Type *SelectorTy;
@@ -94,9 +98,7 @@ private:
   llvm::Constant *MakeGlobal(const llvm::ArrayType *Ty,
       std::vector<llvm::Constant*> &V, const std::string &Name="");
 public:
-  CGObjCGNU(llvm::Module &Mp,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType);
+  CGObjCGNU(CodeGen::CodeGenModule &cgm);
   virtual llvm::Constant *GenerateConstantString(const char *String, 
       const size_t length);
   virtual llvm::Value *GenerateMessageSend(llvm::IRBuilder &Builder,
@@ -172,13 +174,11 @@ static std::string SymbolNameForMethod(const std::string &ClassName, const
             (isClassMethod ? "+" : "-") + MethodName;
 }
 
-CGObjCGNU::CGObjCGNU(llvm::Module &M,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType) : 
-  TheModule(M),
-  IntTy(LLVMIntType),
-  LongTy(LLVMLongType)
-{
+CGObjCGNU::CGObjCGNU(CodeGen::CodeGenModule &cgm)
+  : CGM(cgm), TheModule(CGM.getModule()) {
+  IntTy = CGM.getTypes().ConvertType(CGM.getContext().IntTy);
+  LongTy = CGM.getTypes().ConvertType(CGM.getContext().LongTy);
+    
   Zeros[0] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0);
   Zeros[1] = Zeros[0];
   NULLPtr = llvm::ConstantPointerNull::get(
@@ -928,9 +928,6 @@ llvm::Function *CGObjCGNU::MethodPreamble(
   return Method;
 }
 
-clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime(
-    llvm::Module &M,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType) {
-  return new CGObjCGNU(M, LLVMIntType, LLVMLongType);
+CodeGen::CGObjCRuntime *CodeGen::CreateObjCRuntime(CodeGen::CodeGenModule &CGM){
+  return new CGObjCGNU(CGM);
 }
index 94217ddc1d2fbc7efd65ea4e4989b15b511942a7..53753695fc7bbb2710716a4ca10e4f16cd569d89 100644 (file)
@@ -29,6 +29,7 @@ namespace llvm {
 
 namespace clang {
 namespace CodeGen {
+  class CodeGenModule;
 
 //FIXME Several methods should be pure virtual but aren't to avoid the
 //partially-implemented subclass breaking.
@@ -119,9 +120,7 @@ public:
 
 /// Creates an instance of an Objective-C runtime class.  
 //TODO: This should include some way of selecting which runtime to target.
-CGObjCRuntime *CreateObjCRuntime(llvm::Module &M,
-                                 const llvm::Type *LLVMIntType,
-                                 const llvm::Type *LLVMLongType);
+CGObjCRuntime *CreateObjCRuntime(CodeGenModule &CGM);
 }
 }
 #endif
index 1d0001c607afeb9a6c7261bd99d0f5a184e2ea38..e235b60f7d4f0edbe082583904c118f3075039c2 100644 (file)
@@ -39,9 +39,7 @@ CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO,
     Types(C, M, TD), MemCpyFn(0), MemMoveFn(0), MemSetFn(0),
     CFConstantStringClassRef(0) {
   //TODO: Make this selectable at runtime
-  Runtime = CreateObjCRuntime(M,
-      getTypes().ConvertType(getContext().IntTy),
-      getTypes().ConvertType(getContext().LongTy));
+  Runtime = CreateObjCRuntime(*this);
 
   // If debug info generation is enabled, create the CGDebugInfo object.
   if (GenerateDebugInfo)