forked from OSchip/llvm-project
139 lines
4.2 KiB
C++
139 lines
4.2 KiB
C++
//===- ExternalASTSource.cpp - Abstract External AST Interface ------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file provides the default implementation of the ExternalASTSource
|
|
// interface, which enables construction of AST nodes from some external
|
|
// source.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang/AST/ExternalASTSource.h"
|
|
#include "clang/AST/ASTContext.h"
|
|
#include "clang/AST/DeclarationName.h"
|
|
#include "clang/Basic/IdentifierTable.h"
|
|
#include "clang/Basic/LLVM.h"
|
|
#include "clang/Basic/Module.h"
|
|
#include "llvm/ADT/None.h"
|
|
#include "llvm/Support/ErrorHandling.h"
|
|
#include <cstdint>
|
|
|
|
using namespace clang;
|
|
|
|
ExternalASTSource::~ExternalASTSource() = default;
|
|
|
|
llvm::Optional<ExternalASTSource::ASTSourceDescriptor>
|
|
ExternalASTSource::getSourceDescriptor(unsigned ID) {
|
|
return None;
|
|
}
|
|
|
|
ExternalASTSource::ExtKind
|
|
ExternalASTSource::hasExternalDefinitions(const Decl *D) {
|
|
return EK_ReplyHazy;
|
|
}
|
|
|
|
ExternalASTSource::ASTSourceDescriptor::ASTSourceDescriptor(const Module &M)
|
|
: Signature(M.Signature), ClangModule(&M) {
|
|
if (M.Directory)
|
|
Path = M.Directory->getName();
|
|
if (auto *File = M.getASTFile())
|
|
ASTFile = File->getName();
|
|
}
|
|
|
|
std::string ExternalASTSource::ASTSourceDescriptor::getModuleName() const {
|
|
if (ClangModule)
|
|
return ClangModule->Name;
|
|
else
|
|
return PCHModuleName;
|
|
}
|
|
|
|
void ExternalASTSource::FindFileRegionDecls(FileID File, unsigned Offset,
|
|
unsigned Length,
|
|
SmallVectorImpl<Decl *> &Decls) {}
|
|
|
|
void ExternalASTSource::CompleteRedeclChain(const Decl *D) {}
|
|
|
|
void ExternalASTSource::CompleteType(TagDecl *Tag) {}
|
|
|
|
void ExternalASTSource::CompleteType(ObjCInterfaceDecl *Class) {}
|
|
|
|
void ExternalASTSource::ReadComments() {}
|
|
|
|
void ExternalASTSource::StartedDeserializing() {}
|
|
|
|
void ExternalASTSource::FinishedDeserializing() {}
|
|
|
|
void ExternalASTSource::StartTranslationUnit(ASTConsumer *Consumer) {}
|
|
|
|
void ExternalASTSource::PrintStats() {}
|
|
|
|
bool ExternalASTSource::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) {
|
|
return false;
|
|
}
|
|
|
|
Decl *ExternalASTSource::GetExternalDecl(uint32_t ID) {
|
|
return nullptr;
|
|
}
|
|
|
|
Selector ExternalASTSource::GetExternalSelector(uint32_t ID) {
|
|
return Selector();
|
|
}
|
|
|
|
uint32_t ExternalASTSource::GetNumExternalSelectors() {
|
|
return 0;
|
|
}
|
|
|
|
Stmt *ExternalASTSource::GetExternalDeclStmt(uint64_t Offset) {
|
|
return nullptr;
|
|
}
|
|
|
|
CXXCtorInitializer **
|
|
ExternalASTSource::GetExternalCXXCtorInitializers(uint64_t Offset) {
|
|
return nullptr;
|
|
}
|
|
|
|
CXXBaseSpecifier *
|
|
ExternalASTSource::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
|
|
return nullptr;
|
|
}
|
|
|
|
bool
|
|
ExternalASTSource::FindExternalVisibleDeclsByName(const DeclContext *DC,
|
|
DeclarationName Name) {
|
|
return false;
|
|
}
|
|
|
|
void ExternalASTSource::completeVisibleDeclsMap(const DeclContext *DC) {}
|
|
|
|
void ExternalASTSource::FindExternalLexicalDecls(
|
|
const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
|
|
SmallVectorImpl<Decl *> &Result) {}
|
|
|
|
void ExternalASTSource::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {}
|
|
|
|
uint32_t ExternalASTSource::incrementGeneration(ASTContext &C) {
|
|
uint32_t OldGeneration = CurrentGeneration;
|
|
|
|
// Make sure the generation of the topmost external source for the context is
|
|
// incremented. That might not be us.
|
|
auto *P = C.getExternalSource();
|
|
if (P && P != this)
|
|
CurrentGeneration = P->incrementGeneration(C);
|
|
else {
|
|
// FIXME: Only bump the generation counter if the current generation number
|
|
// has been observed?
|
|
if (!++CurrentGeneration)
|
|
llvm::report_fatal_error("generation counter overflowed", false);
|
|
}
|
|
|
|
return OldGeneration;
|
|
}
|