implement materializeModule, force deallocation of vector memory when we
are done with them, start implementing ParseFunctionBody
llvm-svn: 36617
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.h b/llvm/lib/Bitcode/Reader/BitcodeReader.h
index 0e40769..65c495b 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.h
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.h
@@ -44,7 +44,7 @@
void pop_back() { Uses.pop_back(); --NumOperands; }
bool empty() const { return NumOperands == 0; }
void shrinkTo(unsigned N) {
- assert(N < NumOperands && "Invalid shrinkTo request!");
+ assert(N <= NumOperands && "Invalid shrinkTo request!");
Uses.resize(N);
NumOperands = N;
}
@@ -69,6 +69,10 @@
std::vector<std::pair<GlobalVariable*, unsigned> > GlobalInits;
std::vector<std::pair<GlobalAlias*, unsigned> > AliasInits;
+ /// FunctionBBs - While parsing a function body, this is a list of the basic
+ /// blocks for the function.
+ std::vector<BasicBlock*> FunctionBBs;
+
// When reading the module header, this list is populated with functions that
// have bodies later in the file.
std::vector<Function*> FunctionsWithBodies;
@@ -96,13 +100,7 @@
}
virtual bool materializeFunction(Function *F, std::string *ErrInfo = 0);
-
- virtual Module *materializeModule(std::string *ErrInfo = 0) {
- // FIXME: TODO
- //if (ParseAllFunctionBodies(ErrMsg))
- // return 0;
- return TheModule;
- }
+ virtual Module *materializeModule(std::string *ErrInfo = 0);
bool Error(const char *Str) {
ErrorString = Str;
@@ -121,7 +119,8 @@
bool ParseTypeSymbolTable();
bool ParseValueSymbolTable();
bool ParseConstants();
- bool ParseFunction();
+ bool RememberAndSkipFunctionBody();
+ bool ParseFunctionBody(Function *F);
bool ResolveGlobalAndAliasInits();
};