diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index 4c9efc71bcff1e8448d17c23ea11326cbdab0ce3..4f4f464e110b93ad3ba8f2e75d7fe32f327c8fbb 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -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 diff --git a/lib/Parse/ParseAST.cpp b/lib/Parse/ParseAST.cpp index 7d68e1f37e407acf5b0db7c42e999943333bdd51..560febebc6fe78c89d562b4e583f8ea5e0a3f752 100644 --- a/lib/Parse/ParseAST.cpp +++ b/lib/Parse/ParseAST.cpp @@ -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()); diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index dfffe8150f2f9c1aa6ca7ec0b5496f24e5228efc..12cced13b6ecd6ff19924a828eda171fadd97e71 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -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); }