SourceLocation.cpp revision 198092
1118824Sharti//==--- SourceLocation.cpp - Compact identifier for Source Files -*- C++ -*-==// 2118824Sharti// 3118824Sharti// The LLVM Compiler Infrastructure 4118824Sharti// 5118824Sharti// This file is distributed under the University of Illinois Open Source 6118824Sharti// License. See LICENSE.TXT for details. 7118824Sharti// 8118824Sharti//===----------------------------------------------------------------------===// 9118824Sharti// 10118824Sharti// This file defines accessor methods for the FullSourceLoc class. 11118824Sharti// 12118824Sharti//===----------------------------------------------------------------------===// 13118824Sharti 14118824Sharti#include "clang/Basic/SourceLocation.h" 15118824Sharti#include "clang/Basic/PrettyStackTrace.h" 16118824Sharti#include "clang/Basic/SourceManager.h" 17118824Sharti#include "llvm/Support/MemoryBuffer.h" 18118824Sharti#include "llvm/Support/raw_ostream.h" 19118824Sharti#include <cstdio> 20118824Shartiusing namespace clang; 21118824Sharti 22118824Sharti//===----------------------------------------------------------------------===// 23118824Sharti// PrettyStackTraceLoc 24118824Sharti//===----------------------------------------------------------------------===// 25118824Sharti 26118824Shartivoid PrettyStackTraceLoc::print(llvm::raw_ostream &OS) const { 27118824Sharti if (Loc.isValid()) { 28118824Sharti Loc.print(OS, SM); 29118824Sharti OS << ": "; 30118824Sharti } 31118824Sharti OS << Message << '\n'; 32118824Sharti} 33118824Sharti 34118824Sharti//===----------------------------------------------------------------------===// 35118824Sharti// SourceLocation 36118824Sharti//===----------------------------------------------------------------------===// 37118824Sharti 38132493Shartivoid SourceLocation::print(llvm::raw_ostream &OS, const SourceManager &SM)const{ 39132493Sharti if (!isValid()) { 40132493Sharti OS << "<invalid loc>"; 41270824Sngie return; 42133565Sharti } 43133565Sharti 44133565Sharti if (isFileID()) { 45133565Sharti PresumedLoc PLoc = SM.getPresumedLoc(*this); 46133565Sharti // The instantiation and spelling pos is identical for file locs. 47118824Sharti OS << PLoc.getFilename() << ':' << PLoc.getLine() 48118824Sharti << ':' << PLoc.getColumn(); 49118824Sharti return; 50118824Sharti } 51227081Sed 52118824Sharti SM.getInstantiationLoc(*this).print(OS, SM); 53118824Sharti 54118824Sharti OS << " <Spelling="; 55118824Sharti SM.getSpellingLoc(*this).print(OS, SM); 56118824Sharti OS << '>'; 57118824Sharti} 58118824Sharti 59118824Shartivoid SourceLocation::dump(const SourceManager &SM) const { 60118824Sharti print(llvm::errs(), SM); 61118824Sharti} 62118824Sharti 63118824Sharti//===----------------------------------------------------------------------===// 64133565Sharti// FullSourceLoc 65118824Sharti//===----------------------------------------------------------------------===// 66118824Sharti 67118824ShartiFileID FullSourceLoc::getFileID() const { 68118824Sharti assert(isValid()); 69118824Sharti return SrcMgr->getFileID(*this); 70118824Sharti} 71118824Sharti 72118824Sharti 73133565ShartiFullSourceLoc FullSourceLoc::getInstantiationLoc() const { 74133565Sharti assert(isValid()); 75133565Sharti return FullSourceLoc(SrcMgr->getInstantiationLoc(*this), *SrcMgr); 76133565Sharti} 77118824Sharti 78118824ShartiFullSourceLoc FullSourceLoc::getSpellingLoc() const { 79118824Sharti assert(isValid()); 80118824Sharti return FullSourceLoc(SrcMgr->getSpellingLoc(*this), *SrcMgr); 81118824Sharti} 82118824Sharti 83118824Shartiunsigned FullSourceLoc::getInstantiationLineNumber() const { 84132493Sharti assert(isValid()); 85132493Sharti return SrcMgr->getInstantiationLineNumber(*this); 86132493Sharti} 87132493Sharti 88132493Shartiunsigned FullSourceLoc::getInstantiationColumnNumber() const { 89132493Sharti assert(isValid()); 90132493Sharti return SrcMgr->getInstantiationColumnNumber(*this); 91132493Sharti} 92132493Sharti 93132493Shartiunsigned FullSourceLoc::getSpellingLineNumber() const { 94132493Sharti assert(isValid()); 95132493Sharti return SrcMgr->getSpellingLineNumber(*this); 96132493Sharti} 97132493Sharti 98132493Shartiunsigned FullSourceLoc::getSpellingColumnNumber() const { 99132493Sharti assert(isValid()); 100132493Sharti return SrcMgr->getSpellingColumnNumber(*this); 101132493Sharti} 102132493Sharti 103132493Shartibool FullSourceLoc::isInSystemHeader() const { 104132493Sharti assert(isValid()); 105132493Sharti return SrcMgr->isInSystemHeader(*this); 106132493Sharti} 107132493Sharti 108132493Sharticonst char *FullSourceLoc::getCharacterData() const { 109132493Sharti assert(isValid()); 110132493Sharti return SrcMgr->getCharacterData(*this); 111132493Sharti} 112132493Sharti 113132493Sharticonst llvm::MemoryBuffer* FullSourceLoc::getBuffer() const { 114132493Sharti assert(isValid()); 115132493Sharti return SrcMgr->getBuffer(SrcMgr->getFileID(*this)); 116132493Sharti} 117132493Sharti 118132493Shartistd::pair<const char*, const char*> FullSourceLoc::getBufferData() const { 119132493Sharti const llvm::MemoryBuffer *Buf = getBuffer(); 120132493Sharti return std::make_pair(Buf->getBufferStart(), Buf->getBufferEnd()); 121132493Sharti} 122132493Sharti 123132493Shartistd::pair<FileID, unsigned> FullSourceLoc::getDecomposedLoc() const { 124132493Sharti return SrcMgr->getDecomposedLoc(*this); 125132493Sharti} 126132493Sharti