1 //===- ModuleFile.cpp - Module description --------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file implements the ModuleFile class, which describes a module that
10 // has been loaded from an AST file.
12 //===----------------------------------------------------------------------===//
14 #include "clang/Serialization/ModuleFile.h"
15 #include "ASTReaderInternals.h"
16 #include "clang/Serialization/ContinuousRangeMap.h"
17 #include "llvm/ADT/StringRef.h"
18 #include "llvm/Support/Compiler.h"
19 #include "llvm/Support/raw_ostream.h"
21 using namespace clang
;
22 using namespace serialization
;
23 using namespace reader
;
25 ModuleFile::~ModuleFile() {
26 delete static_cast<ASTIdentifierLookupTable
*>(IdentifierLookupTable
);
27 delete static_cast<HeaderFileInfoLookupTable
*>(HeaderFileInfoTable
);
28 delete static_cast<ASTSelectorLookupTable
*>(SelectorLookupTable
);
31 template<typename Key
, typename Offset
, unsigned InitialCapacity
>
33 dumpLocalRemap(StringRef Name
,
34 const ContinuousRangeMap
<Key
, Offset
, InitialCapacity
> &Map
) {
35 if (Map
.begin() == Map
.end())
38 using MapType
= ContinuousRangeMap
<Key
, Offset
, InitialCapacity
>;
40 llvm::errs() << " " << Name
<< ":\n";
41 for (typename
MapType::const_iterator I
= Map
.begin(), IEnd
= Map
.end();
43 llvm::errs() << " " << I
->first
<< " -> " << I
->second
<< "\n";
47 LLVM_DUMP_METHOD
void ModuleFile::dump() {
48 llvm::errs() << "\nModule: " << FileName
<< "\n";
49 if (!Imports
.empty()) {
50 llvm::errs() << " Imports: ";
51 for (unsigned I
= 0, N
= Imports
.size(); I
!= N
; ++I
) {
54 llvm::errs() << Imports
[I
]->FileName
;
60 llvm::errs() << " Base source location offset: " << SLocEntryBaseOffset
62 dumpLocalRemap("Source location offset local -> global map", SLocRemap
);
64 llvm::errs() << " Base identifier ID: " << BaseIdentifierID
<< '\n'
65 << " Number of identifiers: " << LocalNumIdentifiers
<< '\n';
66 dumpLocalRemap("Identifier ID local -> global map", IdentifierRemap
);
68 llvm::errs() << " Base macro ID: " << BaseMacroID
<< '\n'
69 << " Number of macros: " << LocalNumMacros
<< '\n';
70 dumpLocalRemap("Macro ID local -> global map", MacroRemap
);
72 llvm::errs() << " Base submodule ID: " << BaseSubmoduleID
<< '\n'
73 << " Number of submodules: " << LocalNumSubmodules
<< '\n';
74 dumpLocalRemap("Submodule ID local -> global map", SubmoduleRemap
);
76 llvm::errs() << " Base selector ID: " << BaseSelectorID
<< '\n'
77 << " Number of selectors: " << LocalNumSelectors
<< '\n';
78 dumpLocalRemap("Selector ID local -> global map", SelectorRemap
);
80 llvm::errs() << " Base preprocessed entity ID: " << BasePreprocessedEntityID
82 << " Number of preprocessed entities: "
83 << NumPreprocessedEntities
<< '\n';
84 dumpLocalRemap("Preprocessed entity ID local -> global map",
85 PreprocessedEntityRemap
);
87 llvm::errs() << " Base type index: " << BaseTypeIndex
<< '\n'
88 << " Number of types: " << LocalNumTypes
<< '\n';
89 dumpLocalRemap("Type index local -> global map", TypeRemap
);
91 llvm::errs() << " Base decl ID: " << BaseDeclID
<< '\n'
92 << " Number of decls: " << LocalNumDecls
<< '\n';
93 dumpLocalRemap("Decl ID local -> global map", DeclRemap
);