[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