From: Chris Lattner Date: Sun, 9 Dec 2007 20:31:55 +0000 (+0000) Subject: Add dumping support for locations, make -dumptokens print out the location X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c3d8d57b010e2ed15a2a7685d5761db14f5d2252;p=clang Add dumping support for locations, make -dumptokens print out the location info of each token. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44741 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Lex/Preprocessor.cpp b/Lex/Preprocessor.cpp index a685b0b27b..d2630584a5 100644 --- a/Lex/Preprocessor.cpp +++ b/Lex/Preprocessor.cpp @@ -133,6 +133,7 @@ void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const { << getSpelling(Tok) << "'"; if (!DumpFlags) return; + std::cerr << "\t"; if (Tok.isAtStartOfLine()) std::cerr << " [StartOfLine]"; @@ -145,6 +146,24 @@ void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const { std::cerr << " [UnClean='" << std::string(Start, Start+Tok.getLength()) << "']"; } + + std::cerr << "\tLoc=<"; + DumpLocation(Tok.getLocation()); + std::cerr << ">"; +} + +void Preprocessor::DumpLocation(SourceLocation Loc) const { + SourceLocation LogLoc = SourceMgr.getLogicalLoc(Loc); + std::cerr << SourceMgr.getSourceName(LogLoc) << ':' + << SourceMgr.getLineNumber(LogLoc) << ':' + << SourceMgr.getLineNumber(LogLoc); + + SourceLocation PhysLoc = SourceMgr.getPhysicalLoc(Loc); + if (PhysLoc != LogLoc) { + std::cerr << " "; + } } void Preprocessor::DumpMacro(const MacroInfo &MI) const { @@ -1140,7 +1159,7 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) { Tok.setLocation(CreateString(TmpBuffer, Len, Tok.getLocation())); } else { assert(0 && "Unknown identifier!"); - } + } } //===----------------------------------------------------------------------===// diff --git a/include/clang/Lex/Preprocessor.h b/include/clang/Lex/Preprocessor.h index 707a93243f..98b946ab54 100644 --- a/include/clang/Lex/Preprocessor.h +++ b/include/clang/Lex/Preprocessor.h @@ -310,6 +310,7 @@ public: /// DumpToken - Print the token to stderr, used for debugging. /// void DumpToken(const Token &Tok, bool DumpFlags = false) const; + void DumpLocation(SourceLocation Loc) const; void DumpMacro(const MacroInfo &MI) const; /// AdvanceToTokenCharacter - Given a location that specifies the start of a