diff options
7 files changed, 222 insertions, 286 deletions
diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h index e9a1d536ca8..53ecd1bb78f 100644 --- a/lldb/include/lldb/Symbol/ClangASTContext.h +++ b/lldb/include/lldb/Symbol/ClangASTContext.h @@ -164,6 +164,22 @@ public: static bool AreTypesSame(CompilerType type1, CompilerType type2, bool ignore_qualifiers = false); + /// Creates a CompilerType form the given QualType with the current + /// ClangASTContext instance as the CompilerType's typesystem. + /// \param qt The QualType for a type that belongs to the ASTContext of this + /// ClangASTContext. + /// \return The CompilerType representing the given QualType. If the + /// QualType's type pointer is a nullptr then the function returns an + /// invalid CompilerType. + CompilerType GetType(clang::QualType qt) { + if (qt.getTypePtrOrNull() == nullptr) + return CompilerType(); + // Check that the type actually belongs to this ClangASTContext. + assert(qt->getAsTagDecl() == nullptr || + &qt->getAsTagDecl()->getASTContext() == &getASTContext()); + return CompilerType(this, qt.getAsOpaquePtr()); + } + CompilerType GetTypeForDecl(clang::NamedDecl *decl); CompilerType GetTypeForDecl(clang::TagDecl *decl); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp index ff86f9f818b..b0043f9c0f6 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp @@ -1861,7 +1861,7 @@ CompilerType ClangASTSource::GuardedCopyType(const CompilerType &src_type) { // seems to be generating bad types on occasion. return CompilerType(); - return CompilerType(m_clang_ast_context, copied_qual_type.getAsOpaquePtr()); + return m_clang_ast_context->GetType(copied_qual_type); } clang::NamedDecl *NameSearchContext::AddVarDecl(const CompilerType &type) { @@ -1988,9 +1988,8 @@ clang::NamedDecl *NameSearchContext::AddGenericFunDecl() { ArrayRef<QualType>(), // argument types proto_info)); - return AddFunDecl(CompilerType(m_ast_source.m_clang_ast_context, - generic_function_type.getAsOpaquePtr()), - true); + return AddFunDecl( + m_ast_source.m_clang_ast_context->GetType(generic_function_type), true); } clang::NamedDecl * diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index 64461fc2bc0..0ac7fb6d233 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -612,9 +612,8 @@ lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<D32, D64, Inline>:: auto *clang_ast_context = ClangASTContext::GetScratch( *valobj_sp->GetExecutionContextRef().GetTargetSP()); if (clang_ast_context) - m_id_type = CompilerType(clang_ast_context, - clang_ast_context->getASTContext() - .ObjCBuiltinIdTy.getAsOpaquePtr()); + m_id_type = clang_ast_context->GetType( + clang_ast_context->getASTContext().ObjCBuiltinIdTy); } } } diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp index 5fa4073f40b..d92f782c72e 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp @@ -137,8 +137,7 @@ clang::QualType AppleObjCTypeEncodingParser::BuildAggregate( element.name = elem_name.GetString(); } ClangASTContext::AddFieldToRecordType( - union_type, element.name.c_str(), - CompilerType(&ast_ctx, element.type.getAsOpaquePtr()), + union_type, element.name.c_str(), ast_ctx.GetType(element.type), lldb::eAccessPublic, element.bitfield); ++count; } @@ -362,7 +361,7 @@ CompilerType AppleObjCTypeEncodingParser::RealizeType(ClangASTContext &ast_ctx, if (name && name[0]) { StringLexer lexer(name); clang::QualType qual_type = BuildType(ast_ctx, lexer, for_expression); - return CompilerType(&ast_ctx, qual_type.getAsOpaquePtr()); + return ast_ctx.GetType(qual_type); } return CompilerType(); } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index 96dd72bb100..3cae9a19001 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -2086,8 +2086,8 @@ bool DWARFASTParserClang::CompleteRecordType(const DWARFDIE &die, clang::TypeSourceInfo *type_source_info = base_class->getTypeSourceInfo(); if (type_source_info) { - CompilerType base_class_type( - &m_ast, type_source_info->getType().getAsOpaquePtr()); + CompilerType base_class_type = + m_ast.GetType(type_source_info->getType()); if (!base_class_type.GetCompleteType()) { auto module = dwarf->GetObjectFile()->GetModule(); module->ReportError(":: Class '%s' has a base class '%s' which " diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp index 7a1a64816f4..4588c80aa1b 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp @@ -1078,7 +1078,7 @@ void PdbAstBuilder::CreateFunctionParameters(PdbCompilandSymId func_id, PdbCompilandSymId param_uid(func_id.modi, record_offset); clang::QualType qt = GetOrCreateType(param_type); - CompilerType param_type_ct(&m_clang, qt.getAsOpaquePtr()); + CompilerType param_type_ct = m_clang.GetType(qt); clang::ParmVarDecl *param = m_clang.CreateParameterDeclaration( &function_decl, param_name.str().c_str(), param_type_ct, clang::SC_None, true); diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index d226a34b1ac..4cf70fa9c1c 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -764,56 +764,54 @@ ClangASTContext::GetBuiltinTypeForEncodingAndBitSize(Encoding encoding, switch (encoding) { case eEncodingInvalid: if (QualTypeMatchesBitSize(bit_size, ast, ast.VoidPtrTy)) - return CompilerType(this, ast.VoidPtrTy.getAsOpaquePtr()); + return GetType(ast.VoidPtrTy); break; case eEncodingUint: if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) - return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + return GetType(ast.UnsignedCharTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) - return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + return GetType(ast.UnsignedShortTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) - return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + return GetType(ast.UnsignedIntTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongTy)) - return CompilerType(this, ast.UnsignedLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongLongTy)) - return CompilerType(this, ast.UnsignedLongLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongLongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedInt128Ty)) - return CompilerType(this, ast.UnsignedInt128Ty.getAsOpaquePtr()); + return GetType(ast.UnsignedInt128Ty); break; case eEncodingSint: if (QualTypeMatchesBitSize(bit_size, ast, ast.SignedCharTy)) - return CompilerType(this, ast.SignedCharTy.getAsOpaquePtr()); + return GetType(ast.SignedCharTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.ShortTy)) - return CompilerType(this, ast.ShortTy.getAsOpaquePtr()); + return GetType(ast.ShortTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.IntTy)) - return CompilerType(this, ast.IntTy.getAsOpaquePtr()); + return GetType(ast.IntTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.LongTy)) - return CompilerType(this, ast.LongTy.getAsOpaquePtr()); + return GetType(ast.LongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.LongLongTy)) - return CompilerType(this, ast.LongLongTy.getAsOpaquePtr()); + return GetType(ast.LongLongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.Int128Ty)) - return CompilerType(this, ast.Int128Ty.getAsOpaquePtr()); + return GetType(ast.Int128Ty); break; case eEncodingIEEE754: if (QualTypeMatchesBitSize(bit_size, ast, ast.FloatTy)) - return CompilerType(this, ast.FloatTy.getAsOpaquePtr()); + return GetType(ast.FloatTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.DoubleTy)) - return CompilerType(this, ast.DoubleTy.getAsOpaquePtr()); + return GetType(ast.DoubleTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleTy)) - return CompilerType(this, ast.LongDoubleTy.getAsOpaquePtr()); + return GetType(ast.LongDoubleTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.HalfTy)) - return CompilerType(this, ast.HalfTy.getAsOpaquePtr()); + return GetType(ast.HalfTy); break; case eEncodingVector: // Sanity check that bit_size is a multiple of 8's. if (bit_size && !(bit_size & 0x7u)) - return CompilerType(this, - ast.getExtVectorType(ast.UnsignedCharTy, bit_size / 8) - .getAsOpaquePtr()); + return GetType(ast.getExtVectorType(ast.UnsignedCharTy, bit_size / 8)); break; } @@ -916,18 +914,18 @@ CompilerType ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize( case DW_ATE_address: if (QualTypeMatchesBitSize(bit_size, ast, ast.VoidPtrTy)) - return CompilerType(this, ast.VoidPtrTy.getAsOpaquePtr()); + return GetType(ast.VoidPtrTy); break; case DW_ATE_boolean: if (QualTypeMatchesBitSize(bit_size, ast, ast.BoolTy)) - return CompilerType(this, ast.BoolTy.getAsOpaquePtr()); + return GetType(ast.BoolTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) - return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + return GetType(ast.UnsignedCharTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) - return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + return GetType(ast.UnsignedShortTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) - return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + return GetType(ast.UnsignedIntTy); break; case DW_ATE_lo_user: @@ -936,49 +934,46 @@ CompilerType ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize( CompilerType complex_int_clang_type = GetBuiltinTypeForDWARFEncodingAndBitSize("int", DW_ATE_signed, bit_size / 2); - return CompilerType(this, ast.getComplexType(ClangUtil::GetQualType( - complex_int_clang_type)) - .getAsOpaquePtr()); + return GetType( + ast.getComplexType(ClangUtil::GetQualType(complex_int_clang_type))); } break; case DW_ATE_complex_float: if (QualTypeMatchesBitSize(bit_size, ast, ast.FloatComplexTy)) - return CompilerType(this, ast.FloatComplexTy.getAsOpaquePtr()); + return GetType(ast.FloatComplexTy); else if (QualTypeMatchesBitSize(bit_size, ast, ast.DoubleComplexTy)) - return CompilerType(this, ast.DoubleComplexTy.getAsOpaquePtr()); + return GetType(ast.DoubleComplexTy); else if (QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleComplexTy)) - return CompilerType(this, ast.LongDoubleComplexTy.getAsOpaquePtr()); + return GetType(ast.LongDoubleComplexTy); else { CompilerType complex_float_clang_type = GetBuiltinTypeForDWARFEncodingAndBitSize("float", DW_ATE_float, bit_size / 2); - return CompilerType( - this, - ast.getComplexType(ClangUtil::GetQualType(complex_float_clang_type)) - .getAsOpaquePtr()); + return GetType( + ast.getComplexType(ClangUtil::GetQualType(complex_float_clang_type))); } break; case DW_ATE_float: if (type_name == "float" && QualTypeMatchesBitSize(bit_size, ast, ast.FloatTy)) - return CompilerType(this, ast.FloatTy.getAsOpaquePtr()); + return GetType(ast.FloatTy); if (type_name == "double" && QualTypeMatchesBitSize(bit_size, ast, ast.DoubleTy)) - return CompilerType(this, ast.DoubleTy.getAsOpaquePtr()); + return GetType(ast.DoubleTy); if (type_name == "long double" && QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleTy)) - return CompilerType(this, ast.LongDoubleTy.getAsOpaquePtr()); + return GetType(ast.LongDoubleTy); // Fall back to not requiring a name match if (QualTypeMatchesBitSize(bit_size, ast, ast.FloatTy)) - return CompilerType(this, ast.FloatTy.getAsOpaquePtr()); + return GetType(ast.FloatTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.DoubleTy)) - return CompilerType(this, ast.DoubleTy.getAsOpaquePtr()); + return GetType(ast.DoubleTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleTy)) - return CompilerType(this, ast.LongDoubleTy.getAsOpaquePtr()); + return GetType(ast.LongDoubleTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.HalfTy)) - return CompilerType(this, ast.HalfTy.getAsOpaquePtr()); + return GetType(ast.HalfTy); break; case DW_ATE_signed: @@ -987,54 +982,54 @@ CompilerType ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize( QualTypeMatchesBitSize(bit_size, ast, ast.WCharTy) && (getTargetInfo() && TargetInfo::isTypeSigned(getTargetInfo()->getWCharType()))) - return CompilerType(this, ast.WCharTy.getAsOpaquePtr()); + return GetType(ast.WCharTy); if (type_name == "void" && QualTypeMatchesBitSize(bit_size, ast, ast.VoidTy)) - return CompilerType(this, ast.VoidTy.getAsOpaquePtr()); + return GetType(ast.VoidTy); if (type_name.contains("long long") && QualTypeMatchesBitSize(bit_size, ast, ast.LongLongTy)) - return CompilerType(this, ast.LongLongTy.getAsOpaquePtr()); + return GetType(ast.LongLongTy); if (type_name.contains("long") && QualTypeMatchesBitSize(bit_size, ast, ast.LongTy)) - return CompilerType(this, ast.LongTy.getAsOpaquePtr()); + return GetType(ast.LongTy); if (type_name.contains("short") && QualTypeMatchesBitSize(bit_size, ast, ast.ShortTy)) - return CompilerType(this, ast.ShortTy.getAsOpaquePtr()); + return GetType(ast.ShortTy); if (type_name.contains("char")) { if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) - return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + return GetType(ast.CharTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.SignedCharTy)) - return CompilerType(this, ast.SignedCharTy.getAsOpaquePtr()); + return GetType(ast.SignedCharTy); } if (type_name.contains("int")) { if (QualTypeMatchesBitSize(bit_size, ast, ast.IntTy)) - return CompilerType(this, ast.IntTy.getAsOpaquePtr()); + return GetType(ast.IntTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.Int128Ty)) - return CompilerType(this, ast.Int128Ty.getAsOpaquePtr()); + return GetType(ast.Int128Ty); } } // We weren't able to match up a type name, just search by size if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) - return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + return GetType(ast.CharTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.ShortTy)) - return CompilerType(this, ast.ShortTy.getAsOpaquePtr()); + return GetType(ast.ShortTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.IntTy)) - return CompilerType(this, ast.IntTy.getAsOpaquePtr()); + return GetType(ast.IntTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.LongTy)) - return CompilerType(this, ast.LongTy.getAsOpaquePtr()); + return GetType(ast.LongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.LongLongTy)) - return CompilerType(this, ast.LongLongTy.getAsOpaquePtr()); + return GetType(ast.LongLongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.Int128Ty)) - return CompilerType(this, ast.Int128Ty.getAsOpaquePtr()); + return GetType(ast.Int128Ty); break; case DW_ATE_signed_char: if (ast.getLangOpts().CharIsSigned && type_name == "char") { if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) - return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + return GetType(ast.CharTy); } if (QualTypeMatchesBitSize(bit_size, ast, ast.SignedCharTy)) - return CompilerType(this, ast.SignedCharTy.getAsOpaquePtr()); + return GetType(ast.SignedCharTy); break; case DW_ATE_unsigned: @@ -1043,52 +1038,52 @@ CompilerType ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize( if (QualTypeMatchesBitSize(bit_size, ast, ast.WCharTy)) { if (!(getTargetInfo() && TargetInfo::isTypeSigned(getTargetInfo()->getWCharType()))) - return CompilerType(this, ast.WCharTy.getAsOpaquePtr()); + return GetType(ast.WCharTy); } } if (type_name.contains("long long")) { if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongLongTy)) - return CompilerType(this, ast.UnsignedLongLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongLongTy); } else if (type_name.contains("long")) { if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongTy)) - return CompilerType(this, ast.UnsignedLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongTy); } else if (type_name.contains("short")) { if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) - return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + return GetType(ast.UnsignedShortTy); } else if (type_name.contains("char")) { if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) - return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + return GetType(ast.UnsignedCharTy); } else if (type_name.contains("int")) { if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) - return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + return GetType(ast.UnsignedIntTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedInt128Ty)) - return CompilerType(this, ast.UnsignedInt128Ty.getAsOpaquePtr()); + return GetType(ast.UnsignedInt128Ty); } } // We weren't able to match up a type name, just search by size if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) - return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + return GetType(ast.UnsignedCharTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) - return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + return GetType(ast.UnsignedShortTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) - return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + return GetType(ast.UnsignedIntTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongTy)) - return CompilerType(this, ast.UnsignedLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongLongTy)) - return CompilerType(this, ast.UnsignedLongLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongLongTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedInt128Ty)) - return CompilerType(this, ast.UnsignedInt128Ty.getAsOpaquePtr()); + return GetType(ast.UnsignedInt128Ty); break; case DW_ATE_unsigned_char: if (!ast.getLangOpts().CharIsSigned && type_name == "char") { if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) - return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + return GetType(ast.CharTy); } if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) - return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + return GetType(ast.UnsignedCharTy); if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) - return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + return GetType(ast.UnsignedShortTy); break; case DW_ATE_imaginary_float: @@ -1097,11 +1092,11 @@ CompilerType ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize( case DW_ATE_UTF: if (!type_name.empty()) { if (type_name == "char16_t") - return CompilerType(this, ast.Char16Ty.getAsOpaquePtr()); + return GetType(ast.Char16Ty); if (type_name == "char32_t") - return CompilerType(this, ast.Char32Ty.getAsOpaquePtr()); + return GetType(ast.Char32Ty); if (type_name == "char8_t") - return CompilerType(this, ast.Char8Ty.getAsOpaquePtr()); + return GetType(ast.Char8Ty); } break; } @@ -1129,7 +1124,7 @@ CompilerType ClangASTContext::GetCStringType(bool is_const) { if (is_const) char_type.addConst(); - return CompilerType(this, ast.getPointerType(char_type).getAsOpaquePtr()); + return GetType(ast.getPointerType(char_type)); } bool ClangASTContext::AreTypesSame(CompilerType type1, CompilerType type2, @@ -1179,13 +1174,11 @@ CompilerType ClangASTContext::GetTypeForDecl(clang::NamedDecl *decl) { } CompilerType ClangASTContext::GetTypeForDecl(TagDecl *decl) { - return CompilerType(this, - getASTContext().getTagDeclType(decl).getAsOpaquePtr()); + return GetType(getASTContext().getTagDeclType(decl)); } CompilerType ClangASTContext::GetTypeForDecl(ObjCInterfaceDecl *decl) { - return CompilerType( - this, getASTContext().getObjCInterfaceType(decl).getAsOpaquePtr()); + return GetType(getASTContext().getObjCInterfaceType(decl)); } #pragma mark Structure, Unions, Classes @@ -1259,7 +1252,7 @@ CompilerType ClangASTContext::CreateRecordType(DeclContext *decl_ctx, if (decl_ctx) decl_ctx->addDecl(decl); - return CompilerType(this, ast.getTagDeclType(decl).getAsOpaquePtr()); + return GetType(ast.getTagDeclType(decl)); } return CompilerType(); } @@ -1479,9 +1472,7 @@ CompilerType ClangASTContext::CreateClassTemplateSpecializationType( ClassTemplateSpecializationDecl *class_template_specialization_decl) { if (class_template_specialization_decl) { ASTContext &ast = getASTContext(); - return CompilerType(this, - ast.getTagDeclType(class_template_specialization_decl) - .getAsOpaquePtr()); + return GetType(ast.getTagDeclType(class_template_specialization_decl)); } return CompilerType(); } @@ -1607,7 +1598,7 @@ CompilerType ClangASTContext::CreateObjCClass(llvm::StringRef name, if (decl && metadata) SetMetadata(decl, *metadata); - return CompilerType(this, ast.getObjCInterfaceType(decl).getAsOpaquePtr()); + return GetType(ast.getObjCInterfaceType(decl)); } static inline bool BaseSpecifierIsEmpty(const CXXBaseSpecifier *b) { @@ -1940,11 +1931,8 @@ ClangASTContext::CreateFunctionType(const CompilerType &result_type, proto_info.TypeQuals = clang::Qualifiers::fromFastMask(type_quals); proto_info.RefQualifier = RQ_None; - return CompilerType(this, - getASTContext() - .getFunctionType(ClangUtil::GetQualType(result_type), - qual_type_args, proto_info) - .getAsOpaquePtr()); + return GetType(getASTContext().getFunctionType( + ClangUtil::GetQualType(result_type), qual_type_args, proto_info)); } ParmVarDecl *ClangASTContext::CreateParameterDeclaration( @@ -1974,7 +1962,7 @@ ClangASTContext::CreateBlockPointerType(const CompilerType &function_type) { QualType block_type = m_ast_up->getBlockPointerType( clang::QualType::getFromOpaquePtr(function_type.GetOpaqueQualType())); - return CompilerType(this, block_type.getAsOpaquePtr()); + return GetType(block_type); } #pragma mark Array Types @@ -1986,24 +1974,18 @@ CompilerType ClangASTContext::CreateArrayType(const CompilerType &element_type, ASTContext &ast = getASTContext(); if (is_vector) { - return CompilerType( - this, ast.getExtVectorType(ClangUtil::GetQualType(element_type), - element_count) - .getAsOpaquePtr()); + return GetType(ast.getExtVectorType(ClangUtil::GetQualType(element_type), + element_count)); } else { llvm::APInt ap_element_count(64, element_count); if (element_count == 0) { - return CompilerType(this, ast.getIncompleteArrayType( - ClangUtil::GetQualType(element_type), - clang::ArrayType::Normal, 0) - .getAsOpaquePtr()); + return GetType(ast.getIncompleteArrayType( + ClangUtil::GetQualType(element_type), clang::ArrayType::Normal, 0)); } else { - return CompilerType( - this, ast.getConstantArrayType(ClangUtil::GetQualType(element_type), - ap_element_count, nullptr, - clang::ArrayType::Normal, 0) - .getAsOpaquePtr()); + return GetType(ast.getConstantArrayType( + ClangUtil::GetQualType(element_type), ap_element_count, nullptr, + clang::ArrayType::Normal, 0)); } } } @@ -2077,7 +2059,7 @@ ClangASTContext::CreateEnumerationType(const char *name, DeclContext *decl_ctx, enum_decl->setAccess(AS_public); // TODO respect what's in the debug info - return CompilerType(this, ast.getTagDeclType(enum_decl).getAsOpaquePtr()); + return GetType(ast.getTagDeclType(enum_decl)); } return CompilerType(); } @@ -2088,40 +2070,40 @@ CompilerType ClangASTContext::GetIntTypeFromBitSize(size_t bit_size, if (is_signed) { if (bit_size == ast.getTypeSize(ast.SignedCharTy)) - return CompilerType(this, ast.SignedCharTy.getAsOpaquePtr()); + return GetType(ast.SignedCharTy); if (bit_size == ast.getTypeSize(ast.ShortTy)) - return CompilerType(this, ast.ShortTy.getAsOpaquePtr()); + return GetType(ast.ShortTy); if (bit_size == ast.getTypeSize(ast.IntTy)) - return CompilerType(this, ast.IntTy.getAsOpaquePtr()); + return GetType(ast.IntTy); if (bit_size == ast.getTypeSize(ast.LongTy)) - return CompilerType(this, ast.LongTy.getAsOpaquePtr()); + return GetType(ast.LongTy); if (bit_size == ast.getTypeSize(ast.LongLongTy)) - return CompilerType(this, ast.LongLongTy.getAsOpaquePtr()); + return GetType(ast.LongLongTy); if (bit_size == ast.getTypeSize(ast.Int128Ty)) - return CompilerType(this, ast.Int128Ty.getAsOpaquePtr()); + return GetType(ast.Int128Ty); } else { if (bit_size == ast.getTypeSize(ast.UnsignedCharTy)) - return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + return GetType(ast.UnsignedCharTy); if (bit_size == ast.getTypeSize(ast.UnsignedShortTy)) - return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + return GetType(ast.UnsignedShortTy); if (bit_size == ast.getTypeSize(ast.UnsignedIntTy)) - return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + return GetType(ast.UnsignedIntTy); if (bit_size == ast.getTypeSize(ast.UnsignedLongTy)) - return CompilerType(this, ast.UnsignedLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongTy); if (bit_size == ast.getTypeSize(ast.UnsignedLongLongTy)) - return CompilerType(this, ast.UnsignedLongLongTy.getAsOpaquePtr()); + return GetType(ast.UnsignedLongLongTy); if (bit_size == ast.getTypeSize(ast.UnsignedInt128Ty)) - return CompilerType(this, ast.UnsignedInt128Ty.getAsOpaquePtr()); + return GetType(ast.UnsignedInt128Ty); } return CompilerType(); } @@ -2682,8 +2664,7 @@ bool ClangASTContext::IsVectorType(lldb::opaque_compiler_type_t type, if (size) *size = vector_type->getNumElements(); if (element_type) - *element_type = - CompilerType(this, vector_type->getElementType().getAsOpaquePtr()); + *element_type = GetType(vector_type->getElementType()); } return true; } break; @@ -3372,9 +3353,7 @@ bool ClangASTContext::IsPossibleDynamicType(lldb::opaque_compiler_type_t type, if (metadata) success = metadata->GetIsDynamicCXXType(); else { - is_complete = - CompilerType(this, pointee_qual_type.getAsOpaquePtr()) - .GetCompleteType(); + is_complete = GetType(pointee_qual_type).GetCompleteType(); if (is_complete) success = cxx_record_decl->isDynamicClass(); else @@ -3708,12 +3687,10 @@ ClangASTContext::GetTypeInfo(lldb::opaque_compiler_type_t type, return eTypeIsTemplate; case clang::Type::Typedef: - return eTypeIsTypedef | - CompilerType(this, llvm::cast<clang::TypedefType>(qual_type) - ->getDecl() - ->getUnderlyingType() - .getAsOpaquePtr()) - .GetTypeInfo(pointee_or_element_clang_type); + return eTypeIsTypedef | GetType(llvm::cast<clang::TypedefType>(qual_type) + ->getDecl() + ->getUnderlyingType()) + .GetTypeInfo(pointee_or_element_clang_type); case clang::Type::UnresolvedUsing: return 0; @@ -3811,10 +3788,9 @@ ClangASTContext::GetMinimumLanguage(lldb::opaque_compiler_type_t type) { } break; case clang::Type::Typedef: - return CompilerType(this, llvm::cast<clang::TypedefType>(qual_type) - ->getDecl() - ->getUnderlyingType() - .getAsOpaquePtr()) + return GetType(llvm::cast<clang::TypedefType>(qual_type) + ->getDecl() + ->getUnderlyingType()) .GetMinimumLanguage(); } } @@ -3962,8 +3938,8 @@ ClangASTContext::GetArrayElementType(lldb::opaque_compiler_type_t type, if (!array_eletype) return CompilerType(); - CompilerType element_type( - this, array_eletype->getCanonicalTypeUnqualified().getAsOpaquePtr()); + CompilerType element_type = + GetType(array_eletype->getCanonicalTypeUnqualified()); // TODO: the real stride will be >= this value.. find the real one! if (stride) @@ -3981,19 +3957,12 @@ CompilerType ClangASTContext::GetArrayType(lldb::opaque_compiler_type_t type, clang::QualType qual_type(GetCanonicalQualType(type)); clang::ASTContext &ast_ctx = getASTContext(); if (size != 0) - return CompilerType( - this, ast_ctx - .getConstantArrayType( - qual_type, llvm::APInt(64, size), nullptr, - clang::ArrayType::ArraySizeModifier::Normal, 0) - .getAsOpaquePtr()); + return GetType(ast_ctx.getConstantArrayType( + qual_type, llvm::APInt(64, size), nullptr, + clang::ArrayType::ArraySizeModifier::Normal, 0)); else - return CompilerType( - this, - ast_ctx - .getIncompleteArrayType( - qual_type, clang::ArrayType::ArraySizeModifier::Normal, 0) - .getAsOpaquePtr()); + return GetType(ast_ctx.getIncompleteArrayType( + qual_type, clang::ArrayType::ArraySizeModifier::Normal, 0)); } return CompilerType(); @@ -4002,7 +3971,7 @@ CompilerType ClangASTContext::GetArrayType(lldb::opaque_compiler_type_t type, CompilerType ClangASTContext::GetCanonicalType(lldb::opaque_compiler_type_t type) { if (type) - return CompilerType(this, GetCanonicalQualType(type).getAsOpaquePtr()); + return GetType(GetCanonicalQualType(type)); return CompilerType(); } @@ -4022,9 +3991,8 @@ static clang::QualType GetFullyUnqualifiedType_Impl(clang::ASTContext *ast, CompilerType ClangASTContext::GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) { if (type) - return CompilerType( - this, GetFullyUnqualifiedType_Impl(&getASTContext(), GetQualType(type)) - .getAsOpaquePtr()); + return GetType( + GetFullyUnqualifiedType_Impl(&getASTContext(), GetQualType(type))); return CompilerType(); } @@ -4047,7 +4015,7 @@ CompilerType ClangASTContext::GetFunctionArgumentTypeAtIndex( if (func) { const uint32_t num_args = func->getNumParams(); if (idx < num_args) - return CompilerType(this, func->getParamType(idx).getAsOpaquePtr()); + return GetType(func->getParamType(idx)); } } return CompilerType(); @@ -4060,7 +4028,7 @@ ClangASTContext::GetFunctionReturnType(lldb::opaque_compiler_type_t type) { const clang::FunctionProtoType *func = llvm::dyn_cast<clang::FunctionProtoType>(qual_type.getTypePtr()); if (func) - return CompilerType(this, func->getReturnType().getAsOpaquePtr()); + return GetType(func->getReturnType()); } return CompilerType(); } @@ -4161,8 +4129,7 @@ ClangASTContext::GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, kind = lldb::eMemberFunctionKindDestructor; else kind = lldb::eMemberFunctionKindInstanceMethod; - clang_type = CompilerType( - this, cxx_method_decl->getType().getAsOpaquePtr()); + clang_type = GetType(cxx_method_decl->getType()); clang_decl = CompilerDecl(this, cxx_method_decl); } } @@ -4246,8 +4213,7 @@ ClangASTContext::GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, CompilerType ClangASTContext::GetNonReferenceType(lldb::opaque_compiler_type_t type) { if (type) - return CompilerType( - this, GetQualType(type).getNonReferenceType().getAsOpaquePtr()); + return GetType(GetQualType(type).getNonReferenceType()); return CompilerType(); } @@ -4277,7 +4243,7 @@ CompilerType ClangASTContext::CreateTypedefType( decl_ctx->addDecl(decl); // Get a uniqued clang::QualType for the typedef decl type - return CompilerType(ast, clang_ast.getTypedefType(decl).getAsOpaquePtr()); + return ast->GetType(clang_ast.getTypedefType(decl)); } return CompilerType(); } @@ -4286,8 +4252,7 @@ CompilerType ClangASTContext::GetPointeeType(lldb::opaque_compiler_type_t type) { if (type) { clang::QualType qual_type(GetQualType(type)); - return CompilerType( - this, qual_type.getTypePtr()->getPointeeType().getAsOpaquePtr()); + return GetType(qual_type.getTypePtr()->getPointeeType()); } return CompilerType(); } @@ -4301,13 +4266,10 @@ ClangASTContext::GetPointerType(lldb::opaque_compiler_type_t type) { switch (type_class) { case clang::Type::ObjCObject: case clang::Type::ObjCInterface: - return CompilerType( - this, - getASTContext().getObjCObjectPointerType(qual_type).getAsOpaquePtr()); + return GetType(getASTContext().getObjCObjectPointerType(qual_type)); default: - return CompilerType( - this, getASTContext().getPointerType(qual_type).getAsOpaquePtr()); + return GetType(getASTContext().getPointerType(qual_type)); } } return CompilerType(); @@ -4316,9 +4278,7 @@ ClangASTContext::GetPointerType(lldb::opaque_compiler_type_t type) { CompilerType ClangASTContext::GetLValueReferenceType(lldb::opaque_compiler_type_t type) { if (type) - return CompilerType(this, getASTContext() - .getLValueReferenceType(GetQualType(type)) - .getAsOpaquePtr()); + return GetType(getASTContext().getLValueReferenceType(GetQualType(type))); else return CompilerType(); } @@ -4326,9 +4286,7 @@ ClangASTContext::GetLValueReferenceType(lldb::opaque_compiler_type_t type) { CompilerType ClangASTContext::GetRValueReferenceType(lldb::opaque_compiler_type_t type) { if (type) - return CompilerType(this, getASTContext() - .getRValueReferenceType(GetQualType(type)) - .getAsOpaquePtr()); + return GetType(getASTContext().getRValueReferenceType(GetQualType(type))); else return CompilerType(); } @@ -4336,8 +4294,7 @@ ClangASTContext::GetRValueReferenceType(lldb::opaque_compiler_type_t type) { CompilerType ClangASTContext::GetAtomicType(lldb::opaque_compiler_type_t type) { if (!type) return CompilerType(); - return CompilerType( - this, getASTContext().getAtomicType(GetQualType(type)).getAsOpaquePtr()); + return GetType(getASTContext().getAtomicType(GetQualType(type))); } CompilerType @@ -4345,7 +4302,7 @@ ClangASTContext::AddConstModifier(lldb::opaque_compiler_type_t type) { if (type) { clang::QualType result(GetQualType(type)); result.addConst(); - return CompilerType(this, result.getAsOpaquePtr()); + return GetType(result); } return CompilerType(); } @@ -4355,7 +4312,7 @@ ClangASTContext::AddVolatileModifier(lldb::opaque_compiler_type_t type) { if (type) { clang::QualType result(GetQualType(type)); result.addVolatile(); - return CompilerType(this, result.getAsOpaquePtr()); + return GetType(result); } return CompilerType(); } @@ -4365,7 +4322,7 @@ ClangASTContext::AddRestrictModifier(lldb::opaque_compiler_type_t type) { if (type) { clang::QualType result(GetQualType(type)); result.addRestrict(); - return CompilerType(this, result.getAsOpaquePtr()); + return GetType(result); } return CompilerType(); } @@ -4405,7 +4362,7 @@ ClangASTContext::CreateTypedef(lldb::opaque_compiler_type_t type, decl->setAccess(clang::AS_public); // TODO respect proper access specifier // Get a uniqued clang::QualType for the typedef decl type - return CompilerType(this, clang_ast.getTypedefType(decl).getAsOpaquePtr()); + return GetType(clang_ast.getTypedefType(decl)); } return CompilerType(); } @@ -4416,8 +4373,7 @@ ClangASTContext::GetTypedefedType(lldb::opaque_compiler_type_t type) { const clang::TypedefType *typedef_type = llvm::dyn_cast<clang::TypedefType>(GetQualType(type)); if (typedef_type) - return CompilerType( - this, typedef_type->getDecl()->getUnderlyingType().getAsOpaquePtr()); + return GetType(typedef_type->getDecl()->getUnderlyingType()); } return CompilerType(); } @@ -4466,8 +4422,7 @@ ClangASTContext::GetBitSize(lldb::opaque_compiler_type_t type, ObjCLanguageRuntime *objc_runtime = ObjCLanguageRuntime::Get(*process); if (objc_runtime) { uint64_t bit_size = 0; - if (objc_runtime->GetTypeBitSize( - CompilerType(this, qual_type.getAsOpaquePtr()), bit_size)) + if (objc_runtime->GetTypeBitSize(GetType(qual_type), bit_size)) return bit_size; } } else { @@ -4725,9 +4680,7 @@ lldb::Encoding ClangASTContext::GetEncoding(lldb::opaque_compiler_type_t type, const clang::ComplexType *complex_type = qual_type->getAsComplexIntegerType(); if (complex_type) - encoding = - CompilerType(this, complex_type->getElementType().getAsOpaquePtr()) - .GetEncoding(count); + encoding = GetType(complex_type->getElementType()).GetEncoding(count); else encoding = lldb::eEncodingSint; } @@ -5042,8 +4995,7 @@ uint32_t ClangASTContext::GetNumChildren(lldb::opaque_compiler_type_t type, llvm::cast<clang::ObjCObjectPointerType>(qual_type.getTypePtr()); clang::QualType pointee_type = pointer_type->getPointeeType(); uint32_t num_pointee_children = - CompilerType(this, pointee_type.getAsOpaquePtr()) - .GetNumChildren(omit_empty_base_classes, exe_ctx); + GetType(pointee_type).GetNumChildren(omit_empty_base_classes, exe_ctx); // If this type points to a simple type, then it has 1 child if (num_pointee_children == 0) num_children = 1; @@ -5076,8 +5028,7 @@ uint32_t ClangASTContext::GetNumChildren(lldb::opaque_compiler_type_t type, llvm::cast<clang::PointerType>(qual_type.getTypePtr()); clang::QualType pointee_type(pointer_type->getPointeeType()); uint32_t num_pointee_children = - CompilerType(this, pointee_type.getAsOpaquePtr()) - .GetNumChildren(omit_empty_base_classes, exe_ctx); + GetType(pointee_type).GetNumChildren(omit_empty_base_classes, exe_ctx); if (num_pointee_children == 0) { // We have a pointer to a pointee type that claims it has no children. We // will want to look at @@ -5092,8 +5043,7 @@ uint32_t ClangASTContext::GetNumChildren(lldb::opaque_compiler_type_t type, llvm::cast<clang::ReferenceType>(qual_type.getTypePtr()); clang::QualType pointee_type = reference_type->getPointeeType(); uint32_t num_pointee_children = - CompilerType(this, pointee_type.getAsOpaquePtr()) - .GetNumChildren(omit_empty_base_classes, exe_ctx); + GetType(pointee_type).GetNumChildren(omit_empty_base_classes, exe_ctx); // If this type points to a simple type, then it has 1 child if (num_pointee_children == 0) num_children = 1; @@ -5194,8 +5144,7 @@ void ClangASTContext::ForEachEnumerator( if (enum_type) { const clang::EnumDecl *enum_decl = enum_type->getDecl(); if (enum_decl) { - CompilerType integer_type(this, - enum_decl->getIntegerType().getAsOpaquePtr()); + CompilerType integer_type = GetType(enum_decl->getIntegerType()); clang::EnumDecl::enumerator_iterator enum_pos, enum_end_pos; for (enum_pos = enum_decl->enumerator_begin(), @@ -5381,7 +5330,7 @@ CompilerType ClangASTContext::GetFieldAtIndex(lldb::opaque_compiler_type_t type, if (is_bitfield_ptr) *is_bitfield_ptr = is_bitfield; - return CompilerType(this, field->getType().getAsOpaquePtr()); + return GetType(field->getType()); } } } @@ -5539,7 +5488,7 @@ CompilerType ClangASTContext::GetDirectBaseClassAtIndex( .getQuantity() * 8; } - return CompilerType(this, base_class->getType().getAsOpaquePtr()); + return GetType(base_class->getType()); } } } @@ -5563,10 +5512,8 @@ CompilerType ClangASTContext::GetDirectBaseClassAtIndex( if (superclass_interface_decl) { if (bit_offset_ptr) *bit_offset_ptr = 0; - return CompilerType( - this, getASTContext() - .getObjCInterfaceType(superclass_interface_decl) - .getAsOpaquePtr()); + return GetType(getASTContext().getObjCInterfaceType( + superclass_interface_decl)); } } } @@ -5586,10 +5533,8 @@ CompilerType ClangASTContext::GetDirectBaseClassAtIndex( if (superclass_interface_decl) { if (bit_offset_ptr) *bit_offset_ptr = 0; - return CompilerType( - this, getASTContext() - .getObjCInterfaceType(superclass_interface_decl) - .getAsOpaquePtr()); + return GetType(getASTContext().getObjCInterfaceType( + superclass_interface_decl)); } } } @@ -5632,7 +5577,7 @@ CompilerType ClangASTContext::GetVirtualBaseClassAtIndex( .getQuantity() * 8; } - return CompilerType(this, base_class->getType().getAsOpaquePtr()); + return GetType(base_class->getType()); } } } @@ -5820,8 +5765,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( child_byte_size = getASTContext().getTypeSize(getASTContext().ObjCBuiltinClassTy) / CHAR_BIT; - return CompilerType( - this, getASTContext().ObjCBuiltinClassTy.getAsOpaquePtr()); + return GetType(getASTContext().ObjCBuiltinClassTy); default: break; @@ -5884,8 +5828,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( // Base classes should be a multiple of 8 bits in size child_byte_offset = bit_offset / 8; - CompilerType base_class_clang_type( - this, base_class->getType().getAsOpaquePtr()); + CompilerType base_class_clang_type = GetType(base_class->getType()); child_name = base_class_clang_type.GetTypeName().AsCString(""); Optional<uint64_t> size = base_class_clang_type.GetBitSize(get_exe_scope()); @@ -5917,8 +5860,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( // Figure out the type byte size (field_type_info.first) and // alignment (field_type_info.second) from the AST context. - CompilerType field_clang_type(this, - field->getType().getAsOpaquePtr()); + CompilerType field_clang_type = GetType(field->getType()); assert(field_idx < record_layout.getFieldCount()); Optional<uint64_t> size = field_clang_type.GetByteSize(get_exe_scope()); @@ -5964,10 +5906,9 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( class_interface_decl->getSuperClass(); if (superclass_interface_decl) { if (omit_empty_base_classes) { - CompilerType base_class_clang_type( - this, getASTContext() - .getObjCInterfaceType(superclass_interface_decl) - .getAsOpaquePtr()); + CompilerType base_class_clang_type = + GetType(getASTContext().getObjCInterfaceType( + superclass_interface_decl)); if (base_class_clang_type.GetNumChildren(omit_empty_base_classes, exe_ctx) > 0) { if (idx == 0) { @@ -5985,7 +5926,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( child_byte_offset = 0; child_is_base_class = true; - return CompilerType(this, ivar_qual_type.getAsOpaquePtr()); + return GetType(ivar_qual_type); } ++child_idx; @@ -6029,8 +5970,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( ObjCLanguageRuntime *objc_runtime = ObjCLanguageRuntime::Get(*process); if (objc_runtime != nullptr) { - CompilerType parent_ast_type( - this, parent_qual_type.getAsOpaquePtr()); + CompilerType parent_ast_type = GetType(parent_qual_type); child_byte_offset = objc_runtime->GetByteOffsetForIvar( parent_ast_type, ivar_decl->getNameAsString().c_str()); } @@ -6060,7 +6000,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( child_bitfield_bit_offset = bit_offset % 8; } - return CompilerType(this, ivar_qual_type.getAsOpaquePtr()); + return GetType(ivar_qual_type); } ++child_idx; } @@ -6111,8 +6051,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( const clang::VectorType *array = llvm::cast<clang::VectorType>(parent_qual_type.getTypePtr()); if (array) { - CompilerType element_type(this, - array->getElementType().getAsOpaquePtr()); + CompilerType element_type = GetType(array->getElementType()); if (element_type.GetCompleteType()) { char element_name[64]; ::snprintf(element_name, sizeof(element_name), "[%" PRIu64 "]", @@ -6134,8 +6073,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( if (ignore_array_bounds || idx_is_valid) { const clang::ArrayType *array = GetQualType(type)->getAsArrayTypeUnsafe(); if (array) { - CompilerType element_type(this, - array->getElementType().getAsOpaquePtr()); + CompilerType element_type = GetType(array->getElementType()); if (element_type.GetCompleteType()) { child_name = llvm::formatv("[{0}]", idx); if (Optional<uint64_t> size = @@ -6193,8 +6131,8 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( if (idx_is_valid) { const clang::ReferenceType *reference_type = llvm::cast<clang::ReferenceType>(parent_qual_type.getTypePtr()); - CompilerType pointee_clang_type( - this, reference_type->getPointeeType().getAsOpaquePtr()); + CompilerType pointee_clang_type = + GetType(reference_type->getPointeeType()); if (transparent_pointers && pointee_clang_type.IsAggregateType()) { child_is_deref_of_parent = false; bool tmp_child_is_deref_of_parent = false; @@ -6346,7 +6284,7 @@ size_t ClangASTContext::GetIndexOfChildMemberWithName( field != field_end; ++field, ++child_idx) { llvm::StringRef field_name = field->getName(); if (field_name.empty()) { - CompilerType field_type(this, field->getType().getAsOpaquePtr()); + CompilerType field_type = GetType(field->getType()); child_indexes.push_back(child_idx); if (field_type.GetIndexOfChildMemberWithName( name, omit_empty_base_classes, child_indexes)) @@ -6457,10 +6395,9 @@ size_t ClangASTContext::GetIndexOfChildMemberWithName( // superclass... child_indexes.push_back(0); - CompilerType superclass_clang_type( - this, getASTContext() - .getObjCInterfaceType(superclass_interface_decl) - .getAsOpaquePtr()); + CompilerType superclass_clang_type = + GetType(getASTContext().getObjCInterfaceType( + superclass_interface_decl)); if (superclass_clang_type.GetIndexOfChildMemberWithName( name, omit_empty_base_classes, child_indexes)) { // We did find an ivar in a superclass so just return the @@ -6478,10 +6415,9 @@ size_t ClangASTContext::GetIndexOfChildMemberWithName( break; case clang::Type::ObjCObjectPointer: { - CompilerType objc_object_clang_type( - this, llvm::cast<clang::ObjCObjectPointerType>(qual_type.getTypePtr()) - ->getPointeeType() - .getAsOpaquePtr()); + CompilerType objc_object_clang_type = GetType( + llvm::cast<clang::ObjCObjectPointerType>(qual_type.getTypePtr()) + ->getPointeeType()); return objc_object_clang_type.GetIndexOfChildMemberWithName( name, omit_empty_base_classes, child_indexes); } break; @@ -6531,7 +6467,7 @@ size_t ClangASTContext::GetIndexOfChildMemberWithName( const clang::ReferenceType *reference_type = llvm::cast<clang::ReferenceType>(qual_type.getTypePtr()); clang::QualType pointee_type(reference_type->getPointeeType()); - CompilerType pointee_clang_type(this, pointee_type.getAsOpaquePtr()); + CompilerType pointee_clang_type = GetType(pointee_type); if (pointee_clang_type.IsAggregateType()) { return pointee_clang_type.GetIndexOfChildMemberWithName( @@ -6597,8 +6533,7 @@ ClangASTContext::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, !ClangASTContext::RecordHasFields(base_class_decl)) continue; - CompilerType base_class_clang_type( - this, base_class->getType().getAsOpaquePtr()); + CompilerType base_class_clang_type = GetType(base_class->getType()); std::string base_class_type_name( base_class_clang_type.GetTypeName().AsCString("")); if (base_class_type_name == name) @@ -6661,10 +6596,9 @@ ClangASTContext::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, break; case clang::Type::ObjCObjectPointer: { - CompilerType pointee_clang_type( - this, llvm::cast<clang::ObjCObjectPointerType>(qual_type.getTypePtr()) - ->getPointeeType() - .getAsOpaquePtr()); + CompilerType pointee_clang_type = GetType( + llvm::cast<clang::ObjCObjectPointerType>(qual_type.getTypePtr()) + ->getPointeeType()); return pointee_clang_type.GetIndexOfChildWithName( name, omit_empty_base_classes); } break; @@ -6713,8 +6647,7 @@ ClangASTContext::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, case clang::Type::RValueReference: { const clang::ReferenceType *reference_type = llvm::cast<clang::ReferenceType>(qual_type.getTypePtr()); - CompilerType pointee_type( - this, reference_type->getPointeeType().getAsOpaquePtr()); + CompilerType pointee_type = GetType(reference_type->getPointeeType()); if (pointee_type.IsAggregateType()) { return pointee_type.GetIndexOfChildWithName(name, @@ -6725,8 +6658,7 @@ ClangASTContext::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, case clang::Type::Pointer: { const clang::PointerType *pointer_type = llvm::cast<clang::PointerType>(qual_type.getTypePtr()); - CompilerType pointee_type( - this, pointer_type->getPointeeType().getAsOpaquePtr()); + CompilerType pointee_type = GetType(pointer_type->getPointeeType()); if (pointee_type.IsAggregateType()) { return pointee_type.GetIndexOfChildWithName(name, @@ -6864,7 +6796,7 @@ ClangASTContext::GetTypeTemplateArgument(lldb::opaque_compiler_type_t type, if (template_arg.getKind() != clang::TemplateArgument::Type) return CompilerType(); - return CompilerType(this, template_arg.getAsType().getAsOpaquePtr()); + return GetType(template_arg.getAsType()); } Optional<CompilerType::IntegralTemplateArgument> @@ -6881,8 +6813,7 @@ ClangASTContext::GetIntegralTemplateArgument(lldb::opaque_compiler_type_t type, return llvm::None; return { - {template_arg.getAsIntegral(), - CompilerType(this, template_arg.getIntegralType().getAsOpaquePtr())}}; + {template_arg.getAsIntegral(), GetType(template_arg.getIntegralType())}}; } CompilerType ClangASTContext::GetTypeForFormatters(void *type) { @@ -7461,8 +7392,7 @@ bool ClangASTContext::AddObjCClassProperty( if (property_clang_type.IsValid()) property_clang_type_to_access = property_clang_type; else if (ivar_decl) - property_clang_type_to_access = - CompilerType(ast, ivar_decl->getType().getAsOpaquePtr()); + property_clang_type_to_access = ast->GetType(ivar_decl->getType()); if (!class_interface_decl || !property_clang_type_to_access.IsValid()) return false; @@ -7985,7 +7915,7 @@ ClangASTContext::GetEnumerationIntegerType(lldb::opaque_compiler_type_t type) { if (enutype) { clang::EnumDecl *enum_decl = enutype->getDecl(); if (enum_decl) - return CompilerType(this, enum_decl->getIntegerType().getAsOpaquePtr()); + return GetType(enum_decl->getIntegerType()); } } return CompilerType(); @@ -8000,11 +7930,9 @@ ClangASTContext::CreateMemberPointerType(const CompilerType &type, llvm::dyn_cast<ClangASTContext>(type.GetTypeSystem()); if (!ast) return CompilerType(); - return CompilerType(ast, ast->getASTContext() - .getMemberPointerType( - ClangUtil::GetQualType(pointee_type), - ClangUtil::GetQualType(type).getTypePtr()) - .getAsOpaquePtr()); + return ast->GetType(ast->getASTContext().getMemberPointerType( + ClangUtil::GetQualType(pointee_type), + ClangUtil::GetQualType(type).getTypePtr())); } return CompilerType(); } @@ -8134,8 +8062,7 @@ void ClangASTContext::DumpValue( getASTContext().getTypeInfo(base_class_qual_type); // Dump the value of the member - CompilerType base_clang_type(this, - base_class_qual_type.getAsOpaquePtr()); + CompilerType base_clang_type = GetType(base_class_qual_type); base_clang_type.DumpValue( exe_ctx, s, // Stream to dump to @@ -8201,7 +8128,7 @@ void ClangASTContext::DumpValue( s->Printf("%s = ", field->getNameAsString().c_str()); // Dump the value of the member - CompilerType field_clang_type(this, field_type.getAsOpaquePtr()); + CompilerType field_clang_type = GetType(field_type); field_clang_type.DumpValue( exe_ctx, s, // Stream to dump to @@ -8281,7 +8208,7 @@ void ClangASTContext::DumpValue( s->PutChar('"'); return; } else { - CompilerType element_clang_type(this, element_qual_type.getAsOpaquePtr()); + CompilerType element_clang_type = GetType(element_qual_type); lldb::Format element_format = element_clang_type.GetFormat(); for (element_idx = 0; element_idx < element_count; ++element_idx) { @@ -8332,7 +8259,7 @@ void ClangASTContext::DumpValue( ->getDecl() ->getUnderlyingType(); - CompilerType typedef_clang_type(this, typedef_qual_type.getAsOpaquePtr()); + CompilerType typedef_clang_type = GetType(typedef_qual_type); lldb::Format typedef_format = typedef_clang_type.GetFormat(); clang::TypeInfo typedef_type_info = getASTContext().getTypeInfo(typedef_qual_type); @@ -8357,8 +8284,7 @@ void ClangASTContext::DumpValue( case clang::Type::Auto: { clang::QualType elaborated_qual_type = llvm::cast<clang::AutoType>(qual_type)->getDeducedType(); - CompilerType elaborated_clang_type(this, - elaborated_qual_type.getAsOpaquePtr()); + CompilerType elaborated_clang_type = GetType(elaborated_qual_type); lldb::Format elaborated_format = elaborated_clang_type.GetFormat(); clang::TypeInfo elaborated_type_info = getASTContext().getTypeInfo(elaborated_qual_type); @@ -8383,8 +8309,7 @@ void ClangASTContext::DumpValue( case clang::Type::Elaborated: { clang::QualType elaborated_qual_type = llvm::cast<clang::ElaboratedType>(qual_type)->getNamedType(); - CompilerType elaborated_clang_type(this, - elaborated_qual_type.getAsOpaquePtr()); + CompilerType elaborated_clang_type = GetType(elaborated_qual_type); lldb::Format elaborated_format = elaborated_clang_type.GetFormat(); clang::TypeInfo elaborated_type_info = getASTContext().getTypeInfo(elaborated_qual_type); @@ -8409,7 +8334,7 @@ void ClangASTContext::DumpValue( case clang::Type::Paren: { clang::QualType desugar_qual_type = llvm::cast<clang::ParenType>(qual_type)->desugar(); - CompilerType desugar_clang_type(this, desugar_qual_type.getAsOpaquePtr()); + CompilerType desugar_clang_type = GetType(desugar_qual_type); lldb::Format desugar_format = desugar_clang_type.GetFormat(); clang::TypeInfo desugar_type_info = @@ -8550,7 +8475,7 @@ bool ClangASTContext::DumpTypeValue( llvm::cast<clang::TypedefType>(qual_type) ->getDecl() ->getUnderlyingType(); - CompilerType typedef_clang_type(this, typedef_qual_type.getAsOpaquePtr()); + CompilerType typedef_clang_type = GetType(typedef_qual_type); if (format == eFormatDefault) format = typedef_clang_type.GetFormat(); clang::TypeInfo typedef_type_info = @@ -8969,10 +8894,10 @@ CompilerDeclContext ClangASTContext::DeclGetDeclContext(void *opaque_decl) { CompilerType ClangASTContext::DeclGetFunctionReturnType(void *opaque_decl) { if (clang::FunctionDecl *func_decl = llvm::dyn_cast<clang::FunctionDecl>((clang::Decl *)opaque_decl)) - return CompilerType(this, func_decl->getReturnType().getAsOpaquePtr()); + return GetType(func_decl->getReturnType()); if (clang::ObjCMethodDecl *objc_method = llvm::dyn_cast<clang::ObjCMethodDecl>((clang::Decl *)opaque_decl)) - return CompilerType(this, objc_method->getReturnType().getAsOpaquePtr()); + return GetType(objc_method->getReturnType()); else return CompilerType(); } @@ -8995,15 +8920,13 @@ CompilerType ClangASTContext::DeclGetFunctionArgumentType(void *opaque_decl, if (idx < func_decl->param_size()) { ParmVarDecl *var_decl = func_decl->getParamDecl(idx); if (var_decl) - return CompilerType(this, var_decl->getOriginalType().getAsOpaquePtr()); + return GetType(var_decl->getOriginalType()); } } else if (clang::ObjCMethodDecl *objc_method = llvm::dyn_cast<clang::ObjCMethodDecl>( (clang::Decl *)opaque_decl)) { if (idx < objc_method->param_size()) - return CompilerType( - this, - objc_method->parameters()[idx]->getOriginalType().getAsOpaquePtr()); + return GetType(objc_method->parameters()[idx]->getOriginalType()); } return CompilerType(); } |