brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · e8c1004 Raw
137 lines · cpp
1//===- ExternalASTSource.cpp - Abstract External AST Interface ------------===//2//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-exception6//7//===----------------------------------------------------------------------===//8//9//  This file provides the default implementation of the ExternalASTSource10//  interface, which enables construction of AST nodes from some external11//  source.12//13//===----------------------------------------------------------------------===//14 15#include "clang/AST/ExternalASTSource.h"16#include "clang/AST/ASTContext.h"17#include "clang/AST/DeclarationName.h"18#include "clang/Basic/ASTSourceDescriptor.h"19#include "clang/Basic/IdentifierTable.h"20#include "clang/Basic/LLVM.h"21#include "llvm/Support/ErrorHandling.h"22#include <cstdint>23#include <optional>24 25using namespace clang;26 27char ExternalASTSource::ID;28 29ExternalASTSource::~ExternalASTSource() = default;30 31std::optional<ASTSourceDescriptor>32ExternalASTSource::getSourceDescriptor(unsigned ID) {33  return std::nullopt;34}35 36ExternalASTSource::ExtKind37ExternalASTSource::hasExternalDefinitions(const Decl *D) {38  return EK_ReplyHazy;39}40 41bool ExternalASTSource::wasThisDeclarationADefinition(const FunctionDecl *FD) {42  return false;43}44 45void ExternalASTSource::FindFileRegionDecls(FileID File, unsigned Offset,46                                            unsigned Length,47                                            SmallVectorImpl<Decl *> &Decls) {}48 49void ExternalASTSource::CompleteRedeclChain(const Decl *D) {}50 51void ExternalASTSource::CompleteType(TagDecl *Tag) {}52 53void ExternalASTSource::CompleteType(ObjCInterfaceDecl *Class) {}54 55void ExternalASTSource::ReadComments() {}56 57void ExternalASTSource::StartedDeserializing() {}58 59void ExternalASTSource::FinishedDeserializing() {}60 61void ExternalASTSource::StartTranslationUnit(ASTConsumer *Consumer) {}62 63void ExternalASTSource::PrintStats() {}64 65bool ExternalASTSource::layoutRecordType(66    const RecordDecl *Record, uint64_t &Size, uint64_t &Alignment,67    llvm::DenseMap<const FieldDecl *, uint64_t> &FieldOffsets,68    llvm::DenseMap<const CXXRecordDecl *, CharUnits> &BaseOffsets,69    llvm::DenseMap<const CXXRecordDecl *, CharUnits> &VirtualBaseOffsets) {70  return false;71}72 73Decl *ExternalASTSource::GetExternalDecl(GlobalDeclID ID) { return nullptr; }74 75Selector ExternalASTSource::GetExternalSelector(uint32_t ID) {76  return Selector();77}78 79uint32_t ExternalASTSource::GetNumExternalSelectors() {80   return 0;81}82 83Stmt *ExternalASTSource::GetExternalDeclStmt(uint64_t Offset) {84  return nullptr;85}86 87CXXCtorInitializer **88ExternalASTSource::GetExternalCXXCtorInitializers(uint64_t Offset) {89  return nullptr;90}91 92CXXBaseSpecifier *93ExternalASTSource::GetExternalCXXBaseSpecifiers(uint64_t Offset) {94  return nullptr;95}96 97bool ExternalASTSource::FindExternalVisibleDeclsByName(98    const DeclContext *DC, DeclarationName Name,99    const DeclContext *OriginalDC) {100  return false;101}102 103bool ExternalASTSource::LoadExternalSpecializations(const Decl *D, bool) {104  return false;105}106 107bool ExternalASTSource::LoadExternalSpecializations(108    const Decl *D, ArrayRef<TemplateArgument>) {109  return false;110}111 112void ExternalASTSource::completeVisibleDeclsMap(const DeclContext *DC) {}113 114void ExternalASTSource::FindExternalLexicalDecls(115    const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,116    SmallVectorImpl<Decl *> &Result) {}117 118void ExternalASTSource::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {}119 120uint32_t ExternalASTSource::incrementGeneration(ASTContext &C) {121  uint32_t OldGeneration = CurrentGeneration;122 123  // Make sure the generation of the topmost external source for the context is124  // incremented. That might not be us.125  auto *P = C.getExternalSource();126  if (P && P != this)127    CurrentGeneration = P->incrementGeneration(C);128  else {129    // FIXME: Only bump the generation counter if the current generation number130    // has been observed?131    if (!++CurrentGeneration)132      llvm::reportFatalUsageError("generation counter overflowed");133  }134 135  return OldGeneration;136}137