diff options
| author | Chris Lattner <sabre@nondot.org> | 2002-09-20 15:18:30 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2002-09-20 15:18:30 +0000 |
| commit | 7bd37ed1a627e481a38f720385317ce241518e7e (patch) | |
| tree | 0205ed2701547db2ecc195bd8241efc26fc409d1 /llvm/lib/CWriter/Writer.cpp | |
| parent | 32d812feff3cdb8b1c6b94154f3eae0b70a69ac2 (diff) | |
| download | bcm5719-llvm-7bd37ed1a627e481a38f720385317ce241518e7e.tar.gz bcm5719-llvm-7bd37ed1a627e481a38f720385317ce241518e7e.zip | |
* Add a couple of comments to the output c code
* _FIX_ infinite recursion problem, due to typedefs of a structure being
printed before the structure.
llvm-svn: 3859
Diffstat (limited to 'llvm/lib/CWriter/Writer.cpp')
| -rw-r--r-- | llvm/lib/CWriter/Writer.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/llvm/lib/CWriter/Writer.cpp b/llvm/lib/CWriter/Writer.cpp index 4b9b7cc5ddd..469a3a8f007 100644 --- a/llvm/lib/CWriter/Writer.cpp +++ b/llvm/lib/CWriter/Writer.cpp @@ -578,19 +578,25 @@ void CWriter::printSymbolTable(const SymbolTable &ST) { SymbolTable::type_const_iterator I = ST.type_begin(Type::TypeTy); SymbolTable::type_const_iterator End = ST.type_end(Type::TypeTy); - for (; I != End; ++I) { - const Value *V = I->second; - if (const Type *Ty = dyn_cast<Type>(V)) - if (const Type *STy = dyn_cast<StructType>(Ty)) { - string Name = "struct l_" + makeNameProper(I->first); - Out << Name << ";\n"; - TypeNames.insert(std::make_pair(STy, Name)); - } else { - string Name = "l_" + makeNameProper(I->first); - Out << "typedef "; - printType(Ty, Name, true); - Out << ";\n"; - } + // Print out forward declarations for structure types before anything else! + Out << "/* Structure forward decls */\n"; + for (; I != End; ++I) + if (const Type *STy = dyn_cast<StructType>(I->second)) { + string Name = "struct l_" + makeNameProper(I->first); + Out << Name << ";\n"; + TypeNames.insert(std::make_pair(STy, Name)); + } + + Out << "\n"; + + // Now we can print out typedefs... + Out << "/* Typedefs */\n"; + for (I = ST.type_begin(Type::TypeTy); I != End; ++I) { + const Type *Ty = cast<Type>(I->second); + string Name = "l_" + makeNameProper(I->first); + Out << "typedef "; + printType(Ty, Name, true); + Out << ";\n"; } Out << "\n"; @@ -601,6 +607,7 @@ void CWriter::printSymbolTable(const SymbolTable &ST) { // Loop over all structures then push them into the stack so they are // printed in the correct order. // + Out << "/* Structure contents */\n"; for (I = ST.type_begin(Type::TypeTy); I != End; ++I) if (const StructType *STy = dyn_cast<StructType>(I->second)) printContainedStructs(STy, StructPrinted); @@ -626,7 +633,7 @@ void CWriter::printContainedStructs(const Type *Ty, StructPrinted.insert(STy); string Name = TypeNames[STy]; printType(STy, Name, true); - Out << ";\n"; + Out << ";\n\n"; } // If it is an array, check contained types and continue |

