176d76d568942e08ee35762532a7090a596af906cSean Callanan//===- SMLoc.h - Source location for use with diagnostics -------*- C++ -*-===// 21ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// 31ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// The LLVM Compiler Infrastructure 41ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// 51ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// This file is distributed under the University of Illinois Open Source 61ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// License. See LICENSE.TXT for details. 71ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// 81ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan//===----------------------------------------------------------------------===// 91ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// 101ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// This file declares the SMLoc class. This class encapsulates a location in 111ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// source code for use in diagnostics. 121ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan// 131ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan//===----------------------------------------------------------------------===// 141ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan 15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_SUPPORT_SMLOC_H 16674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_SUPPORT_SMLOC_H 171ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan 18d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner#include <cassert> 19d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner 201ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanannamespace llvm { 211ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan 223ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// Represents a location in source code. 23d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbachclass SMLoc { 241ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan const char *Ptr; 251ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callananpublic: 26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SMLoc() : Ptr(nullptr) {} 27d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool isValid() const { return Ptr != nullptr; } 29d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 301ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan bool operator==(const SMLoc &RHS) const { return RHS.Ptr == Ptr; } 311ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan bool operator!=(const SMLoc &RHS) const { return RHS.Ptr != Ptr; } 32d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 331ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan const char *getPointer() const { return Ptr; } 34d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 351ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan static SMLoc getFromPointer(const char *Ptr) { 361ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan SMLoc L; 371ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan L.Ptr = Ptr; 381ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan return L; 391ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan } 401ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan}; 411ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan 423ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// Represents a range in source code. 433ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// 443ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// SMRange is implemented using a half-open range, as is the convention in C++. 453ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// In the string "abc", the range (1,3] represents the substring "bc", and the 463ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// range (2,2] represents an empty range between the characters "b" and "c". 47d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattnerclass SMRange { 48d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattnerpublic: 49d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner SMLoc Start, End; 50d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner 51d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner SMRange() {} 5218e2f6e94cf9dc48bfc6dfa3848971aa88e334daNick Kledzik SMRange(SMLoc St, SMLoc En) : Start(St), End(En) { 53d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner assert(Start.isValid() == End.isValid() && 54d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner "Start and end should either both be valid or both be invalid!"); 55d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner } 56d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner 57d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner bool isValid() const { return Start.isValid(); } 58d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner}; 59d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner 60d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner} // end namespace llvm 611ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan 6276d76d568942e08ee35762532a7090a596af906cSean Callanan#endif 632122f69c023f197435c289701ebe6cbec9ecb881Sean Callanan 64