]> granicus.if.org Git - clang/commitdiff
Constify methods and reuse RecordOrganizer object.
authorDevang Patel <dpatel@apple.com>
Wed, 24 Oct 2007 00:56:23 +0000 (00:56 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 24 Oct 2007 00:56:23 +0000 (00:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43284 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CodeGenFunction.cpp
CodeGen/CodeGenFunction.h
CodeGen/CodeGenTypes.cpp
CodeGen/CodeGenTypes.h

index 07953483cdf0cb4ae40b51149b74b37988b43993..03d125f2c4235df2026cd778517e90e0467c2b92 100644 (file)
@@ -127,7 +127,7 @@ void CodeGenFunction::StartBlock(const char *N) {
 }
 
 /// getRecordLayoutInfo - Return record layout info.
-RecordLayoutInfo *CodeGenFunction::getRecordLayoutInfo(CodeGenTypes &CGT,
+const RecordLayoutInfo *CodeGenFunction::getRecordLayoutInfo(CodeGenTypes &CGT,
                                                        QualType RTy) {
   assert (isa<RecordType>(RTy) 
           && "Unexpected type. RecordType expected here.");
index c14687e07ef94935af02fec751c66b5fc8963ab3..5980e51f47bc1039d597761d84a6a6dd2418ea10 100644 (file)
@@ -299,7 +299,7 @@ public:
   void StartBlock(const char *N);
 
   /// getRecordLayoutInfo - Return record layout info.
-  RecordLayoutInfo *getRecordLayoutInfo(CodeGenTypes &CGT, QualType RTy);
+  const RecordLayoutInfo *getRecordLayoutInfo(CodeGenTypes &CGT, QualType RTy);
   //===--------------------------------------------------------------------===//
   //                            Declaration Emission
   //===--------------------------------------------------------------------===//
index 04394e38fee293949bbc643cbf11abb976129554..ec8b69ecb48a3b33e18dfa1da72ff76c35893519 100644 (file)
@@ -182,13 +182,13 @@ const llvm::Type *CodeGenTypes::ConvertType(QualType T) {
       RecordTypesToResolve[RD] = OpaqueTy;
 
       // Layout fields.
-      RecordOrganizer *RO = new RecordOrganizer();
+      RecordOrganizer RO;
       for (unsigned i = 0, e = RD->getNumMembers(); i != e; ++i)
-        RO->addField(RD->getMember(i));
-      RO->layoutFields(*this);
+        RO.addField(RD->getMember(i));
+      RO.layoutFields(*this);
 
       // Get llvm::StructType.
-      RecordLayoutInfo *RLI = new RecordLayoutInfo(RO);
+      RecordLayoutInfo *RLI = new RecordLayoutInfo(&RO);
       ResultType = RLI->getLLVMType();
       RecordLayouts[ResultType] = RLI;
 
@@ -199,7 +199,7 @@ const llvm::Type *CodeGenTypes::ConvertType(QualType T) {
               && "Expected RecordDecl in RecordTypesToResolve");
       RecordTypesToResolve.erase(OpaqueI);
 
-      delete RO;
+      RO.clear();
     } else if (TD->getKind() == Decl::Union) {
       const RecordDecl *RD = cast<const RecordDecl>(TD);
       // Just use the largest element of the union, breaking ties with the
@@ -260,13 +260,14 @@ unsigned CodeGenTypes::getLLVMFieldNo(const FieldDecl *FD) {
   return I->second;
 }
 
-  /// addFieldInfo - Assign field number to field FD.
+/// addFieldInfo - Assign field number to field FD.
 void CodeGenTypes::addFieldInfo(const FieldDecl *FD, unsigned No) {
   FieldInfo[FD] = No;
 }
 
 /// getRecordLayoutInfo - Return record layout info for the given llvm::Type.
-RecordLayoutInfo *CodeGenTypes::getRecordLayoutInfo(const llvm::Type* Ty) {
+const RecordLayoutInfo *
+CodeGenTypes::getRecordLayoutInfo(const llvm::Type* Ty) const {
   llvm::DenseMap<const llvm::Type*, RecordLayoutInfo *>::iterator I
     = RecordLayouts.find(Ty);
   assert (I != RecordLayouts.end() 
@@ -315,3 +316,9 @@ void RecordOrganizer::layoutFields(CodeGenTypes &CGT) {
   }
   STy = llvm::StructType::get(Fields);
 }
+
+/// Clear private data so that this object can be reused.
+void RecordOrganizer::clear() {
+  STy = NULL;
+  FieldDecls.clear();
+}
index 7ab3afe2e108865af0813ab789616592452663d9..f2f1bf37dc800169e4204b857f89e6763c806ace 100644 (file)
@@ -58,10 +58,12 @@ namespace CodeGen {
 
     /// getLLVMType - Return associated llvm struct type. This may be NULL
     /// if fields are not laid out.
-    llvm::Type *getLLVMType() {
+    llvm::Type *getLLVMType() const {
       return STy;
     }
 
+    /// Clear private data so that this object can be reused.
+    void clear();
   private:
     llvm::Type *STy;
     llvm::SmallVector<const FieldDecl *, 8> FieldDecls;
@@ -75,7 +77,7 @@ namespace CodeGen {
     RecordLayoutInfo(RecordOrganizer *RO);
 
     /// getLLVMType - Return llvm type associated with this record.
-    llvm::Type *getLLVMType() {
+    llvm::Type *getLLVMType() const {
       return STy;
     }
 
@@ -117,7 +119,7 @@ public:
   void DecodeArgumentTypes(const FunctionTypeProto &FTP, 
                            std::vector<const llvm::Type*> &ArgTys);
 
-  RecordLayoutInfo *getRecordLayoutInfo(const llvm::Type*);
+  const RecordLayoutInfo *getRecordLayoutInfo(const llvm::Type*) const;
   
   /// getLLVMFieldNo - Return llvm::StructType element number
   /// that corresponds to the field FD.