summaryrefslogtreecommitdiffstats
path: root/clang/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-10-24 00:56:23 +0000
committerDevang Patel <dpatel@apple.com>2007-10-24 00:56:23 +0000
commitea37aa7d641fc62607742ec268d70de412178678 (patch)
tree2b0264aa362eb0279615895e4eabfacc257446e0 /clang/CodeGen/CodeGenTypes.cpp
parent790afb04440a7d73bab008cec8a3000c7f25d9ed (diff)
downloadbcm5719-llvm-ea37aa7d641fc62607742ec268d70de412178678.tar.gz
bcm5719-llvm-ea37aa7d641fc62607742ec268d70de412178678.zip
Constify methods and reuse RecordOrganizer object.
llvm-svn: 43284
Diffstat (limited to 'clang/CodeGen/CodeGenTypes.cpp')
-rw-r--r--clang/CodeGen/CodeGenTypes.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/clang/CodeGen/CodeGenTypes.cpp b/clang/CodeGen/CodeGenTypes.cpp
index 04394e38fee..ec8b69ecb48 100644
--- a/clang/CodeGen/CodeGenTypes.cpp
+++ b/clang/CodeGen/CodeGenTypes.cpp
@@ -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();
+}
OpenPOWER on IntegriCloud