[cfe-commits] r62375 - in /cfe/trunk: include/clang/Basic/SourceLocation.h lib/Basic/SourceLocation.cpp
Chris Lattner
sabre at nondot.org
Fri Jan 16 15:03:56 PST 2009
Author: lattner
Date: Fri Jan 16 17:03:56 2009
New Revision: 62375
URL: http://llvm.org/viewvc/llvm-project?rev=62375&view=rev
Log:
Make FullSourceLoc derive from SourceLocation instead of
containing one. Containment is generally better than derivation,
but in this case FullSourceLoc really 'isa' SourceLocation.
Modified:
cfe/trunk/include/clang/Basic/SourceLocation.h
cfe/trunk/lib/Basic/SourceLocation.cpp
Modified: cfe/trunk/include/clang/Basic/SourceLocation.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/SourceLocation.h?rev=62375&r1=62374&r2=62375&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/SourceLocation.h (original)
+++ cfe/trunk/include/clang/Basic/SourceLocation.h Fri Jan 16 17:03:56 2009
@@ -207,24 +207,18 @@
static SourceRange ReadVal(llvm::Deserializer& D);
};
-/// FullSourceLoc - A tuple containing both a SourceLocation
-/// and its associated SourceManager. Useful for argument passing to functions
-/// that expect both objects.
-class FullSourceLoc {
- SourceLocation Loc;
+/// FullSourceLoc - A SourceLocation and its associated SourceManager. Useful
+/// for argument passing to functions that expect both objects.
+class FullSourceLoc : public SourceLocation {
SourceManager* SrcMgr;
public:
// Creates a FullSourceLoc where isValid() returns false.
- explicit FullSourceLoc()
- : Loc(SourceLocation()), SrcMgr((SourceManager*) 0) {}
+ explicit FullSourceLoc() : SrcMgr((SourceManager*) 0) {}
- explicit FullSourceLoc(SourceLocation loc, SourceManager& smgr)
- : Loc(loc), SrcMgr(&smgr) {}
+ explicit FullSourceLoc(SourceLocation Loc, SourceManager &SM)
+ : SourceLocation(Loc), SrcMgr(&SM) {}
- bool isValid() const { return Loc.isValid(); }
- bool isInvalid() const { return Loc.isInvalid(); }
-
- SourceLocation getLocation() const { return Loc; }
+ SourceLocation getLocation() const { return *this; }
SourceManager& getManager() {
assert (SrcMgr && "SourceManager is NULL.");
@@ -258,19 +252,20 @@
bool isInSystemHeader() const;
- bool operator==(const FullSourceLoc& RHS) const {
- return SrcMgr == RHS.SrcMgr && Loc == RHS.Loc;
- }
-
- bool operator!=(const FullSourceLoc& RHS) const {
- return SrcMgr != RHS.SrcMgr || Loc != RHS.Loc;
- }
-
/// Prints information about this FullSourceLoc to stderr. Useful for
/// debugging.
void dump() const;
};
+inline bool operator==(const FullSourceLoc &LHS, const FullSourceLoc &RHS) {
+ return LHS.getRawEncoding() == RHS.getRawEncoding() &&
+ &LHS.getManager() == &RHS.getManager();
+}
+
+inline bool operator!=(const FullSourceLoc &LHS, const FullSourceLoc &RHS) {
+ return !(LHS == RHS);
+}
+
} // end namespace clang
#endif
Modified: cfe/trunk/lib/Basic/SourceLocation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/SourceLocation.cpp?rev=62375&r1=62374&r2=62375&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/SourceLocation.cpp (original)
+++ cfe/trunk/lib/Basic/SourceLocation.cpp Fri Jan 16 17:03:56 2009
@@ -38,74 +38,74 @@
}
FullSourceLoc FullSourceLoc::getInstantiationLoc() const {
- assert (isValid());
- return FullSourceLoc(SrcMgr->getInstantiationLoc(Loc), *SrcMgr);
+ assert(isValid());
+ return FullSourceLoc(SrcMgr->getInstantiationLoc(*this), *SrcMgr);
}
FullSourceLoc FullSourceLoc::getSpellingLoc() const {
assert(isValid());
- return FullSourceLoc(SrcMgr->getSpellingLoc(Loc), *SrcMgr);
+ return FullSourceLoc(SrcMgr->getSpellingLoc(*this), *SrcMgr);
}
FullSourceLoc FullSourceLoc::getIncludeLoc() const {
- assert (isValid());
- return FullSourceLoc(SrcMgr->getIncludeLoc(Loc), *SrcMgr);
+ assert(isValid());
+ return FullSourceLoc(SrcMgr->getIncludeLoc(*this), *SrcMgr);
}
unsigned FullSourceLoc::getLineNumber() const {
- assert (isValid());
- return SrcMgr->getLineNumber(Loc);
+ assert(isValid());
+ return SrcMgr->getLineNumber(*this);
}
unsigned FullSourceLoc::getColumnNumber() const {
- assert (isValid());
- return SrcMgr->getColumnNumber(Loc);
+ assert(isValid());
+ return SrcMgr->getColumnNumber(*this);
}
unsigned FullSourceLoc::getInstantiationLineNumber() const {
- assert (isValid());
- return SrcMgr->getInstantiationLineNumber(Loc);
+ assert(isValid());
+ return SrcMgr->getInstantiationLineNumber(*this);
}
unsigned FullSourceLoc::getInstantiationColumnNumber() const {
- assert (isValid());
- return SrcMgr->getInstantiationColumnNumber(Loc);
+ assert(isValid());
+ return SrcMgr->getInstantiationColumnNumber(*this);
}
unsigned FullSourceLoc::getSpellingLineNumber() const {
- assert (isValid());
- return SrcMgr->getSpellingLineNumber(Loc);
+ assert(isValid());
+ return SrcMgr->getSpellingLineNumber(*this);
}
unsigned FullSourceLoc::getSpellingColumnNumber() const {
- assert (isValid());
- return SrcMgr->getSpellingColumnNumber(Loc);
+ assert(isValid());
+ return SrcMgr->getSpellingColumnNumber(*this);
}
const char* FullSourceLoc::getSourceName() const {
- assert (isValid());
- return SrcMgr->getSourceName(Loc);
+ assert(isValid());
+ return SrcMgr->getSourceName(*this);
}
const FileEntry* FullSourceLoc::getFileEntryForLoc() const {
- assert (isValid());
- return SrcMgr->getFileEntryForLoc(Loc);
+ assert(isValid());
+ return SrcMgr->getFileEntryForLoc(*this);
}
bool FullSourceLoc::isInSystemHeader() const {
- assert (isValid());
- return SrcMgr->isInSystemHeader(Loc);
+ assert(isValid());
+ return SrcMgr->isInSystemHeader(*this);
}
const char *FullSourceLoc::getCharacterData() const {
assert(isValid());
- return SrcMgr->getCharacterData(Loc);
+ return SrcMgr->getCharacterData(*this);
}
const llvm::MemoryBuffer* FullSourceLoc::getBuffer() const {
- assert (isValid());
- return SrcMgr->getBuffer(Loc.getFileID());
+ assert(isValid());
+ return SrcMgr->getBuffer(getFileID());
}
void FullSourceLoc::dump() const {
@@ -114,7 +114,7 @@
return;
}
- if (Loc.isFileID()) {
+ if (isFileID()) {
// The instantiation and spelling pos is identical for file locs.
fprintf(stderr, "File Loc from '%s': %d: %d\n",
getSourceName(), getInstantiationLineNumber(),
More information about the cfe-commits
mailing list