зеркало из https://github.com/microsoft/clang-1.git
change the interface to ReadStmt to force clients to pass a cursor in to read from.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70188 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
698f925ded
Коммит
52e97d1afc
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче