Index: include/clang/Basic/SourceLocation.h =================================================================== --- include/clang/Basic/SourceLocation.h +++ include/clang/Basic/SourceLocation.h @@ -220,6 +220,10 @@ bool operator!=(const SourceRange &X) const { return B != X.B || E != X.E; } + + void print(raw_ostream &OS, const SourceManager &SM) const; + std::string printToString(const SourceManager &SM) const; + void dump(const SourceManager &SM) const; }; /// Represents a character-granular source range. Index: lib/Basic/SourceLocation.cpp =================================================================== --- lib/Basic/SourceLocation.cpp +++ lib/Basic/SourceLocation.cpp @@ -80,6 +80,26 @@ llvm::errs() << '\n'; } +LLVM_DUMP_METHOD void SourceRange::dump(const SourceManager &SM) const { + print(llvm::errs(), SM); +} + +void SourceRange::print(raw_ostream &OS, const SourceManager &SM) const { + OS << '['; + B.print(OS, SM); + OS << ",\n "; + E.print(OS, SM); + OS << "]\n"; +} + +LLVM_DUMP_METHOD std::string +SourceRange::printToString(const SourceManager &SM) const { + std::string S; + llvm::raw_string_ostream OS(S); + print(OS, SM); + return OS.str(); +} + //===----------------------------------------------------------------------===// // FullSourceLoc //===----------------------------------------------------------------------===//