summaryrefslogtreecommitdiffstats
path: root/lib/Basic/SourceLocation.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-01-27 07:57:44 +0000
committerChris Lattner <sabre@nondot.org>2009-01-27 07:57:44 +0000
commitb9c3f966b103f7cfe8e5e60007c4c8b38f7298eb (patch)
treed10a3e7c028ae1ae13bef1b61f7da4aff02ef207 /lib/Basic/SourceLocation.cpp
parent52c29081281955d3db9e11d10573b2d38f709099 (diff)
Introduce a new PresumedLoc class to represent the concept of a location
as reported to the user and as manipulated by #line. This is what __FILE__, __INCLUDE_LEVEL__, diagnostics and other things should follow (but not dependency generation!). This patch also includes several cleanups along the way: - SourceLocation now has a dump method, and several other places that did similar things now use it. - I cleaned up some code in AnalysisConsumer, but it should probably be simplified further now that NamedDecl is better. - TextDiagnosticPrinter is now simplified and cleaned up a bit. This patch is a prerequisite for #line, but does not actually provide any #line functionality. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/SourceLocation.cpp')
-rw-r--r--lib/Basic/SourceLocation.cpp52
1 files changed, 23 insertions, 29 deletions
diff --git a/lib/Basic/SourceLocation.cpp b/lib/Basic/SourceLocation.cpp
index f0c8274de9..5d484721bd 100644
--- a/lib/Basic/SourceLocation.cpp
+++ b/lib/Basic/SourceLocation.cpp
@@ -26,6 +26,29 @@ SourceLocation SourceLocation::ReadVal(llvm::Deserializer& D) {
return SourceLocation::getFromRawEncoding(D.ReadInt());
}
+void SourceLocation::dump(const SourceManager &SM) const {
+ if (!isValid()) {
+ fprintf(stderr, "<invalid loc>");
+ return;
+ }
+
+ if (isFileID()) {
+ PresumedLoc PLoc = SM.getPresumedLoc(*this);
+
+ // The instantiation and spelling pos is identical for file locs.
+ fprintf(stderr, "%s:%d:%d",
+ PLoc.getFilename(), PLoc.getLine(), PLoc.getColumn());
+ return;
+ }
+
+ SM.getInstantiationLoc(*this).dump(SM);
+
+ fprintf(stderr, " <Spelling=");
+ SM.getSpellingLoc(*this).dump(SM);
+ fprintf(stderr, ">");
+}
+
+
void SourceRange::Emit(llvm::Serializer& S) const {
B.Emit(S);
E.Emit(S);
@@ -53,11 +76,6 @@ FullSourceLoc FullSourceLoc::getSpellingLoc() const {
return FullSourceLoc(SrcMgr->getSpellingLoc(*this), *SrcMgr);
}
-FullSourceLoc FullSourceLoc::getIncludeLoc() const {
- assert(isValid());
- return FullSourceLoc(SrcMgr->getIncludeLoc(*this), *SrcMgr);
-}
-
unsigned FullSourceLoc::getLineNumber() const {
assert(isValid());
return SrcMgr->getLineNumber(*this);
@@ -89,11 +107,6 @@ unsigned FullSourceLoc::getSpellingColumnNumber() const {
return SrcMgr->getSpellingColumnNumber(*this);
}
-const char* FullSourceLoc::getSourceName() const {
- assert(isValid());
- return SrcMgr->getSourceName(*this);
-}
-
bool FullSourceLoc::isInSystemHeader() const {
assert(isValid());
return SrcMgr->isInSystemHeader(*this);
@@ -109,22 +122,3 @@ const llvm::MemoryBuffer* FullSourceLoc::getBuffer() const {
return SrcMgr->getBuffer(SrcMgr->getFileID(*this));
}
-void FullSourceLoc::dump() const {
- if (!isValid()) {
- fprintf(stderr, "Invalid Loc\n");
- return;
- }
-
- if (isFileID()) {
- // The instantiation and spelling pos is identical for file locs.
- fprintf(stderr, "File Loc from '%s': %d: %d\n",
- getSourceName(), getInstantiationLineNumber(),
- getInstantiationColumnNumber());
- } else {
- fprintf(stderr, "Macro Loc (\n Spelling: ");
- getSpellingLoc().dump();
- fprintf(stderr, " Instantiation: ");
- getInstantiationLoc().dump();
- fprintf(stderr, ")\n");
- }
-}