ClangExternalASTSourceCallbacks.h [plain text]
#ifndef liblldb_ClangExternalASTSourceCallbacks_h_
#define liblldb_ClangExternalASTSourceCallbacks_h_
#include <string>
#include <vector>
#include <memory>
#include <stdint.h>
#include "clang/AST/CharUnits.h"
#include "lldb/lldb-enumerations.h"
#include "lldb/Core/ClangForward.h"
#include "lldb/Symbol/ClangASTType.h"
#include "lldb/Symbol/ClangExternalASTSourceCommon.h"
namespace lldb_private {
class ClangExternalASTSourceCallbacks : public ClangExternalASTSourceCommon
{
public:
typedef void (*CompleteTagDeclCallback)(void *baton, clang::TagDecl *);
typedef void (*CompleteObjCInterfaceDeclCallback)(void *baton, clang::ObjCInterfaceDecl *);
typedef void (*FindExternalVisibleDeclsByNameCallback)(void *baton, const clang::DeclContext *DC, clang::DeclarationName Name, llvm::SmallVectorImpl <clang::NamedDecl *> *results);
typedef bool (*LayoutRecordTypeCallback)(void *baton,
const clang::RecordDecl *Record,
uint64_t &Size,
uint64_t &Alignment,
llvm::DenseMap <const clang::FieldDecl *, uint64_t> &FieldOffsets,
llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &BaseOffsets,
llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &VirtualBaseOffsets);
ClangExternalASTSourceCallbacks (CompleteTagDeclCallback tag_decl_callback,
CompleteObjCInterfaceDeclCallback objc_decl_callback,
FindExternalVisibleDeclsByNameCallback find_by_name_callback,
LayoutRecordTypeCallback layout_record_type_callback,
void *callback_baton) :
m_callback_tag_decl (tag_decl_callback),
m_callback_objc_decl (objc_decl_callback),
m_callback_find_by_name (find_by_name_callback),
m_callback_layout_record_type (layout_record_type_callback),
m_callback_baton (callback_baton)
{
}
virtual clang::Decl *
GetExternalDecl (uint32_t ID)
{
return 0;
}
virtual clang::Stmt *
GetExternalDeclStmt (uint64_t Offset)
{
return 0;
}
virtual clang::Selector
GetExternalSelector (uint32_t ID)
{
return clang::Selector();
}
virtual uint32_t
GetNumExternalSelectors()
{
return 0;
}
virtual clang::CXXBaseSpecifier *
GetExternalCXXBaseSpecifiers(uint64_t Offset)
{
return NULL;
}
virtual void
MaterializeVisibleDecls (const clang::DeclContext *decl_ctx)
{
return;
}
virtual clang::ExternalLoadResult
FindExternalLexicalDecls (const clang::DeclContext *decl_ctx,
bool (*isKindWeWant)(clang::Decl::Kind),
llvm::SmallVectorImpl<clang::Decl*> &decls)
{
return clang::ELR_Failure;
}
virtual clang::DeclContextLookupResult
FindExternalVisibleDeclsByName (const clang::DeclContext *decl_ctx,
clang::DeclarationName decl_name);
virtual void
CompleteType (clang::TagDecl *tag_decl);
virtual void
CompleteType (clang::ObjCInterfaceDecl *objc_decl);
bool
layoutRecordType(const clang::RecordDecl *Record,
uint64_t &Size,
uint64_t &Alignment,
llvm::DenseMap <const clang::FieldDecl *, uint64_t> &FieldOffsets,
llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &BaseOffsets,
llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &VirtualBaseOffsets);
void
SetExternalSourceCallbacks (CompleteTagDeclCallback tag_decl_callback,
CompleteObjCInterfaceDeclCallback objc_decl_callback,
FindExternalVisibleDeclsByNameCallback find_by_name_callback,
LayoutRecordTypeCallback layout_record_type_callback,
void *callback_baton)
{
m_callback_tag_decl = tag_decl_callback;
m_callback_objc_decl = objc_decl_callback;
m_callback_find_by_name = find_by_name_callback;
m_callback_layout_record_type = layout_record_type_callback;
m_callback_baton = callback_baton;
}
void
RemoveExternalSourceCallbacks (void *callback_baton)
{
if (callback_baton == m_callback_baton)
{
m_callback_tag_decl = NULL;
m_callback_objc_decl = NULL;
m_callback_find_by_name = NULL;
m_callback_layout_record_type = NULL;
}
}
protected:
CompleteTagDeclCallback m_callback_tag_decl;
CompleteObjCInterfaceDeclCallback m_callback_objc_decl;
FindExternalVisibleDeclsByNameCallback m_callback_find_by_name;
LayoutRecordTypeCallback m_callback_layout_record_type;
void * m_callback_baton;
};
}
#endif // liblldb_ClangExternalASTSourceCallbacks_h_