SymbolVendor: Remove the type list member
Summary: Similarly to the compile unit lists, the list of types can also be managed by the symbol file itself. Since the only purpose of this list seems to be to maintain an owning reference to all the types a symbol file has created (items are only ever added to the list, never retrieved), I remove the passthrough functions in SymbolVendor and Module. I also tighten the interface of the function (return a reference instead of a pointer, make it protected instead of public). Reviewers: clayborg, JDevlieghere, jingham Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D65135 llvm-svn: 366994
This commit is contained in:
parent
5c606cef79
commit
f46e8974de
|
@ -653,13 +653,6 @@ public:
|
||||||
GetSymbolVendor(bool can_create = true,
|
GetSymbolVendor(bool can_create = true,
|
||||||
lldb_private::Stream *feedback_strm = nullptr);
|
lldb_private::Stream *feedback_strm = nullptr);
|
||||||
|
|
||||||
/// Get accessor the type list for this module.
|
|
||||||
///
|
|
||||||
/// \return
|
|
||||||
/// A valid type list pointer, or nullptr if there is no valid
|
|
||||||
/// symbol vendor for this module.
|
|
||||||
TypeList *GetTypeList();
|
|
||||||
|
|
||||||
/// Get a reference to the UUID value contained in this object.
|
/// Get a reference to the UUID value contained in this object.
|
||||||
///
|
///
|
||||||
/// If the executable image file doesn't not have a UUID value built into
|
/// If the executable image file doesn't not have a UUID value built into
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "lldb/Symbol/Function.h"
|
#include "lldb/Symbol/Function.h"
|
||||||
#include "lldb/Symbol/SourceModule.h"
|
#include "lldb/Symbol/SourceModule.h"
|
||||||
#include "lldb/Symbol/Type.h"
|
#include "lldb/Symbol/Type.h"
|
||||||
|
#include "lldb/Symbol/TypeList.h"
|
||||||
#include "lldb/lldb-private.h"
|
#include "lldb/lldb-private.h"
|
||||||
|
|
||||||
#include "llvm/ADT/DenseSet.h"
|
#include "llvm/ADT/DenseSet.h"
|
||||||
|
@ -191,10 +192,7 @@ public:
|
||||||
virtual void
|
virtual void
|
||||||
GetMangledNamesForFunction(const std::string &scope_qualified_name,
|
GetMangledNamesForFunction(const std::string &scope_qualified_name,
|
||||||
std::vector<ConstString> &mangled_names);
|
std::vector<ConstString> &mangled_names);
|
||||||
// virtual uint32_t FindTypes (const SymbolContext& sc, const
|
|
||||||
// RegularExpression& regex, bool append, uint32_t max_matches, TypeList&
|
|
||||||
// types) = 0;
|
|
||||||
virtual TypeList *GetTypeList();
|
|
||||||
virtual size_t GetTypes(lldb_private::SymbolContextScope *sc_scope,
|
virtual size_t GetTypes(lldb_private::SymbolContextScope *sc_scope,
|
||||||
lldb::TypeClass type_mask,
|
lldb::TypeClass type_mask,
|
||||||
lldb_private::TypeList &type_list) = 0;
|
lldb_private::TypeList &type_list) = 0;
|
||||||
|
@ -241,11 +239,13 @@ protected:
|
||||||
void AssertModuleLock();
|
void AssertModuleLock();
|
||||||
virtual uint32_t CalculateNumCompileUnits() = 0;
|
virtual uint32_t CalculateNumCompileUnits() = 0;
|
||||||
virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t idx) = 0;
|
virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t idx) = 0;
|
||||||
|
virtual TypeList &GetTypeList() { return m_type_list; }
|
||||||
|
|
||||||
void SetCompileUnitAtIndex(uint32_t idx, const lldb::CompUnitSP &cu_sp);
|
void SetCompileUnitAtIndex(uint32_t idx, const lldb::CompUnitSP &cu_sp);
|
||||||
|
|
||||||
ObjectFile *m_obj_file; // The object file that symbols can be extracted from.
|
ObjectFile *m_obj_file; // The object file that symbols can be extracted from.
|
||||||
llvm::Optional<std::vector<lldb::CompUnitSP>> m_compile_units;
|
llvm::Optional<std::vector<lldb::CompUnitSP>> m_compile_units;
|
||||||
|
TypeList m_type_list;
|
||||||
uint32_t m_abilities;
|
uint32_t m_abilities;
|
||||||
bool m_calculated_abilities;
|
bool m_calculated_abilities;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include "lldb/Core/ModuleChild.h"
|
#include "lldb/Core/ModuleChild.h"
|
||||||
#include "lldb/Core/PluginInterface.h"
|
#include "lldb/Core/PluginInterface.h"
|
||||||
#include "lldb/Symbol/SourceModule.h"
|
#include "lldb/Symbol/SourceModule.h"
|
||||||
#include "lldb/Symbol/TypeList.h"
|
|
||||||
#include "lldb/Symbol/TypeMap.h"
|
#include "lldb/Symbol/TypeMap.h"
|
||||||
#include "lldb/lldb-private.h"
|
#include "lldb/lldb-private.h"
|
||||||
#include "llvm/ADT/DenseSet.h"
|
#include "llvm/ADT/DenseSet.h"
|
||||||
|
@ -112,10 +111,6 @@ public:
|
||||||
|
|
||||||
virtual lldb::CompUnitSP GetCompileUnitAtIndex(size_t idx);
|
virtual lldb::CompUnitSP GetCompileUnitAtIndex(size_t idx);
|
||||||
|
|
||||||
TypeList &GetTypeList() { return m_type_list; }
|
|
||||||
|
|
||||||
const TypeList &GetTypeList() const { return m_type_list; }
|
|
||||||
|
|
||||||
virtual size_t GetTypes(SymbolContextScope *sc_scope,
|
virtual size_t GetTypes(SymbolContextScope *sc_scope,
|
||||||
lldb::TypeClass type_mask, TypeList &type_list);
|
lldb::TypeClass type_mask, TypeList &type_list);
|
||||||
|
|
||||||
|
@ -139,7 +134,6 @@ public:
|
||||||
uint32_t GetPluginVersion() override;
|
uint32_t GetPluginVersion() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TypeList m_type_list; // Uniqued types for all parsers owned by this module
|
|
||||||
lldb::ObjectFileSP m_objfile_sp; // Keep a reference to the object file in
|
lldb::ObjectFileSP m_objfile_sp; // Keep a reference to the object file in
|
||||||
// case it isn't the same as the module
|
// case it isn't the same as the module
|
||||||
// object file (debug symbols in a separate
|
// object file (debug symbols in a separate
|
||||||
|
|
|
@ -117,8 +117,6 @@ public:
|
||||||
SymbolFile *GetSymbolFile() { return m_symbol_file; }
|
SymbolFile *GetSymbolFile() { return m_symbol_file; }
|
||||||
const SymbolFile *GetSymbolFile() const { return m_symbol_file; }
|
const SymbolFile *GetSymbolFile() const { return m_symbol_file; }
|
||||||
|
|
||||||
TypeList *GetTypeList();
|
|
||||||
|
|
||||||
ConstString GetName();
|
ConstString GetName();
|
||||||
|
|
||||||
llvm::Optional<uint64_t> GetByteSize();
|
llvm::Optional<uint64_t> GetByteSize();
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "lldb/Symbol/LineTable.h"
|
#include "lldb/Symbol/LineTable.h"
|
||||||
#include "lldb/Symbol/SymbolVendor.h"
|
#include "lldb/Symbol/SymbolVendor.h"
|
||||||
#include "lldb/Symbol/Type.h"
|
#include "lldb/Symbol/Type.h"
|
||||||
|
#include "lldb/Symbol/TypeList.h"
|
||||||
|
|
||||||
using namespace lldb;
|
using namespace lldb;
|
||||||
using namespace lldb_private;
|
using namespace lldb_private;
|
||||||
|
|
|
@ -1240,13 +1240,6 @@ void Module::Dump(Stream *s) {
|
||||||
s->IndentLess();
|
s->IndentLess();
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeList *Module::GetTypeList() {
|
|
||||||
SymbolVendor *symbols = GetSymbolVendor();
|
|
||||||
if (symbols)
|
|
||||||
return &symbols->GetTypeList();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
ConstString Module::GetObjectName() const { return m_object_name; }
|
ConstString Module::GetObjectName() const { return m_object_name; }
|
||||||
|
|
||||||
ObjectFile *Module::GetObjectFile() {
|
ObjectFile *Module::GetObjectFile() {
|
||||||
|
|
|
@ -188,7 +188,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWO(const DWARFDIE &die, Log *log) {
|
||||||
nullptr, LLDB_INVALID_UID, Type::eEncodingInvalid,
|
nullptr, LLDB_INVALID_UID, Type::eEncodingInvalid,
|
||||||
&dwo_type_sp->GetDeclaration(), type, Type::eResolveStateForward));
|
&dwo_type_sp->GetDeclaration(), type, Type::eResolveStateForward));
|
||||||
|
|
||||||
dwarf->GetTypeList()->Insert(type_sp);
|
dwarf->GetTypeList().Insert(type_sp);
|
||||||
dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
|
dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
|
||||||
clang::TagDecl *tag_decl = ClangASTContext::GetAsTagDecl(type);
|
clang::TagDecl *tag_decl = ClangASTContext::GetAsTagDecl(type);
|
||||||
if (tag_decl)
|
if (tag_decl)
|
||||||
|
@ -434,7 +434,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeList *type_list = dwarf->GetTypeList();
|
TypeList &type_list = dwarf->GetTypeList();
|
||||||
if (type_is_new_ptr)
|
if (type_is_new_ptr)
|
||||||
*type_is_new_ptr = true;
|
*type_is_new_ptr = true;
|
||||||
|
|
||||||
|
@ -1672,7 +1672,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc,
|
||||||
|
|
||||||
// We are ready to put this type into the uniqued list up at the module
|
// We are ready to put this type into the uniqued list up at the module
|
||||||
// level
|
// level
|
||||||
type_list->Insert(type_sp);
|
type_list.Insert(type_sp);
|
||||||
|
|
||||||
dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
|
dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,15 +202,13 @@ SymbolFile *SymbolFileDWARF::CreateInstance(ObjectFile *obj_file) {
|
||||||
/*dwo_section_list*/ nullptr);
|
/*dwo_section_list*/ nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeList *SymbolFileDWARF::GetTypeList() {
|
TypeList &SymbolFileDWARF::GetTypeList() {
|
||||||
// This method can be called without going through the symbol vendor so we
|
// This method can be called without going through the symbol vendor so we
|
||||||
// need to lock the module.
|
// need to lock the module.
|
||||||
std::lock_guard<std::recursive_mutex> guard(GetModuleMutex());
|
std::lock_guard<std::recursive_mutex> guard(GetModuleMutex());
|
||||||
SymbolFileDWARFDebugMap *debug_map_symfile = GetDebugMapSymfile();
|
if (SymbolFileDWARFDebugMap *debug_map_symfile = GetDebugMapSymfile())
|
||||||
if (debug_map_symfile)
|
|
||||||
return debug_map_symfile->GetTypeList();
|
return debug_map_symfile->GetTypeList();
|
||||||
else
|
return SymbolFile::GetTypeList();
|
||||||
return m_obj_file->GetModule()->GetTypeList();
|
|
||||||
}
|
}
|
||||||
void SymbolFileDWARF::GetTypes(const DWARFDIE &die, dw_offset_t min_die_offset,
|
void SymbolFileDWARF::GetTypes(const DWARFDIE &die, dw_offset_t min_die_offset,
|
||||||
dw_offset_t max_die_offset, uint32_t type_mask,
|
dw_offset_t max_die_offset, uint32_t type_mask,
|
||||||
|
@ -2971,9 +2969,7 @@ TypeSP SymbolFileDWARF::ParseType(const SymbolContext &sc, const DWARFDIE &die,
|
||||||
Log *log = LogChannelDWARF::GetLogIfAll(DWARF_LOG_DEBUG_INFO);
|
Log *log = LogChannelDWARF::GetLogIfAll(DWARF_LOG_DEBUG_INFO);
|
||||||
TypeSP type_sp = dwarf_ast->ParseTypeFromDWARF(sc, die, log, type_is_new_ptr);
|
TypeSP type_sp = dwarf_ast->ParseTypeFromDWARF(sc, die, log, type_is_new_ptr);
|
||||||
if (type_sp) {
|
if (type_sp) {
|
||||||
TypeList *type_list = GetTypeList();
|
GetTypeList().Insert(type_sp);
|
||||||
if (type_list)
|
|
||||||
type_list->Insert(type_sp);
|
|
||||||
|
|
||||||
if (die.Tag() == DW_TAG_subprogram) {
|
if (die.Tag() == DW_TAG_subprogram) {
|
||||||
std::string scope_qualified_name(GetDeclContextForUID(die.GetID())
|
std::string scope_qualified_name(GetDeclContextForUID(die.GetID())
|
||||||
|
|
|
@ -186,8 +186,6 @@ public:
|
||||||
size_t FindTypes(const std::vector<lldb_private::CompilerContext> &context,
|
size_t FindTypes(const std::vector<lldb_private::CompilerContext> &context,
|
||||||
bool append, lldb_private::TypeMap &types) override;
|
bool append, lldb_private::TypeMap &types) override;
|
||||||
|
|
||||||
lldb_private::TypeList *GetTypeList() override;
|
|
||||||
|
|
||||||
size_t GetTypes(lldb_private::SymbolContextScope *sc_scope,
|
size_t GetTypes(lldb_private::SymbolContextScope *sc_scope,
|
||||||
lldb::TypeClass type_mask,
|
lldb::TypeClass type_mask,
|
||||||
lldb_private::TypeList &type_list) override;
|
lldb_private::TypeList &type_list) override;
|
||||||
|
@ -331,6 +329,8 @@ protected:
|
||||||
|
|
||||||
lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override;
|
lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override;
|
||||||
|
|
||||||
|
lldb_private::TypeList &GetTypeList() override;
|
||||||
|
|
||||||
virtual DWARFUnit *
|
virtual DWARFUnit *
|
||||||
GetDWARFCompileUnit(lldb_private::CompileUnit *comp_unit);
|
GetDWARFCompileUnit(lldb_private::CompileUnit *comp_unit);
|
||||||
|
|
||||||
|
|
|
@ -729,7 +729,7 @@ TypeSP SymbolFileNativePDB::GetOrCreateType(PdbTypeSymId type_id) {
|
||||||
|
|
||||||
TypeSP type = CreateAndCacheType(type_id);
|
TypeSP type = CreateAndCacheType(type_id);
|
||||||
if (type)
|
if (type)
|
||||||
m_obj_file->GetModule()->GetTypeList()->Insert(type);
|
GetTypeList().Insert(type);
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1283,7 +1283,7 @@ size_t SymbolFileNativePDB::ParseTypes(CompileUnit &comp_unit) {
|
||||||
if (m_done_full_type_scan)
|
if (m_done_full_type_scan)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
size_t old_count = m_obj_file->GetModule()->GetTypeList()->GetSize();
|
const size_t old_count = GetTypeList().GetSize();
|
||||||
LazyRandomTypeCollection &types = m_index->tpi().typeCollection();
|
LazyRandomTypeCollection &types = m_index->tpi().typeCollection();
|
||||||
|
|
||||||
// First process the entire TPI stream.
|
// First process the entire TPI stream.
|
||||||
|
@ -1313,7 +1313,7 @@ size_t SymbolFileNativePDB::ParseTypes(CompileUnit &comp_unit) {
|
||||||
GetOrCreateTypedef(global);
|
GetOrCreateTypedef(global);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t new_count = m_obj_file->GetModule()->GetTypeList()->GetSize();
|
const size_t new_count = GetTypeList().GetSize();
|
||||||
|
|
||||||
m_done_full_type_scan = true;
|
m_done_full_type_scan = true;
|
||||||
|
|
||||||
|
|
|
@ -557,9 +557,7 @@ lldb_private::Type *SymbolFilePDB::ResolveTypeUID(lldb::user_id_t type_uid) {
|
||||||
lldb::TypeSP result = pdb->CreateLLDBTypeFromPDBType(*pdb_type);
|
lldb::TypeSP result = pdb->CreateLLDBTypeFromPDBType(*pdb_type);
|
||||||
if (result) {
|
if (result) {
|
||||||
m_types.insert(std::make_pair(type_uid, result));
|
m_types.insert(std::make_pair(type_uid, result));
|
||||||
auto type_list = GetTypeList();
|
GetTypeList().Insert(result);
|
||||||
if (type_list)
|
|
||||||
type_list->Insert(result);
|
|
||||||
}
|
}
|
||||||
return result.get();
|
return result.get();
|
||||||
}
|
}
|
||||||
|
@ -1516,10 +1514,6 @@ size_t SymbolFilePDB::FindTypes(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
lldb_private::TypeList *SymbolFilePDB::GetTypeList() {
|
|
||||||
return m_obj_file->GetModule()->GetTypeList();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SymbolFilePDB::GetTypesForPDBSymbol(const llvm::pdb::PDBSymbol &pdb_symbol,
|
void SymbolFilePDB::GetTypesForPDBSymbol(const llvm::pdb::PDBSymbol &pdb_symbol,
|
||||||
uint32_t type_mask,
|
uint32_t type_mask,
|
||||||
TypeCollection &type_collection) {
|
TypeCollection &type_collection) {
|
||||||
|
|
|
@ -138,8 +138,6 @@ public:
|
||||||
void FindTypesByRegex(const lldb_private::RegularExpression ®ex,
|
void FindTypesByRegex(const lldb_private::RegularExpression ®ex,
|
||||||
uint32_t max_matches, lldb_private::TypeMap &types);
|
uint32_t max_matches, lldb_private::TypeMap &types);
|
||||||
|
|
||||||
lldb_private::TypeList *GetTypeList() override;
|
|
||||||
|
|
||||||
size_t GetTypes(lldb_private::SymbolContextScope *sc_scope,
|
size_t GetTypes(lldb_private::SymbolContextScope *sc_scope,
|
||||||
lldb::TypeClass type_mask,
|
lldb::TypeClass type_mask,
|
||||||
lldb_private::TypeList &type_list) override;
|
lldb_private::TypeList &type_list) override;
|
||||||
|
|
|
@ -82,12 +82,6 @@ SymbolFile *SymbolFile::FindPlugin(ObjectFile *obj_file) {
|
||||||
return best_symfile_up.release();
|
return best_symfile_up.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeList *SymbolFile::GetTypeList() {
|
|
||||||
if (m_obj_file)
|
|
||||||
return m_obj_file->GetModule()->GetTypeList();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
TypeSystem *SymbolFile::GetTypeSystemForLanguage(lldb::LanguageType language) {
|
TypeSystem *SymbolFile::GetTypeSystemForLanguage(lldb::LanguageType language) {
|
||||||
TypeSystem *type_system =
|
TypeSystem *type_system =
|
||||||
m_obj_file->GetModule()->GetTypeSystemForLanguage(language);
|
m_obj_file->GetModule()->GetTypeSystemForLanguage(language);
|
||||||
|
@ -206,6 +200,10 @@ void SymbolFile::SetCompileUnitAtIndex(uint32_t idx, const CompUnitSP &cu_sp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbolFile::Dump(Stream &s) {
|
void SymbolFile::Dump(Stream &s) {
|
||||||
|
s.PutCString("Types:\n");
|
||||||
|
m_type_list.Dump(&s, /*show_context*/ false);
|
||||||
|
s.PutChar('\n');
|
||||||
|
|
||||||
s.PutCString("Compile units:\n");
|
s.PutCString("Compile units:\n");
|
||||||
if (m_compile_units) {
|
if (m_compile_units) {
|
||||||
for (const CompUnitSP &cu_sp : *m_compile_units) {
|
for (const CompUnitSP &cu_sp : *m_compile_units) {
|
||||||
|
|
|
@ -58,7 +58,7 @@ SymbolVendor *SymbolVendor::FindPlugin(const lldb::ModuleSP &module_sp,
|
||||||
|
|
||||||
// SymbolVendor constructor
|
// SymbolVendor constructor
|
||||||
SymbolVendor::SymbolVendor(const lldb::ModuleSP &module_sp)
|
SymbolVendor::SymbolVendor(const lldb::ModuleSP &module_sp)
|
||||||
: ModuleChild(module_sp), m_type_list(), m_sym_file_up(), m_symtab() {}
|
: ModuleChild(module_sp), m_sym_file_up(), m_symtab() {}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
SymbolVendor::~SymbolVendor() {}
|
SymbolVendor::~SymbolVendor() {}
|
||||||
|
@ -336,8 +336,6 @@ void SymbolVendor::Dump(Stream *s) {
|
||||||
if (module_sp) {
|
if (module_sp) {
|
||||||
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
|
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
|
||||||
|
|
||||||
bool show_context = false;
|
|
||||||
|
|
||||||
s->Printf("%p: ", static_cast<void *>(this));
|
s->Printf("%p: ", static_cast<void *>(this));
|
||||||
s->Indent();
|
s->Indent();
|
||||||
s->PutCString("SymbolVendor");
|
s->PutCString("SymbolVendor");
|
||||||
|
@ -354,9 +352,6 @@ void SymbolVendor::Dump(Stream *s) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s->EOL();
|
s->EOL();
|
||||||
s->PutCString("Types:\n");
|
|
||||||
m_type_list.Dump(s, show_context);
|
|
||||||
s->EOL();
|
|
||||||
if (m_sym_file_up)
|
if (m_sym_file_up)
|
||||||
m_sym_file_up->Dump(*s);
|
m_sym_file_up->Dump(*s);
|
||||||
s->IndentMore();
|
s->IndentMore();
|
||||||
|
|
|
@ -425,8 +425,6 @@ bool Type::WriteToMemory(ExecutionContext *exe_ctx, lldb::addr_t addr,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeList *Type::GetTypeList() { return GetSymbolFile()->GetTypeList(); }
|
|
||||||
|
|
||||||
const Declaration &Type::GetDeclaration() const { return m_decl; }
|
const Declaration &Type::GetDeclaration() const { return m_decl; }
|
||||||
|
|
||||||
bool Type::ResolveClangType(ResolveState compiler_type_resolve_state) {
|
bool Type::ResolveClangType(ResolveState compiler_type_resolve_state) {
|
||||||
|
|
Loading…
Reference in New Issue