xref: /openbsd-src/gnu/llvm/clang/lib/AST/ExternalASTSource.cpp (revision 12c855180aad702bbcca06e0398d774beeafb155)
1e5dd7070Spatrick //===- ExternalASTSource.cpp - Abstract External AST Interface ------------===//
2e5dd7070Spatrick //
3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e5dd7070Spatrick //
7e5dd7070Spatrick //===----------------------------------------------------------------------===//
8e5dd7070Spatrick //
9e5dd7070Spatrick //  This file provides the default implementation of the ExternalASTSource
10e5dd7070Spatrick //  interface, which enables construction of AST nodes from some external
11e5dd7070Spatrick //  source.
12e5dd7070Spatrick //
13e5dd7070Spatrick //===----------------------------------------------------------------------===//
14e5dd7070Spatrick 
15e5dd7070Spatrick #include "clang/AST/ExternalASTSource.h"
16e5dd7070Spatrick #include "clang/AST/ASTContext.h"
17e5dd7070Spatrick #include "clang/AST/DeclarationName.h"
18ec727ea7Spatrick #include "clang/Basic/FileManager.h"
19e5dd7070Spatrick #include "clang/Basic/IdentifierTable.h"
20e5dd7070Spatrick #include "clang/Basic/LLVM.h"
21e5dd7070Spatrick #include "clang/Basic/Module.h"
22ec727ea7Spatrick #include "clang/Basic/SourceManager.h"
23e5dd7070Spatrick #include "llvm/Support/ErrorHandling.h"
24e5dd7070Spatrick #include <cstdint>
25*12c85518Srobert #include <optional>
26e5dd7070Spatrick 
27e5dd7070Spatrick using namespace clang;
28e5dd7070Spatrick 
29e5dd7070Spatrick char ExternalASTSource::ID;
30e5dd7070Spatrick 
31e5dd7070Spatrick ExternalASTSource::~ExternalASTSource() = default;
32e5dd7070Spatrick 
33*12c85518Srobert std::optional<ASTSourceDescriptor>
getSourceDescriptor(unsigned ID)34e5dd7070Spatrick ExternalASTSource::getSourceDescriptor(unsigned ID) {
35*12c85518Srobert   return std::nullopt;
36e5dd7070Spatrick }
37e5dd7070Spatrick 
38e5dd7070Spatrick ExternalASTSource::ExtKind
hasExternalDefinitions(const Decl * D)39e5dd7070Spatrick ExternalASTSource::hasExternalDefinitions(const Decl *D) {
40e5dd7070Spatrick   return EK_ReplyHazy;
41e5dd7070Spatrick }
42e5dd7070Spatrick 
FindFileRegionDecls(FileID File,unsigned Offset,unsigned Length,SmallVectorImpl<Decl * > & Decls)43e5dd7070Spatrick void ExternalASTSource::FindFileRegionDecls(FileID File, unsigned Offset,
44e5dd7070Spatrick                                             unsigned Length,
45e5dd7070Spatrick                                             SmallVectorImpl<Decl *> &Decls) {}
46e5dd7070Spatrick 
CompleteRedeclChain(const Decl * D)47e5dd7070Spatrick void ExternalASTSource::CompleteRedeclChain(const Decl *D) {}
48e5dd7070Spatrick 
CompleteType(TagDecl * Tag)49e5dd7070Spatrick void ExternalASTSource::CompleteType(TagDecl *Tag) {}
50e5dd7070Spatrick 
CompleteType(ObjCInterfaceDecl * Class)51e5dd7070Spatrick void ExternalASTSource::CompleteType(ObjCInterfaceDecl *Class) {}
52e5dd7070Spatrick 
ReadComments()53e5dd7070Spatrick void ExternalASTSource::ReadComments() {}
54e5dd7070Spatrick 
StartedDeserializing()55e5dd7070Spatrick void ExternalASTSource::StartedDeserializing() {}
56e5dd7070Spatrick 
FinishedDeserializing()57e5dd7070Spatrick void ExternalASTSource::FinishedDeserializing() {}
58e5dd7070Spatrick 
StartTranslationUnit(ASTConsumer * Consumer)59e5dd7070Spatrick void ExternalASTSource::StartTranslationUnit(ASTConsumer *Consumer) {}
60e5dd7070Spatrick 
PrintStats()61e5dd7070Spatrick void ExternalASTSource::PrintStats() {}
62e5dd7070Spatrick 
layoutRecordType(const RecordDecl * Record,uint64_t & Size,uint64_t & Alignment,llvm::DenseMap<const FieldDecl *,uint64_t> & FieldOffsets,llvm::DenseMap<const CXXRecordDecl *,CharUnits> & BaseOffsets,llvm::DenseMap<const CXXRecordDecl *,CharUnits> & VirtualBaseOffsets)63e5dd7070Spatrick bool ExternalASTSource::layoutRecordType(
64e5dd7070Spatrick     const RecordDecl *Record, uint64_t &Size, uint64_t &Alignment,
65e5dd7070Spatrick     llvm::DenseMap<const FieldDecl *, uint64_t> &FieldOffsets,
66e5dd7070Spatrick     llvm::DenseMap<const CXXRecordDecl *, CharUnits> &BaseOffsets,
67e5dd7070Spatrick     llvm::DenseMap<const CXXRecordDecl *, CharUnits> &VirtualBaseOffsets) {
68e5dd7070Spatrick   return false;
69e5dd7070Spatrick }
70e5dd7070Spatrick 
GetExternalDecl(uint32_t ID)71e5dd7070Spatrick Decl *ExternalASTSource::GetExternalDecl(uint32_t ID) {
72e5dd7070Spatrick   return nullptr;
73e5dd7070Spatrick }
74e5dd7070Spatrick 
GetExternalSelector(uint32_t ID)75e5dd7070Spatrick Selector ExternalASTSource::GetExternalSelector(uint32_t ID) {
76e5dd7070Spatrick   return Selector();
77e5dd7070Spatrick }
78e5dd7070Spatrick 
GetNumExternalSelectors()79e5dd7070Spatrick uint32_t ExternalASTSource::GetNumExternalSelectors() {
80e5dd7070Spatrick    return 0;
81e5dd7070Spatrick }
82e5dd7070Spatrick 
GetExternalDeclStmt(uint64_t Offset)83e5dd7070Spatrick Stmt *ExternalASTSource::GetExternalDeclStmt(uint64_t Offset) {
84e5dd7070Spatrick   return nullptr;
85e5dd7070Spatrick }
86e5dd7070Spatrick 
87e5dd7070Spatrick CXXCtorInitializer **
GetExternalCXXCtorInitializers(uint64_t Offset)88e5dd7070Spatrick ExternalASTSource::GetExternalCXXCtorInitializers(uint64_t Offset) {
89e5dd7070Spatrick   return nullptr;
90e5dd7070Spatrick }
91e5dd7070Spatrick 
92e5dd7070Spatrick CXXBaseSpecifier *
GetExternalCXXBaseSpecifiers(uint64_t Offset)93e5dd7070Spatrick ExternalASTSource::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
94e5dd7070Spatrick   return nullptr;
95e5dd7070Spatrick }
96e5dd7070Spatrick 
97e5dd7070Spatrick bool
FindExternalVisibleDeclsByName(const DeclContext * DC,DeclarationName Name)98e5dd7070Spatrick ExternalASTSource::FindExternalVisibleDeclsByName(const DeclContext *DC,
99e5dd7070Spatrick                                                   DeclarationName Name) {
100e5dd7070Spatrick   return false;
101e5dd7070Spatrick }
102e5dd7070Spatrick 
completeVisibleDeclsMap(const DeclContext * DC)103e5dd7070Spatrick void ExternalASTSource::completeVisibleDeclsMap(const DeclContext *DC) {}
104e5dd7070Spatrick 
FindExternalLexicalDecls(const DeclContext * DC,llvm::function_ref<bool (Decl::Kind)> IsKindWeWant,SmallVectorImpl<Decl * > & Result)105e5dd7070Spatrick void ExternalASTSource::FindExternalLexicalDecls(
106e5dd7070Spatrick     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
107e5dd7070Spatrick     SmallVectorImpl<Decl *> &Result) {}
108e5dd7070Spatrick 
getMemoryBufferSizes(MemoryBufferSizes & sizes) const109e5dd7070Spatrick void ExternalASTSource::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {}
110e5dd7070Spatrick 
incrementGeneration(ASTContext & C)111e5dd7070Spatrick uint32_t ExternalASTSource::incrementGeneration(ASTContext &C) {
112e5dd7070Spatrick   uint32_t OldGeneration = CurrentGeneration;
113e5dd7070Spatrick 
114e5dd7070Spatrick   // Make sure the generation of the topmost external source for the context is
115e5dd7070Spatrick   // incremented. That might not be us.
116e5dd7070Spatrick   auto *P = C.getExternalSource();
117e5dd7070Spatrick   if (P && P != this)
118e5dd7070Spatrick     CurrentGeneration = P->incrementGeneration(C);
119e5dd7070Spatrick   else {
120e5dd7070Spatrick     // FIXME: Only bump the generation counter if the current generation number
121e5dd7070Spatrick     // has been observed?
122e5dd7070Spatrick     if (!++CurrentGeneration)
123e5dd7070Spatrick       llvm::report_fatal_error("generation counter overflowed", false);
124e5dd7070Spatrick   }
125e5dd7070Spatrick 
126e5dd7070Spatrick   return OldGeneration;
127e5dd7070Spatrick }
128