Made Deserializer a friend class of BitstreamReader.

Moved some of the logic in BitstreamReader::ExitBlock into a utility function
BitstreamReader::PopBlockScope. The latter is a private method. It will also
be called by Deserializer to manipulate the current "block scope."


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43972 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2007-11-10 02:00:38 +00:00
parent 2ba49a942e
commit 13faf5c13c

View File

@ -20,9 +20,12 @@
namespace llvm {
class Deserializer;
class BitstreamReader {
const unsigned char *NextChar;
const unsigned char *LastChar;
friend class Deserializer;
/// CurWord - This is the current data we have pulled from the stream but have
/// not returned to the client.
@ -269,8 +272,8 @@ public:
return false;
}
/// EnterSubBlock - Having read the ENTER_SUBBLOCK abbrevid, read and enter
/// the block, returning the BlockID of the block we just entered.
/// EnterSubBlock - Having read the ENTER_SUBBLOCK abbrevid, enter
/// the block, and return true if the block is valid.
bool EnterSubBlock(unsigned BlockID, unsigned *NumWordsP = 0) {
// Save the current block's state on BlockScope.
BlockScope.push_back(Block(CurCodeSize));
@ -303,6 +306,13 @@ public:
// Block tail:
// [END_BLOCK, <align4bytes>]
SkipToWord();
PopBlockScope();
return false;
}
private:
void PopBlockScope() {
CurCodeSize = BlockScope.back().PrevCodeSize;
// Delete abbrevs from popped scope.
@ -311,9 +321,8 @@ public:
BlockScope.back().PrevAbbrevs.swap(CurAbbrevs);
BlockScope.pop_back();
return false;
}
}
//===--------------------------------------------------------------------===//
// Record Processing
//===--------------------------------------------------------------------===//