Added class FullContextSourceLocation: a tuple class that

contains both a SourceLocation and its associated
SourceManager. This class is useful for argument passing to
functions that expect both objects.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44942 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2007-12-12 18:16:46 +00:00
Родитель 609e4c72d9
Коммит a9793ed6a7
1 изменённых файлов: 31 добавлений и 0 удалений

Просмотреть файл

@ -19,6 +19,8 @@
namespace clang {
class SourceManager;
/// SourceLocation - This is a carefully crafted 32-bit identifier that encodes
/// a full include stack, line and column number information for a position in
/// an input translation unit.
@ -199,6 +201,35 @@ public:
static SourceRange ReadVal(llvm::Deserializer& D);
};
/// FullContextSourceLocation - A tuple containing both a SourceLocation
/// and its associated SourceManager. Useful for argument passing to functions
/// that expect both objects.
class FullContextSourceLocation {
SourceLocation Loc;
SourceManager* SrcMgr;
public:
explicit FullContextSourceLocation(SourceLocation loc)
: Loc(loc), SrcMgr(NULL) {}
explicit FullContextSourceLocation(SourceLocation loc, SourceManager& smgr)
: Loc(loc), SrcMgr(&smgr) {}
bool isValid() { return Loc.isValid(); }
SourceLocation getSourceLocation() const { return Loc; }
operator SourceLocation() const { return Loc; }
SourceManager& getSourceManager() {
assert (SrcMgr && "SourceManager is NULL.");
return *SrcMgr;
}
const SourceManager& getSourceManager() const {
assert (SrcMgr && "SourceManager is NULL.");
return *SrcMgr;
}
};
} // end namespace clang
#endif