summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/CBackend/Writer.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-01-20 18:57:03 +0000
committerChris Lattner <sabre@nondot.org>2006-01-20 18:57:03 +0000
commiteca87342b496c1f35537595bdc7f6d8092f0718a (patch)
tree1dac2fab39a9a61ed0d46003cee9111663a6ef77 /llvm/lib/Target/CBackend/Writer.cpp
parent335b46dd203a734c0f025bea9a197942909c1806 (diff)
downloadbcm5719-llvm-eca87342b496c1f35537595bdc7f6d8092f0718a.tar.gz
bcm5719-llvm-eca87342b496c1f35537595bdc7f6d8092f0718a.zip
Simplify CWriter::printContainedStructs, also allowing it to work with
PackedTypes as a side-effect. llvm-svn: 25485
Diffstat (limited to 'llvm/lib/Target/CBackend/Writer.cpp')
-rw-r--r--llvm/lib/Target/CBackend/Writer.cpp29
1 files changed, 11 insertions, 18 deletions
diff --git a/llvm/lib/Target/CBackend/Writer.cpp b/llvm/lib/Target/CBackend/Writer.cpp
index dd455821689..87a575b813c 100644
--- a/llvm/lib/Target/CBackend/Writer.cpp
+++ b/llvm/lib/Target/CBackend/Writer.cpp
@@ -1037,29 +1037,22 @@ void CWriter::printModuleTypes(const SymbolTable &ST) {
// this one depends on.
void CWriter::printContainedStructs(const Type *Ty,
std::set<const StructType*> &StructPrinted){
+ // Don't walk through pointers.
+ if (isa<PointerType>(Ty) || Ty->isPrimitiveType()) return;
+
+ // Print all contained types first.
+ for (Type::subtype_iterator I = Ty->subtype_begin(),
+ E = Ty->subtype_end(); I != E; ++I)
+ printContainedStructs(*I, StructPrinted);
+
if (const StructType *STy = dyn_cast<StructType>(Ty)) {
- //Check to see if we have already printed this struct
- if (StructPrinted.count(STy) == 0) {
- // Print all contained types first...
- for (StructType::element_iterator I = STy->element_begin(),
- E = STy->element_end(); I != E; ++I) {
- const Type *Ty1 = I->get();
- if (isa<StructType>(Ty1) || isa<ArrayType>(Ty1))
- printContainedStructs(*I, StructPrinted);
- }
-
- //Print structure type out..
- StructPrinted.insert(STy);
+ // Check to see if we have already printed this struct.
+ if (StructPrinted.insert(STy).second) {
+ // Print structure type out.
std::string Name = TypeNames[STy];
printType(Out, STy, Name, true);
Out << ";\n\n";
}
-
- // If it is an array, check contained types and continue
- } else if (const ArrayType *ATy = dyn_cast<ArrayType>(Ty)){
- const Type *Ty1 = ATy->getElementType();
- if (isa<StructType>(Ty1) || isa<ArrayType>(Ty1))
- printContainedStructs(Ty1, StructPrinted);
}
}
OpenPOWER on IntegriCloud