LLDB mainline
|
Handles importing decls into an ASTContext with an attached C++ module. More...
#include <CxxModuleHandler.h>
Public Member Functions | |
CxxModuleHandler ()=default | |
CxxModuleHandler (clang::ASTImporter &importer, clang::ASTContext *target) | |
std::optional< clang::Decl * > | Import (clang::Decl *d) |
Attempts to import the given decl into the target ASTContext by deserializing it from the 'std' module. | |
bool | isValid () const |
Returns true iff this instance is capable of importing any declarations in the target ASTContext. | |
Private Member Functions | |
std::optional< clang::Decl * > | tryInstantiateStdTemplate (clang::Decl *d) |
Tries to manually instantiate the given foreign template in the target context (designated by m_sema). | |
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. | |
clang::Sema * | m_sema = nullptr |
The Sema instance of the target ASTContext. | |
llvm::StringSet | m_supported_templates |
List of template names this class currently supports. | |
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 33 of file CxxModuleHandler.h.
|
default |
lldb_private::CxxModuleHandler::CxxModuleHandler | ( | clang::ASTImporter & | importer, |
clang::ASTContext * | target | ||
) |
std::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 292 of file CxxModuleHandler.cpp.
References isValid(), and tryInstantiateStdTemplate().
Referenced by lldb_private::ClangASTImporter::ASTImporterDelegate::ImportImpl().
|
inline |
Returns true iff this instance is capable of importing any declarations in the target ASTContext.
Definition at line 61 of file CxxModuleHandler.h.
References m_sema.
Referenced by Import().
|
private |
Tries to manually instantiate the given foreign template in the target context (designated by m_sema).
Definition at line 184 of file CxxModuleHandler.cpp.
References emulateLookupInCtxt(), lldb_private::Expressions, getEqualLocalDeclContext(), lldb_private::GetLog(), LLDB_LOG_ERROR, m_importer, m_sema, m_supported_templates, and templateArgsAreSupported().
Referenced by Import().
|
private |
The ASTImporter that should be used to import any Decls which aren't directly handled by this class itself.
Definition at line 36 of file CxxModuleHandler.h.
Referenced by tryInstantiateStdTemplate().
|
private |
The Sema instance of the target ASTContext.
Definition at line 39 of file CxxModuleHandler.h.
Referenced by isValid(), and tryInstantiateStdTemplate().
|
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 43 of file CxxModuleHandler.h.
Referenced by tryInstantiateStdTemplate().