]> granicus.if.org Git - clang/commitdiff
change the interface to ReadStmt to force clients to pass a cursor in to read from.
authorChris Lattner <sabre@nondot.org>
Mon, 27 Apr 2009 05:41:06 +0000 (05:41 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 27 Apr 2009 05:41:06 +0000 (05:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70188 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Frontend/PCHReader.h
lib/Frontend/PCHReader.cpp
lib/Frontend/PCHReaderDecl.cpp
lib/Frontend/PCHReaderStmt.cpp

index eb24a536f32b2c0c3e550cbf3e6f3e703bfbfeab..b9edd8ff83861203f98f826fbfcaaa5e525da3a8 100644 (file)
@@ -88,7 +88,9 @@ private:
 
   /// \brief The bitstream reader from which we'll read the PCH file.
   llvm::BitstreamReader StreamFile;
+public:
   llvm::BitstreamCursor Stream;
+private:
 
   /// DeclsCursor - This is a cursor to the start of the DECLS_BLOCK block.  It
   /// has read all the abbreviations at the start of the block and is ready to
@@ -405,8 +407,8 @@ public:
   /// \brief Reads an expression from the current stream position.
   Expr *ReadExpr();
 
-  /// \brief Reads a statement from the current stream position.
-  Stmt *ReadStmt();
+  /// \brief Reads a statement from the specified cursor.
+  Stmt *ReadStmt(llvm::BitstreamCursor &Cursor);
 
   /// \brief Reads the macro record located at the given offset.
   void ReadMacroRecord(uint64_t Offset);
index 0eb3128f5b6c736dc80a0d51ea4e3f41253cb937..4ea1e05b8873e674c9c8a498d599e28c5d50fba3 100644 (file)
@@ -67,7 +67,7 @@ PCHReader::PCHReader(Preprocessor &PP, ASTContext &Context)
 PCHReader::~PCHReader() {}
 
 Expr *PCHReader::ReadExpr() {
-  return dyn_cast_or_null<Expr>(ReadStmt());
+  return dyn_cast_or_null<Expr>(ReadStmt(Stream));
 }
 
 
@@ -1337,7 +1337,7 @@ Stmt *PCHReader::GetStmt(uint64_t Offset) {
   SavedStreamPosition SavedPosition(Stream);
 
   Stream.JumpToBit(Offset);
-  return ReadStmt();
+  return ReadStmt(Stream);
 }
 
 bool PCHReader::ReadDeclsLexicallyInContext(DeclContext *DC,
index 36ec7b9dbfdbcaca25e38991a0085980f477f3ca..74b489512d8b1f819014114a2e5e3822ae2300b2 100644 (file)
@@ -186,7 +186,7 @@ void PCHDeclReader::VisitObjCMethodDecl(ObjCMethodDecl *MD) {
   if (Record[Idx++]) {
     // In practice, this won't be executed (since method definitions
     // don't occur in header files).
-    MD->setBody(Reader.ReadStmt());
+    MD->setBody(Reader.ReadStmt(Reader.Stream));
     MD->setSelfDecl(cast<ImplicitParamDecl>(Reader.GetDecl(Record[Idx++])));
     MD->setCmdDecl(cast<ImplicitParamDecl>(Reader.GetDecl(Record[Idx++])));
   }
@@ -384,7 +384,7 @@ void PCHDeclReader::VisitFileScopeAsmDecl(FileScopeAsmDecl *AD) {
 
 void PCHDeclReader::VisitBlockDecl(BlockDecl *BD) {
   VisitDecl(BD);
-  BD->setBody(cast_or_null<CompoundStmt>(Reader.ReadStmt()));
+  BD->setBody(cast_or_null<CompoundStmt>(Reader.ReadStmt(Reader.Stream)));
   unsigned NumParams = Record[Idx++];
   llvm::SmallVector<ParmVarDecl *, 16> Params;
   Params.reserve(NumParams);
index 7767bb59a46dd2788dad6d85c7d13f2643e3c236..f38af9b3c80f15569e310fc5683daaa6b6c612a4 100644 (file)
@@ -812,14 +812,14 @@ unsigned PCHStmtReader::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) {
 }
 
 
-Stmt *PCHReader::ReadStmt() {
-  // Within the bitstream, expressions are stored in Reverse Polish
-  // Notation, with each of the subexpressions preceding the
-  // expression they are stored in. To evaluate expressions, we
-  // continue reading expressions and placing them on the stack, with
-  // expressions having operands removing those operands from the
-  // stack. Evaluation terminates when we see a STMT_STOP record, and
-  // the single remaining expression on the stack is our result.
+// Within the bitstream, expressions are stored in Reverse Polish
+// Notation, with each of the subexpressions preceding the
+// expression they are stored in. To evaluate expressions, we
+// continue reading expressions and placing them on the stack, with
+// expressions having operands removing those operands from the
+// stack. Evaluation terminates when we see a STMT_STOP record, and
+// the single remaining expression on the stack is our result.
+Stmt *PCHReader::ReadStmt(llvm::BitstreamCursor &Cursor) {
   RecordData Record;
   unsigned Idx;
   llvm::SmallVector<Stmt *, 16> StmtStack;
@@ -827,9 +827,9 @@ Stmt *PCHReader::ReadStmt() {
   Stmt::EmptyShell Empty;
 
   while (true) {
-    unsigned Code = Stream.ReadCode();
+    unsigned Code = Cursor.ReadCode();
     if (Code == llvm::bitc::END_BLOCK) {
-      if (Stream.ReadBlockEnd()) {
+      if (Cursor.ReadBlockEnd()) {
         Error("Error at end of Source Manager block");
         return 0;
       }
@@ -838,8 +838,8 @@ Stmt *PCHReader::ReadStmt() {
 
     if (Code == llvm::bitc::ENTER_SUBBLOCK) {
       // No known subblocks, always skip them.
-      Stream.ReadSubBlockID();
-      if (Stream.SkipBlock()) {
+      Cursor.ReadSubBlockID();
+      if (Cursor.SkipBlock()) {
         Error("Malformed block record");
         return 0;
       }
@@ -847,7 +847,7 @@ Stmt *PCHReader::ReadStmt() {
     }
 
     if (Code == llvm::bitc::DEFINE_ABBREV) {
-      Stream.ReadAbbrevRecord();
+      Cursor.ReadAbbrevRecord();
       continue;
     }
 
@@ -855,7 +855,7 @@ Stmt *PCHReader::ReadStmt() {
     Idx = 0;
     Record.clear();
     bool Finished = false;
-    switch ((pch::StmtCode)Stream.ReadRecord(Code, Record)) {
+    switch ((pch::StmtCode)Cursor.ReadRecord(Code, Record)) {
     case pch::STMT_STOP:
       Finished = true;
       break;