]> granicus.if.org Git - clang/commitdiff
Move more of blocks codegen out of CodeGenModule and into the
authorMike Stump <mrs@apple.com>
Wed, 4 Mar 2009 18:17:45 +0000 (18:17 +0000)
committerMike Stump <mrs@apple.com>
Wed, 4 Mar 2009 18:17:45 +0000 (18:17 +0000)
BlockModule.  No functionality change.  This should help people that
don't want to know anything about blocks not be confused by the
overloaded use of the term block or nor want to see all the blocks
goop.

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

lib/CodeGen/CGBlocks.cpp
lib/CodeGen/CGBlocks.h
lib/CodeGen/CodeGenFunction.h
lib/CodeGen/CodeGenModule.cpp
lib/CodeGen/CodeGenModule.h

index 2f1fba02c72dda0de42aadf5c06c96f9a9840799..8aabada259c37dda0d613af9134a32662b04690e 100644 (file)
@@ -74,7 +74,7 @@ llvm::Constant *CodeGenFunction::BuildDescriptorBlockDecl(uint64_t Size) {
   return C;
 }
 
-llvm::Constant *CodeGenModule::getNSConcreteGlobalBlock() {
+llvm::Constant *BlockModule::getNSConcreteGlobalBlock() {
   if (NSConcreteGlobalBlock)
     return NSConcreteGlobalBlock;
 
@@ -92,7 +92,7 @@ llvm::Constant *CodeGenModule::getNSConcreteGlobalBlock() {
   return NSConcreteGlobalBlock;
 }
 
-llvm::Constant *CodeGenModule::getNSConcreteStackBlock() {
+llvm::Constant *BlockModule::getNSConcreteStackBlock() {
   if (NSConcreteStackBlock)
     return NSConcreteStackBlock;
 
@@ -297,7 +297,7 @@ llvm::Value *CodeGenFunction::BuildBlockLiteralTmp(const BlockExpr *BE) {
 }
 
 
-const llvm::Type *CodeGenModule::getBlockDescriptorType() {
+const llvm::Type *BlockModule::getBlockDescriptorType() {
   if (BlockDescriptorType)
     return BlockDescriptorType;
 
@@ -318,8 +318,7 @@ const llvm::Type *CodeGenModule::getBlockDescriptorType() {
   return BlockDescriptorType;
 }
 
-const llvm::Type *
-CodeGenModule::getGenericBlockLiteralType() {
+const llvm::Type *BlockModule::getGenericBlockLiteralType() {
   if (GenericBlockLiteralType)
     return GenericBlockLiteralType;
 
@@ -352,8 +351,7 @@ CodeGenModule::getGenericBlockLiteralType() {
   return GenericBlockLiteralType;
 }
 
-const llvm::Type *
-CodeGenModule::getGenericExtendedBlockLiteralType() {
+const llvm::Type *BlockModule::getGenericExtendedBlockLiteralType() {
   if (GenericExtendedBlockLiteralType)
     return GenericExtendedBlockLiteralType;
 
index 4ba699b7dac75a14a414a94793bd0c8d0f2b7d94..a55c578c0e117c1bc40380cae893e482aaaf747d 100644 (file)
 #ifndef CLANG_CODEGEN_CGBLOCKS_H
 #define CLANG_CODEGEN_CGBLOCKS_H
 
+#include "CodeGenTypes.h"
+#include "clang/AST/Type.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/AST/Expr.h"
+#include "clang/AST/ExprCXX.h"
+#include "clang/AST/ExprObjC.h"
+
+#include <vector>
+#include <map>
+
+#include "CGBuilder.h"
+#include "CGCall.h"
+#include "CGValue.h"
+
+namespace llvm {
+  class Module;
+  class Constant;
+  class Function;
+  class GlobalValue;
+  class TargetData;
+  class FunctionType;
+  class Value;
+}
+
 namespace clang {
 
 namespace CodeGen {
@@ -31,6 +57,43 @@ public:
 };
 
 class BlockModule : public BlockBase {
+  ASTContext &Context;
+  llvm::Module &TheModule;
+  CodeGenTypes &Types;
+  
+  ASTContext &getContext() const { return Context; }
+  llvm::Module &getModule() const { return TheModule; }
+  CodeGenTypes &getTypes() { return Types; }
+public:
+  llvm::Constant *getNSConcreteGlobalBlock();
+  llvm::Constant *getNSConcreteStackBlock();
+  int getGlobalUniqueCount() { return ++Block.GlobalUniqueCount; }
+  const llvm::Type *getBlockDescriptorType();
+
+  const llvm::Type *getGenericBlockLiteralType();
+  const llvm::Type *getGenericExtendedBlockLiteralType();
+
+  /// NSConcreteGlobalBlock - Cached reference to the class pointer for global
+  /// blocks.
+  llvm::Constant *NSConcreteGlobalBlock;
+
+  /// NSConcreteStackBlock - Cached reference to the class poinnter for stack
+  /// blocks.
+  llvm::Constant *NSConcreteStackBlock;
+  
+  const llvm::Type *BlockDescriptorType;
+  const llvm::Type *GenericBlockLiteralType;
+  const llvm::Type *GenericExtendedBlockLiteralType;
+  struct {
+    int GlobalUniqueCount;
+  } Block;
+
+  BlockModule(ASTContext &C, llvm::Module &M, CodeGenTypes &T)
+    : Context(C), TheModule(M), Types(T), NSConcreteGlobalBlock(0),
+      NSConcreteStackBlock(0), BlockDescriptorType(0),
+      GenericBlockLiteralType(0)  {
+    Block.GlobalUniqueCount = 0;
+  }
 };
 
 class BlockFunction : public BlockBase {
index b724b72a391dd80741404dedb3af28597a27f83d..caf50d35b21900890e2119ef89711fa42c7da824 100644 (file)
@@ -62,7 +62,7 @@ namespace CodeGen {
 
 /// CodeGenFunction - This class organizes the per-function state that is used
 /// while generating LLVM code.
-  class CodeGenFunction : public BlockFunction {
+class CodeGenFunction : public BlockFunction {
   CodeGenFunction(const CodeGenFunction&); // DO NOT IMPLEMENT
   void operator=(const CodeGenFunction&);  // DO NOT IMPLEMENT
 public:
index 33aff2553fd0c599734de7721fc6ca6bf0c24cde..c0dba74ad025a331f4e827e96df43450a1220bcb 100644 (file)
@@ -34,10 +34,9 @@ using namespace CodeGen;
 CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO,
                              llvm::Module &M, const llvm::TargetData &TD,
                              Diagnostic &diags, bool GenerateDebugInfo)
-  : Context(C), Features(LO), TheModule(M), TheTargetData(TD), Diags(diags),
-    Types(C, M, TD), Runtime(0), MemCpyFn(0), MemMoveFn(0), MemSetFn(0),
-    CFConstantStringClassRef(0), NSConcreteGlobalBlock(0), 
-    NSConcreteStackBlock(0),BlockDescriptorType(0), GenericBlockLiteralType(0) {
+  : BlockModule(C, M, Types), Context(C), Features(LO), TheModule(M),
+    TheTargetData(TD), Diags(diags), Types(C, M, TD), Runtime(0),
+    MemCpyFn(0), MemMoveFn(0), MemSetFn(0), CFConstantStringClassRef(0) {
 
   if (Features.ObjC1) {
     if (Features.NeXTRuntime) {
@@ -50,8 +49,6 @@ CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO,
 
   // If debug info generation is enabled, create the CGDebugInfo object.
   DebugInfo = GenerateDebugInfo ? new CGDebugInfo(this) : 0;
-
-  Block.GlobalUniqueCount = 0;
 }
 
 CodeGenModule::~CodeGenModule() {
index 05591a5112c1ac78e24c67dafb4c7b762109ebda..d20d22bc09f99b604c06be8c8111f6bcb03db661 100644 (file)
@@ -63,7 +63,7 @@ namespace CodeGen {
 
 /// CodeGenModule - This class organizes the cross-function state that is used
 /// while generating LLVM code.
-  class CodeGenModule : public BlockModule {
+class CodeGenModule : public BlockModule {
   CodeGenModule(const CodeGenModule&);  // DO NOT IMPLEMENT
   void operator=(const CodeGenModule&); // DO NOT IMPLEMENT
 
@@ -140,21 +140,6 @@ namespace CodeGen {
   /// strings. This value has type int * but is actually an Obj-C class pointer.
   llvm::Constant *CFConstantStringClassRef;
 
-  /// NSConcreteGlobalBlock - Cached reference to the class pointer for global
-  /// blocks.
-  llvm::Constant *NSConcreteGlobalBlock;
-
-  /// NSConcreteStackBlock - Cached reference to the class poinnter for stack
-  /// blocks.
-  llvm::Constant *NSConcreteStackBlock;
-  
-  const llvm::Type *BlockDescriptorType;
-  const llvm::Type *GenericBlockLiteralType;
-  const llvm::Type *GenericExtendedBlockLiteralType;
-  struct {
-    int GlobalUniqueCount;
-  } Block;
-
   std::vector<llvm::Value *> BuiltinFunctions;
 public:
   CodeGenModule(ASTContext &C, const LangOptions &Features, llvm::Module &M,
@@ -166,14 +151,6 @@ public:
   /// Release - Finalize LLVM code generation.
   void Release();
 
-  llvm::Constant *getNSConcreteGlobalBlock();
-  llvm::Constant *getNSConcreteStackBlock();
-  int getGlobalUniqueCount() { return ++Block.GlobalUniqueCount; }
-  const llvm::Type *getBlockDescriptorType();
-
-  const llvm::Type *getGenericBlockLiteralType();
-  const llvm::Type *getGenericExtendedBlockLiteralType();
-
   /// getObjCRuntime() - Return a reference to the configured
   /// Objective-C runtime.
   CGObjCRuntime &getObjCRuntime() {