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; 25f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 261ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callananpublic: 27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SMLoc() : Ptr(nullptr) {} 28d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool isValid() const { return Ptr != nullptr; } 30d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 311ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan bool operator==(const SMLoc &RHS) const { return RHS.Ptr == Ptr; } 321ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan bool operator!=(const SMLoc &RHS) const { return RHS.Ptr != Ptr; } 33d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 341ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan const char *getPointer() const { return Ptr; } 35d33b276bcb1efd4fa14c32fec68ae24baf30eb28Jim Grosbach 361ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan static SMLoc getFromPointer(const char *Ptr) { 371ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan SMLoc L; 381ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan L.Ptr = Ptr; 391ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan return L; 401ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan } 411ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan}; 421ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan 433ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// Represents a range in source code. 443ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// 453ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// SMRange is implemented using a half-open range, as is the convention in C++. 463ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// In the string "abc", the range (1,3] represents the substring "bc", and the 473ebe59c892051375623fea55e977ff559fdb3323Jordan Rose/// range (2,2] represents an empty range between the characters "b" and "c". 48d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattnerclass SMRange { 49d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattnerpublic: 50d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner SMLoc Start, End; 51d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner 52d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner SMRange() {} 5318e2f6e94cf9dc48bfc6dfa3848971aa88e334daNick Kledzik SMRange(SMLoc St, SMLoc En) : Start(St), End(En) { 54d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner assert(Start.isValid() == End.isValid() && 55d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner "Start and end should either both be valid or both be invalid!"); 56d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner } 57f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 58d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner bool isValid() const { return Start.isValid(); } 59d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner}; 60f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar 61d8b7aa26134d2abee777f745c32005e63dea2455Chris Lattner} // end namespace llvm 621ae486a4a06a5132c094b9ce66836ff081fea3a6Sean Callanan 6376d76d568942e08ee35762532a7090a596af906cSean Callanan#endif 64