X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FSMLoc.h;h=d5b4c57a8fd6e8d547a3ab536d28dba6b82fc5f1;hb=00552e3875ee5f382db6c98286a241a7d0efe1b8;hp=fb86ee79b2e09b04896d66cae527306e312f288b;hpb=1ae486a4a06a5132c094b9ce66836ff081fea3a6;p=oota-llvm.git diff --git a/include/llvm/Support/SMLoc.h b/include/llvm/Support/SMLoc.h index fb86ee79b2e..d5b4c57a8fd 100644 --- a/include/llvm/Support/SMLoc.h +++ b/include/llvm/Support/SMLoc.h @@ -1,4 +1,4 @@ -//===- SMLoc.h - Manager for Source Buffers & Diagnostics -------*- C++ -*-===// +//===- SMLoc.h - Source location for use with diagnostics -------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -12,25 +12,26 @@ // //===----------------------------------------------------------------------===// -#ifndef SUPPORT_SMLOC_H -#define SUPPORT_SMLOC_H +#ifndef LLVM_SUPPORT_SMLOC_H +#define LLVM_SUPPORT_SMLOC_H + +#include namespace llvm { -// SMLoc - Represents a location in source code. -class SMLoc { +/// Represents a location in source code. +class SMLoc { const char *Ptr; public: - SMLoc() : Ptr(0) {} - SMLoc(const SMLoc &RHS) : Ptr(RHS.Ptr) {} - - bool isValid() const { return Ptr != 0; } - + SMLoc() : Ptr(nullptr) {} + + bool isValid() const { return Ptr != nullptr; } + bool operator==(const SMLoc &RHS) const { return RHS.Ptr == Ptr; } bool operator!=(const SMLoc &RHS) const { return RHS.Ptr != Ptr; } - + const char *getPointer() const { return Ptr; } - + static SMLoc getFromPointer(const char *Ptr) { SMLoc L; L.Ptr = Ptr; @@ -38,6 +39,25 @@ public: } }; -} +/// Represents a range in source code. +/// +/// SMRange is implemented using a half-open range, as is the convention in C++. +/// In the string "abc", the range (1,3] represents the substring "bc", and the +/// range (2,2] represents an empty range between the characters "b" and "c". +class SMRange { +public: + SMLoc Start, End; + + SMRange() {} + SMRange(SMLoc St, SMLoc En) : Start(St), End(En) { + assert(Start.isValid() == End.isValid() && + "Start and end should either both be valid or both be invalid!"); + } + + bool isValid() const { return Start.isValid(); } +}; + +} // end namespace llvm + +#endif -#endif \ No newline at end of file