1221339Sdim//===- ExternalASTSource.cpp - Abstract External AST Interface --*- C++ -*-===// 2221339Sdim// 3221339Sdim// The LLVM Compiler Infrastructure 4221339Sdim// 5221339Sdim// This file is distributed under the University of Illinois Open Source 6221339Sdim// License. See LICENSE.TXT for details. 7221339Sdim// 8221339Sdim//===----------------------------------------------------------------------===// 9221339Sdim// 10221339Sdim// This file provides the default implementation of the ExternalASTSource 11221339Sdim// interface, which enables construction of AST nodes from some external 12221339Sdim// source. 13221339Sdim// 14221339Sdim//===----------------------------------------------------------------------===// 15221339Sdim 16221339Sdim#include "clang/AST/ExternalASTSource.h" 17276479Sdim#include "clang/AST/ASTContext.h" 18221339Sdim#include "clang/AST/DeclarationName.h" 19296417Sdim#include "clang/Basic/Module.h" 20276479Sdim#include "llvm/Support/ErrorHandling.h" 21221339Sdim 22221339Sdimusing namespace clang; 23221339Sdim 24221339SdimExternalASTSource::~ExternalASTSource() { } 25221339Sdim 26288943Sdimllvm::Optional<ExternalASTSource::ASTSourceDescriptor> 27288943SdimExternalASTSource::getSourceDescriptor(unsigned ID) { 28288943Sdim return None; 29288943Sdim} 30288943Sdim 31296417SdimExternalASTSource::ASTSourceDescriptor::ASTSourceDescriptor(const Module &M) 32296417Sdim : Signature(M.Signature), ClangModule(&M) { 33296417Sdim if (M.Directory) 34296417Sdim Path = M.Directory->getName(); 35296417Sdim if (auto *File = M.getASTFile()) 36296417Sdim ASTFile = File->getName(); 37288943Sdim} 38288943Sdim 39296417Sdimstd::string ExternalASTSource::ASTSourceDescriptor::getModuleName() const { 40296417Sdim if (ClangModule) 41296417Sdim return ClangModule->Name; 42296417Sdim else 43296417Sdim return PCHModuleName; 44296417Sdim} 45296417Sdim 46276479Sdimvoid ExternalASTSource::FindFileRegionDecls(FileID File, unsigned Offset, 47276479Sdim unsigned Length, 48276479Sdim SmallVectorImpl<Decl *> &Decls) {} 49276479Sdim 50276479Sdimvoid ExternalASTSource::CompleteRedeclChain(const Decl *D) {} 51276479Sdim 52276479Sdimvoid ExternalASTSource::CompleteType(TagDecl *Tag) {} 53276479Sdim 54276479Sdimvoid ExternalASTSource::CompleteType(ObjCInterfaceDecl *Class) {} 55276479Sdim 56276479Sdimvoid ExternalASTSource::ReadComments() {} 57276479Sdim 58276479Sdimvoid ExternalASTSource::StartedDeserializing() {} 59276479Sdim 60276479Sdimvoid ExternalASTSource::FinishedDeserializing() {} 61276479Sdim 62276479Sdimvoid ExternalASTSource::StartTranslationUnit(ASTConsumer *Consumer) {} 63276479Sdim 64221339Sdimvoid ExternalASTSource::PrintStats() { } 65221339Sdim 66276479Sdimbool ExternalASTSource::layoutRecordType( 67276479Sdim const RecordDecl *Record, uint64_t &Size, uint64_t &Alignment, 68276479Sdim llvm::DenseMap<const FieldDecl *, uint64_t> &FieldOffsets, 69276479Sdim llvm::DenseMap<const CXXRecordDecl *, CharUnits> &BaseOffsets, 70276479Sdim llvm::DenseMap<const CXXRecordDecl *, CharUnits> &VirtualBaseOffsets) { 71276479Sdim return false; 72276479Sdim} 73276479Sdim 74221339SdimDecl *ExternalASTSource::GetExternalDecl(uint32_t ID) { 75276479Sdim return nullptr; 76221339Sdim} 77221339Sdim 78221339SdimSelector ExternalASTSource::GetExternalSelector(uint32_t ID) { 79221339Sdim return Selector(); 80221339Sdim} 81221339Sdim 82221339Sdimuint32_t ExternalASTSource::GetNumExternalSelectors() { 83221339Sdim return 0; 84221339Sdim} 85221339Sdim 86221339SdimStmt *ExternalASTSource::GetExternalDeclStmt(uint64_t Offset) { 87276479Sdim return nullptr; 88221339Sdim} 89221339Sdim 90288943SdimCXXCtorInitializer ** 91288943SdimExternalASTSource::GetExternalCXXCtorInitializers(uint64_t Offset) { 92288943Sdim return nullptr; 93288943Sdim} 94288943Sdim 95221339SdimCXXBaseSpecifier * 96221339SdimExternalASTSource::GetExternalCXXBaseSpecifiers(uint64_t Offset) { 97276479Sdim return nullptr; 98221339Sdim} 99221339Sdim 100249423Sdimbool 101221339SdimExternalASTSource::FindExternalVisibleDeclsByName(const DeclContext *DC, 102221339Sdim DeclarationName Name) { 103249423Sdim return false; 104221339Sdim} 105221339Sdim 106296417Sdimvoid ExternalASTSource::completeVisibleDeclsMap(const DeclContext *DC) {} 107234982Sdim 108296417Sdimvoid ExternalASTSource::FindExternalLexicalDecls( 109296417Sdim const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant, 110296417Sdim SmallVectorImpl<Decl *> &Result) {} 111223017Sdim 112296417Sdimvoid ExternalASTSource::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {} 113276479Sdim 114276479Sdimuint32_t ExternalASTSource::incrementGeneration(ASTContext &C) { 115276479Sdim uint32_t OldGeneration = CurrentGeneration; 116276479Sdim 117276479Sdim // Make sure the generation of the topmost external source for the context is 118276479Sdim // incremented. That might not be us. 119276479Sdim auto *P = C.getExternalSource(); 120276479Sdim if (P && P != this) 121276479Sdim CurrentGeneration = P->incrementGeneration(C); 122276479Sdim else { 123276479Sdim // FIXME: Only bump the generation counter if the current generation number 124276479Sdim // has been observed? 125276479Sdim if (!++CurrentGeneration) 126276479Sdim llvm::report_fatal_error("generation counter overflowed", false); 127276479Sdim } 128276479Sdim 129276479Sdim return OldGeneration; 130276479Sdim} 131