annotate clang/lib/Index/FileIndexRecord.cpp @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents c4bab56944e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===--- FileIndexRecord.cpp - Index data per file --------------*- C++ -*-===//
anatofuz
parents:
diff changeset
2 //
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
150
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 #include "FileIndexRecord.h"
anatofuz
parents:
diff changeset
10 #include "clang/AST/ASTContext.h"
anatofuz
parents:
diff changeset
11 #include "clang/AST/DeclTemplate.h"
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
12 #include "clang/Basic/SourceManager.h"
150
anatofuz
parents:
diff changeset
13 #include "llvm/ADT/SmallString.h"
anatofuz
parents:
diff changeset
14 #include "llvm/Support/Path.h"
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 using namespace clang;
anatofuz
parents:
diff changeset
17 using namespace clang::index;
anatofuz
parents:
diff changeset
18
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
19 ArrayRef<DeclOccurrence>
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
20 FileIndexRecord::getDeclOccurrencesSortedByOffset() const {
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
21 if (!IsSorted) {
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
22 llvm::stable_sort(Decls,
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
23 [](const DeclOccurrence &A, const DeclOccurrence &B) {
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
24 return A.Offset < B.Offset;
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
25 });
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
26 IsSorted = true;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
27 }
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
28 return Decls;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
29 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
30
150
anatofuz
parents:
diff changeset
31 void FileIndexRecord::addDeclOccurence(SymbolRoleSet Roles, unsigned Offset,
anatofuz
parents:
diff changeset
32 const Decl *D,
anatofuz
parents:
diff changeset
33 ArrayRef<SymbolRelation> Relations) {
anatofuz
parents:
diff changeset
34 assert(D->isCanonicalDecl() &&
anatofuz
parents:
diff changeset
35 "Occurrences should be associated with their canonical decl");
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
36 IsSorted = false;
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
37 Decls.emplace_back(Roles, Offset, D, Relations);
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
38 }
150
anatofuz
parents:
diff changeset
39
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
40 void FileIndexRecord::addMacroOccurence(SymbolRoleSet Roles, unsigned Offset,
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
41 const IdentifierInfo *Name,
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
42 const MacroInfo *MI) {
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
43 IsSorted = false;
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
44 Decls.emplace_back(Roles, Offset, Name, MI);
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
45 }
150
anatofuz
parents:
diff changeset
46
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
47 void FileIndexRecord::removeHeaderGuardMacros() {
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
48 llvm::erase_if(Decls, [](const DeclOccurrence &D) {
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
49 if (const auto *MI = D.DeclOrMacro.dyn_cast<const MacroInfo *>())
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
50 return MI->isUsedForHeaderGuard();
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
51 return false;
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
52 });
150
anatofuz
parents:
diff changeset
53 }
anatofuz
parents:
diff changeset
54
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
55 void FileIndexRecord::print(llvm::raw_ostream &OS, SourceManager &SM) const {
150
anatofuz
parents:
diff changeset
56 OS << "DECLS BEGIN ---\n";
anatofuz
parents:
diff changeset
57 for (auto &DclInfo : Decls) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
58 if (const auto *D = DclInfo.DeclOrMacro.dyn_cast<const Decl *>()) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
59 SourceLocation Loc = SM.getFileLoc(D->getLocation());
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
60 PresumedLoc PLoc = SM.getPresumedLoc(Loc);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
61 OS << llvm::sys::path::filename(PLoc.getFilename()) << ':'
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
62 << PLoc.getLine() << ':' << PLoc.getColumn();
150
anatofuz
parents:
diff changeset
63
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
64 if (const auto *ND = dyn_cast<NamedDecl>(D)) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
65 OS << ' ' << ND->getDeclName();
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
66 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
67 } else {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
68 const auto *MI = DclInfo.DeclOrMacro.get<const MacroInfo *>();
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
69 SourceLocation Loc = SM.getFileLoc(MI->getDefinitionLoc());
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
70 PresumedLoc PLoc = SM.getPresumedLoc(Loc);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
71 OS << llvm::sys::path::filename(PLoc.getFilename()) << ':'
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
72 << PLoc.getLine() << ':' << PLoc.getColumn();
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
73 OS << ' ' << DclInfo.MacroName->getName();
150
anatofuz
parents:
diff changeset
74 }
anatofuz
parents:
diff changeset
75
anatofuz
parents:
diff changeset
76 OS << '\n';
anatofuz
parents:
diff changeset
77 }
anatofuz
parents:
diff changeset
78 OS << "DECLS END ---\n";
anatofuz
parents:
diff changeset
79 }