1 //===- SMLoc.h - Source location for use with diagnostics -------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares the SMLoc class. This class encapsulates a location in 11 // source code for use in diagnostics. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef SUPPORT_SMLOC_H 16 #define SUPPORT_SMLOC_H 17 18 #include <cassert> 19 20 namespace llvm { 21 22 /// SMLoc - Represents a location in source code. 23 class SMLoc { 24 const char *Ptr; 25 public: SMLoc()26 SMLoc() : Ptr(0) {} 27 isValid()28 bool isValid() const { return Ptr != 0; } 29 30 bool operator==(const SMLoc &RHS) const { return RHS.Ptr == Ptr; } 31 bool operator!=(const SMLoc &RHS) const { return RHS.Ptr != Ptr; } 32 getPointer()33 const char *getPointer() const { return Ptr; } 34 getFromPointer(const char * Ptr)35 static SMLoc getFromPointer(const char *Ptr) { 36 SMLoc L; 37 L.Ptr = Ptr; 38 return L; 39 } 40 }; 41 42 /// SMRange - Represents a range in source code. Note that unlike standard STL 43 /// ranges, the locations specified are considered to be *inclusive*. For 44 /// example, [X,X] *does* include X, it isn't an empty range. 45 class SMRange { 46 public: 47 SMLoc Start, End; 48 SMRange()49 SMRange() {} SMRange(SMLoc St,SMLoc En)50 SMRange(SMLoc St, SMLoc En) : Start(St), End(En) { 51 assert(Start.isValid() == End.isValid() && 52 "Start and end should either both be valid or both be invalid!"); 53 } 54 isValid()55 bool isValid() const { return Start.isValid(); } 56 }; 57 58 } // end namespace llvm 59 60 #endif 61 62