add some optional flags to affect the way advance works.
authorChris Lattner <sabre@nondot.org>
Sat, 19 Jan 2013 23:31:15 +0000 (23:31 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 19 Jan 2013 23:31:15 +0000 (23:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172928 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/BitstreamReader.h

index 2ca92081e3185547129f596075410eb26845facb..ae3d472c6b014f9f931f60783fbb44d0d49352a6 100644 (file)
@@ -269,14 +269,19 @@ public:
     return BitStream;
   }
 
+  /// Flags that modify the behavior of advance().
+  enum {
+    AF_DontPopBlockAtEnd = 1
+  };
   
   /// advance - Advance the current bitstream, returning the next entry in the
   /// stream.
-  BitstreamEntry advance() {
+  BitstreamEntry advance(unsigned Flags = 0) {
     while (1) {
       unsigned Code = ReadCode();
       if (Code == bitc::END_BLOCK) {
-        if (ReadBlockEnd())
+        // Pop the end of the block unless Flags tells us not to.
+        if (!(Flags & AF_DontPopBlockAtEnd) && ReadBlockEnd())
           return BitstreamEntry::getError();
         return BitstreamEntry::getEndBlock();
       }
@@ -297,10 +302,10 @@ public:
 
   /// advanceSkippingSubblocks - This is a convenience function for clients that
   /// don't expect any subblocks.  This just skips over them automatically.
-  BitstreamEntry advanceSkippingSubblocks() {
+  BitstreamEntry advanceSkippingSubblocks(unsigned Flags = 0) {
     while (1) {
       // If we found a normal entry, return it.
-      BitstreamEntry Entry = advance();
+      BitstreamEntry Entry = advance(Flags);
       if (Entry.Kind != BitstreamEntry::SubBlock)
         return Entry;