aboutsummaryrefslogtreecommitdiff
path: root/include/clang/Basic/SourceLocation.h
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 /include/clang/Basic/SourceLocation.h
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 'include/clang/Basic/SourceLocation.h')
-rw-r--r--include/clang/Basic/SourceLocation.h57
1 files changed, 48 insertions, 9 deletions
diff --git a/include/clang/Basic/SourceLocation.h b/include/clang/Basic/SourceLocation.h
index 6da9a87ee3..31fbc0218b 100644
--- a/include/clang/Basic/SourceLocation.h
+++ b/include/clang/Basic/SourceLocation.h
@@ -133,6 +133,8 @@ public:
/// ReadVal - Read a SourceLocation object from Bitcode.
static SourceLocation ReadVal(llvm::Deserializer& D);
+
+ void dump(const SourceManager &SM) const;
};
inline bool operator==(const SourceLocation &LHS, const SourceLocation &RHS) {
@@ -182,13 +184,13 @@ public:
explicit FullSourceLoc(SourceLocation Loc, SourceManager &SM)
: SourceLocation(Loc), SrcMgr(&SM) {}
- SourceManager& getManager() {
- assert (SrcMgr && "SourceManager is NULL.");
+ SourceManager &getManager() {
+ assert(SrcMgr && "SourceManager is NULL.");
return *SrcMgr;
}
- const SourceManager& getManager() const {
- assert (SrcMgr && "SourceManager is NULL.");
+ const SourceManager &getManager() const {
+ assert(SrcMgr && "SourceManager is NULL.");
return *SrcMgr;
}
@@ -196,7 +198,6 @@ public:
FullSourceLoc getInstantiationLoc() const;
FullSourceLoc getSpellingLoc() const;
- FullSourceLoc getIncludeLoc() const;
unsigned getLineNumber() const;
unsigned getColumnNumber() const;
@@ -211,13 +212,11 @@ public:
const llvm::MemoryBuffer* getBuffer() const;
- const char* getSourceName() const;
-
bool isInSystemHeader() const;
/// Prints information about this FullSourceLoc to stderr. Useful for
/// debugging.
- void dump() const;
+ void dump() const { SourceLocation::dump(*SrcMgr); }
friend inline bool
operator==(const FullSourceLoc &LHS, const FullSourceLoc &RHS) {
@@ -231,7 +230,47 @@ public:
}
};
-
+
+/// PresumedLoc - This class represents an unpacked "presumed" location which
+/// can be presented to the user. A 'presumed' location can be modified by
+/// #line and GNU line marker directives and is always the instantiation point
+/// of a normal location.
+///
+/// You can get a PresumedLoc from a SourceLocation with SourceManager.
+class PresumedLoc {
+ const char *Filename;
+ unsigned Line, Col;
+ SourceLocation IncludeLoc;
+public:
+ PresumedLoc() : Filename(0) {}
+ PresumedLoc(const char *FN, unsigned Ln, unsigned Co, SourceLocation IL)
+ : Filename(FN), Line(Ln), Col(Co), IncludeLoc(IL) {
+ }
+
+ /// isInvalid - Return true if this object is invalid or uninitialized. This
+ /// occurs when created with invalid source locations or when walking off
+ /// the top of a #include stack.
+ bool isInvalid() const { return Filename == 0; }
+ bool isValid() const { return Filename != 0; }
+
+ /// getFilename - Return the presumed filename of this location. This can be
+ /// affected by #line etc.
+ const char *getFilename() const { return Filename; }
+
+ /// getLine - Return the presumed line number of this location. This can be
+ /// affected by #line etc.
+ unsigned getLine() const { return Line; }
+
+ /// getColumn - Return the presumed column number of this location. This can
+ /// not be affected by #line, but is packaged here for convenience.
+ unsigned getColumn() const { return Col; }
+
+ /// getIncludeLoc - Return the presumed include location of this location.
+ /// This can be affected by GNU linemarker directives.
+ SourceLocation getIncludeLoc() const { return IncludeLoc; }
+};
+
+
} // end namespace clang
namespace llvm {