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();
 };