SourceLocation.cpp revision eccf95e552de02358e391977821137c3ecdba0d3
1//==--- SourceLocation.cpp - Compact identifier for Source Files -*- 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 defines serialization methods for the SourceLocation class. 11// This file defines accessor methods for the FullSourceLoc class. 12// 13//===----------------------------------------------------------------------===// 14 15#include "clang/Basic/SourceLocation.h" 16#include "clang/Basic/SourceManager.h" 17#include "llvm/Bitcode/Serialize.h" 18#include "llvm/Bitcode/Deserialize.h" 19using namespace clang; 20 21void SourceLocation::Emit(llvm::Serializer& S) const { 22 S.EmitInt(getRawEncoding()); 23} 24 25SourceLocation SourceLocation::ReadVal(llvm::Deserializer& D) { 26 return SourceLocation::getFromRawEncoding(D.ReadInt()); 27} 28 29void SourceRange::Emit(llvm::Serializer& S) const { 30 B.Emit(S); 31 E.Emit(S); 32} 33 34SourceRange SourceRange::ReadVal(llvm::Deserializer& D) { 35 SourceLocation A = SourceLocation::ReadVal(D); 36 SourceLocation B = SourceLocation::ReadVal(D); 37 return SourceRange(A,B); 38} 39 40FullSourceLoc FullSourceLoc::getInstantiationLoc() const { 41 assert (isValid()); 42 return FullSourceLoc(SrcMgr->getInstantiationLoc(Loc), *SrcMgr); 43} 44 45FullSourceLoc FullSourceLoc::getSpellingLoc() const { 46 assert(isValid()); 47 return FullSourceLoc(SrcMgr->getSpellingLoc(Loc), *SrcMgr); 48} 49 50FullSourceLoc FullSourceLoc::getIncludeLoc() const { 51 assert (isValid()); 52 return FullSourceLoc(SrcMgr->getIncludeLoc(Loc), *SrcMgr); 53} 54 55unsigned FullSourceLoc::getLineNumber() const { 56 assert (isValid()); 57 return SrcMgr->getLineNumber(Loc); 58} 59 60unsigned FullSourceLoc::getColumnNumber() const { 61 assert (isValid()); 62 return SrcMgr->getColumnNumber(Loc); 63} 64 65 66unsigned FullSourceLoc::getInstantiationLineNumber() const { 67 assert (isValid()); 68 return SrcMgr->getInstantiationLineNumber(Loc); 69} 70 71unsigned FullSourceLoc::getInstantiationColumnNumber() const { 72 assert (isValid()); 73 return SrcMgr->getInstantiationColumnNumber(Loc); 74} 75 76unsigned FullSourceLoc::getSpellingLineNumber() const { 77 assert (isValid()); 78 return SrcMgr->getSpellingLineNumber(Loc); 79} 80 81unsigned FullSourceLoc::getSpellingColumnNumber() const { 82 assert (isValid()); 83 return SrcMgr->getSpellingColumnNumber(Loc); 84} 85 86const char* FullSourceLoc::getSourceName() const { 87 assert (isValid()); 88 return SrcMgr->getSourceName(Loc); 89} 90 91const FileEntry* FullSourceLoc::getFileEntryForLoc() const { 92 assert (isValid()); 93 return SrcMgr->getFileEntryForLoc(Loc); 94} 95 96bool FullSourceLoc::isInSystemHeader() const { 97 assert (isValid()); 98 return SrcMgr->isInSystemHeader(Loc); 99} 100 101 102const char * FullSourceLoc::getCharacterData() const { 103 assert (isValid()); 104 return SrcMgr->getCharacterData(Loc); 105} 106 107const llvm::MemoryBuffer* FullSourceLoc::getBuffer() const { 108 assert (isValid()); 109 return SrcMgr->getBuffer(Loc.getFileID()); 110} 111 112unsigned FullSourceLoc::getCanonicalFileID() const { 113 return SrcMgr->getCanonicalFileID(Loc); 114} 115 116void FullSourceLoc::dump() const { 117 if (!isValid()) { 118 fprintf(stderr, "Invalid Loc\n"); 119 return; 120 } 121 122 if (Loc.isFileID()) { 123 // The instantiation and spelling pos is identical for file locs. 124 fprintf(stderr, "File Loc from '%s': %d: %d\n", 125 getSourceName(), getInstantiationLineNumber(), 126 getInstantiationColumnNumber()); 127 } else { 128 fprintf(stderr, "Macro Loc (\n Spelling: "); 129 getSpellingLoc().dump(); 130 fprintf(stderr, " Instantiation: "); 131 getInstantiationLoc().dump(); 132 fprintf(stderr, ")\n"); 133 } 134} 135