1 //===-- ClangExternalASTSourceCallbacks.h -----------------------*- C++ -*-===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_CLANGEXTERNALASTSOURCECALLBACKS_H
10 #define LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_CLANGEXTERNALASTSOURCECALLBACKS_H
11 
12 #include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
13 #include "clang/AST/ExternalASTSource.h"
14 
15 namespace lldb_private {
16 
17 class TypeSystemClang;
18 
19 class ClangExternalASTSourceCallbacks : public clang::ExternalASTSource {
20 public:
21   ClangExternalASTSourceCallbacks(TypeSystemClang &ast) : m_ast(ast) {}
22 
23   void FindExternalLexicalDecls(
24       const clang::DeclContext *DC,
25       llvm::function_ref<bool(clang::Decl::Kind)> IsKindWeWant,
26       llvm::SmallVectorImpl<clang::Decl *> &Result) override;
27 
28   void CompleteType(clang::TagDecl *tag_decl) override;
29 
30   void CompleteType(clang::ObjCInterfaceDecl *objc_decl) override;
31 
32   bool layoutRecordType(
33       const clang::RecordDecl *Record, uint64_t &Size, uint64_t &Alignment,
34       llvm::DenseMap<const clang::FieldDecl *, uint64_t> &FieldOffsets,
35       llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
36           &BaseOffsets,
37       llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits>
38           &VirtualBaseOffsets) override;
39 
40 private:
41   TypeSystemClang &m_ast;
42 };
43 
44 } // namespace lldb_private
45 
46 #endif // LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_CLANGEXTERNALASTSOURCECALLBACKS_H
47