LLDB  mainline
Public Member Functions | Private Member Functions | Private Attributes | List of all members
lldb_private::CxxModuleHandler Class Reference

Handles importing decls into an ASTContext with an attached C++ module. More...

#include <CxxModuleHandler.h>

Collaboration diagram for lldb_private::CxxModuleHandler:
Collaboration graph
[legend]

Public Member Functions

 CxxModuleHandler ()=default
 
 CxxModuleHandler (clang::ASTImporter &importer, clang::ASTContext *target)
 
llvm::Optional< clang::Decl * > Import (clang::Decl *d)
 Attempts to import the given decl into the target ASTContext by deserializing it from the 'std' module. More...
 
bool isValid () const
 Returns true iff this instance is capable of importing any declarations in the target ASTContext. More...
 

Private Member Functions

llvm::Optional< clang::Decl * > tryInstantiateStdTemplate (clang::Decl *d)
 Tries to manually instantiate the given foreign template in the target context (designated by m_sema). More...
 

Private Attributes

clang::ASTImporter * m_importer = nullptr
 The ASTImporter that should be used to import any Decls which aren't directly handled by this class itself. More...
 
clang::Sema * m_sema = nullptr
 The Sema instance of the target ASTContext. More...
 
llvm::StringSet m_supported_templates
 List of template names this class currently supports. More...
 

Detailed Description

Handles importing decls into an ASTContext with an attached C++ module.

This class searches a C++ module (which must be attached to the target ASTContext) for an equivalent decl to the one that should be imported. If the decl that is found in the module is a suitable replacement for the decl that should be imported, the module decl will be treated as the result of the import process.

If the Decl that should be imported is a template specialization that doesn't exist yet in the target ASTContext (e.g. std::vector<int>), then this class tries to create the template specialization in the target ASTContext. This is only possible if the CxxModuleHandler can determine that instantiating this template is safe to do, e.g. because the target decl is a container class from the STL.

Definition at line 32 of file CxxModuleHandler.h.

Constructor & Destructor Documentation

◆ CxxModuleHandler() [1/2]

lldb_private::CxxModuleHandler::CxxModuleHandler ( )
default

◆ CxxModuleHandler() [2/2]

lldb_private::CxxModuleHandler::CxxModuleHandler ( clang::ASTImporter &  importer,
clang::ASTContext *  target 
)

Member Function Documentation

◆ Import()

llvm::Optional< Decl * > CxxModuleHandler::Import ( clang::Decl *  d)

Attempts to import the given decl into the target ASTContext by deserializing it from the 'std' module.

This function returns a Decl if a Decl has been deserialized from the 'std' module. Otherwise this function returns nothing.

Definition at line 289 of file CxxModuleHandler.cpp.

References isValid(), and tryInstantiateStdTemplate().

◆ isValid()

bool lldb_private::CxxModuleHandler::isValid ( ) const
inline

Returns true iff this instance is capable of importing any declarations in the target ASTContext.

Definition at line 60 of file CxxModuleHandler.h.

References m_sema.

Referenced by Import().

◆ tryInstantiateStdTemplate()

llvm::Optional< Decl * > CxxModuleHandler::tryInstantiateStdTemplate ( clang::Decl *  d)
private

Tries to manually instantiate the given foreign template in the target context (designated by m_sema).

Definition at line 182 of file CxxModuleHandler.cpp.

References emulateLookupInCtxt(), getEqualLocalDeclContext(), lldb_private::GetLogIfAllCategoriesSet(), LIBLLDB_LOG_EXPRESSIONS, LLDB_LOG_ERROR, m_importer, m_sema, m_supported_templates, and templateArgsAreSupported().

Referenced by Import().

Member Data Documentation

◆ m_importer

clang::ASTImporter* lldb_private::CxxModuleHandler::m_importer = nullptr
private

The ASTImporter that should be used to import any Decls which aren't directly handled by this class itself.

Definition at line 35 of file CxxModuleHandler.h.

Referenced by tryInstantiateStdTemplate().

◆ m_sema

clang::Sema* lldb_private::CxxModuleHandler::m_sema = nullptr
private

The Sema instance of the target ASTContext.

Definition at line 38 of file CxxModuleHandler.h.

Referenced by isValid(), and tryInstantiateStdTemplate().

◆ m_supported_templates

llvm::StringSet lldb_private::CxxModuleHandler::m_supported_templates
private

List of template names this class currently supports.

These are the template names inside the 'std' namespace such as 'vector' or 'list'.

Definition at line 42 of file CxxModuleHandler.h.

Referenced by tryInstantiateStdTemplate().


The documentation for this class was generated from the following files: