mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-29 06:26:08 +00:00
Move PrettyStackTraceParserEntry to ParseAST.cpp
r128056 moved PrettyStackTraceParserEntry construction from Parser.h to ParseAST.cpp, so there's no need to keep this class in a header. llvm-svn: 168731
This commit is contained in:
parent
3430c25ccc
commit
d0b91de8c6
@ -44,15 +44,6 @@ namespace clang {
|
||||
class PoisonSEHIdentifiersRAIIObject;
|
||||
class VersionTuple;
|
||||
|
||||
/// PrettyStackTraceParserEntry - If a crash happens while the parser is active,
|
||||
/// an entry is printed for it.
|
||||
class PrettyStackTraceParserEntry : public llvm::PrettyStackTraceEntry {
|
||||
const Parser &P;
|
||||
public:
|
||||
PrettyStackTraceParserEntry(const Parser &p) : P(p) {}
|
||||
virtual void print(raw_ostream &OS) const;
|
||||
};
|
||||
|
||||
/// PrecedenceLevels - These are precedences for the binary/ternary
|
||||
/// operators in the C99 grammar. These have been named to relate
|
||||
/// with the C99 grammar productions. Low precedences numbers bind
|
||||
|
@ -29,6 +29,40 @@
|
||||
|
||||
using namespace clang;
|
||||
|
||||
namespace {
|
||||
|
||||
/// If a crash happens while the parser is active, an entry is printed for it.
|
||||
class PrettyStackTraceParserEntry : public llvm::PrettyStackTraceEntry {
|
||||
const Parser &P;
|
||||
public:
|
||||
PrettyStackTraceParserEntry(const Parser &p) : P(p) {}
|
||||
virtual void print(raw_ostream &OS) const;
|
||||
};
|
||||
|
||||
/// If a crash happens while the parser is active, print out a line indicating
|
||||
/// what the current token is.
|
||||
void PrettyStackTraceParserEntry::print(raw_ostream &OS) const {
|
||||
const Token &Tok = P.getCurToken();
|
||||
if (Tok.is(tok::eof)) {
|
||||
OS << "<eof> parser at end of file\n";
|
||||
return;
|
||||
}
|
||||
|
||||
if (Tok.getLocation().isInvalid()) {
|
||||
OS << "<unknown> parser at unknown location\n";
|
||||
return;
|
||||
}
|
||||
|
||||
const Preprocessor &PP = P.getPreprocessor();
|
||||
Tok.getLocation().print(OS, PP.getSourceManager());
|
||||
if (Tok.isAnnotation())
|
||||
OS << ": at annotation token \n";
|
||||
else
|
||||
OS << ": current parser token '" << PP.getSpelling(Tok) << "'\n";
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Public interface to the file
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -43,9 +77,7 @@ void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer,
|
||||
CodeCompleteConsumer *CompletionConsumer,
|
||||
bool SkipFunctionBodies) {
|
||||
|
||||
OwningPtr<Sema> S(new Sema(PP, Ctx, *Consumer,
|
||||
TUKind,
|
||||
CompletionConsumer));
|
||||
OwningPtr<Sema> S(new Sema(PP, Ctx, *Consumer, TUKind, CompletionConsumer));
|
||||
|
||||
// Recover resources if we crash before exiting this method.
|
||||
llvm::CrashRecoveryContextCleanupRegistrar<Sema> CleanupSema(S.get());
|
||||
|
@ -103,29 +103,6 @@ Parser::Parser(Preprocessor &pp, Sema &actions, bool skipFunctionBodies)
|
||||
PP.setCodeCompletionHandler(*this);
|
||||
}
|
||||
|
||||
/// If a crash happens while the parser is active, print out a line indicating
|
||||
/// what the current token is.
|
||||
void PrettyStackTraceParserEntry::print(raw_ostream &OS) const {
|
||||
const Token &Tok = P.getCurToken();
|
||||
if (Tok.is(tok::eof)) {
|
||||
OS << "<eof> parser at end of file\n";
|
||||
return;
|
||||
}
|
||||
|
||||
if (Tok.getLocation().isInvalid()) {
|
||||
OS << "<unknown> parser at unknown location\n";
|
||||
return;
|
||||
}
|
||||
|
||||
const Preprocessor &PP = P.getPreprocessor();
|
||||
Tok.getLocation().print(OS, PP.getSourceManager());
|
||||
if (Tok.isAnnotation())
|
||||
OS << ": at annotation token \n";
|
||||
else
|
||||
OS << ": current parser token '" << PP.getSpelling(Tok) << "'\n";
|
||||
}
|
||||
|
||||
|
||||
DiagnosticBuilder Parser::Diag(SourceLocation Loc, unsigned DiagID) {
|
||||
return Diags.Report(Loc, DiagID);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user