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