@@ -1787,8 +1787,8 @@ bool TypeSystemClang::RecordHasFields(const RecordDecl *record_decl) {
1787
1787
// -flimit-debug-info instead of just seeing nothing if this is a base class
1788
1788
// (since we were hiding empty base classes), or nothing when you turn open
1789
1789
// an valiable whose type was incomplete.
1790
- ClangASTMetadata * meta_data = GetMetadata (record_decl);
1791
- if ( meta_data && meta_data->IsForcefullyCompleted ())
1790
+ if (std::optional< ClangASTMetadata> meta_data = GetMetadata (record_decl);
1791
+ meta_data && meta_data->IsForcefullyCompleted ())
1792
1792
return true ;
1793
1793
1794
1794
return false ;
@@ -2465,27 +2465,31 @@ void TypeSystemClang::SetMetadataAsUserID(const clang::Type *type,
2465
2465
}
2466
2466
2467
2467
void TypeSystemClang::SetMetadata (const clang::Decl *object,
2468
- ClangASTMetadata & metadata) {
2468
+ ClangASTMetadata metadata) {
2469
2469
m_decl_metadata[object] = metadata;
2470
2470
}
2471
2471
2472
2472
void TypeSystemClang::SetMetadata (const clang::Type *object,
2473
- ClangASTMetadata & metadata) {
2473
+ ClangASTMetadata metadata) {
2474
2474
m_type_metadata[object] = metadata;
2475
2475
}
2476
2476
2477
- ClangASTMetadata *TypeSystemClang::GetMetadata (const clang::Decl *object) {
2477
+ std::optional<ClangASTMetadata>
2478
+ TypeSystemClang::GetMetadata (const clang::Decl *object) {
2478
2479
auto It = m_decl_metadata.find (object);
2479
2480
if (It != m_decl_metadata.end ())
2480
- return &It->second ;
2481
- return nullptr ;
2481
+ return It->second ;
2482
+
2483
+ return std::nullopt;
2482
2484
}
2483
2485
2484
- ClangASTMetadata *TypeSystemClang::GetMetadata (const clang::Type *object) {
2486
+ std::optional<ClangASTMetadata>
2487
+ TypeSystemClang::GetMetadata (const clang::Type *object) {
2485
2488
auto It = m_type_metadata.find (object);
2486
2489
if (It != m_type_metadata.end ())
2487
- return &It->second ;
2488
- return nullptr ;
2490
+ return It->second ;
2491
+
2492
+ return std::nullopt;
2489
2493
}
2490
2494
2491
2495
void TypeSystemClang::SetCXXRecordDeclAccess (const clang::CXXRecordDecl *object,
@@ -2934,9 +2938,10 @@ bool TypeSystemClang::IsRuntimeGeneratedType(
2934
2938
clang::ObjCInterfaceDecl *result_iface_decl =
2935
2939
llvm::dyn_cast<clang::ObjCInterfaceDecl>(decl_ctx);
2936
2940
2937
- ClangASTMetadata * ast_metadata = GetMetadata (result_iface_decl);
2941
+ std::optional< ClangASTMetadata> ast_metadata = GetMetadata (result_iface_decl);
2938
2942
if (!ast_metadata)
2939
2943
return false ;
2944
+
2940
2945
return (ast_metadata->GetISAPtr () != 0 );
2941
2946
}
2942
2947
@@ -3622,8 +3627,8 @@ bool TypeSystemClang::IsPossibleDynamicType(lldb::opaque_compiler_type_t type,
3622
3627
if (is_complete)
3623
3628
success = cxx_record_decl->isDynamicClass ();
3624
3629
else {
3625
- ClangASTMetadata * metadata = GetMetadata (cxx_record_decl);
3626
- if (metadata )
3630
+ if (std::optional< ClangASTMetadata> metadata =
3631
+ GetMetadata (cxx_record_decl) )
3627
3632
success = metadata->GetIsDynamicCXXType ();
3628
3633
else {
3629
3634
is_complete = GetType (pointee_qual_type).GetCompleteType ();
@@ -5326,7 +5331,8 @@ GetDynamicArrayInfo(TypeSystemClang &ast, SymbolFile *sym_file,
5326
5331
clang::QualType qual_type,
5327
5332
const ExecutionContext *exe_ctx) {
5328
5333
if (qual_type->isIncompleteArrayType ())
5329
- if (auto *metadata = ast.GetMetadata (qual_type.getTypePtr ()))
5334
+ if (std::optional<ClangASTMetadata> metadata =
5335
+ ast.GetMetadata (qual_type.getTypePtr ()))
5330
5336
return sym_file->GetDynamicArrayInfoForUID (metadata->GetUserID (),
5331
5337
exe_ctx);
5332
5338
return std::nullopt;
@@ -8868,8 +8874,7 @@ void TypeSystemClang::DumpTypeDescription(lldb::opaque_compiler_type_t type,
8868
8874
8869
8875
CompilerType ct (weak_from_this (), type);
8870
8876
const clang::Type *clang_type = ClangUtil::GetQualType (ct).getTypePtr ();
8871
- ClangASTMetadata *metadata = GetMetadata (clang_type);
8872
- if (metadata) {
8877
+ if (std::optional<ClangASTMetadata> metadata = GetMetadata (clang_type)) {
8873
8878
metadata->Dump (&s);
8874
8879
}
8875
8880
}
@@ -9490,7 +9495,7 @@ bool TypeSystemClang::DeclContextIsClassMethod(void *opaque_decl_ctx) {
9490
9495
return true ;
9491
9496
} else if (clang::FunctionDecl *fun_decl =
9492
9497
llvm::dyn_cast<clang::FunctionDecl>(decl_ctx)) {
9493
- if (ClangASTMetadata * metadata = GetMetadata (fun_decl))
9498
+ if (std::optional< ClangASTMetadata> metadata = GetMetadata (fun_decl))
9494
9499
return metadata->HasObjectPtr ();
9495
9500
}
9496
9501
@@ -9543,7 +9548,7 @@ TypeSystemClang::DeclContextGetLanguage(void *opaque_decl_ctx) {
9543
9548
} else if (llvm::isa<clang::CXXMethodDecl>(decl_ctx)) {
9544
9549
return eLanguageTypeC_plus_plus;
9545
9550
} else if (auto *fun_decl = llvm::dyn_cast<clang::FunctionDecl>(decl_ctx)) {
9546
- if (ClangASTMetadata * metadata = GetMetadata (fun_decl))
9551
+ if (std::optional< ClangASTMetadata> metadata = GetMetadata (fun_decl))
9547
9552
return metadata->GetObjectPtrLanguage ();
9548
9553
}
9549
9554
@@ -9593,7 +9598,7 @@ TypeSystemClang::DeclContextGetAsNamespaceDecl(const CompilerDeclContext &dc) {
9593
9598
return nullptr ;
9594
9599
}
9595
9600
9596
- ClangASTMetadata *
9601
+ std::optional< ClangASTMetadata>
9597
9602
TypeSystemClang::DeclContextGetMetaData (const CompilerDeclContext &dc,
9598
9603
const Decl *object) {
9599
9604
TypeSystemClang *ast = llvm::cast<TypeSystemClang>(dc.GetTypeSystem ());
@@ -9827,8 +9832,7 @@ bool TypeSystemClang::IsForcefullyCompleted(lldb::opaque_compiler_type_t type) {
9827
9832
if (record_type) {
9828
9833
const clang::RecordDecl *record_decl = record_type->getDecl ();
9829
9834
assert (record_decl);
9830
- ClangASTMetadata *metadata = GetMetadata (record_decl);
9831
- if (metadata)
9835
+ if (std::optional<ClangASTMetadata> metadata = GetMetadata (record_decl))
9832
9836
return metadata->IsForcefullyCompleted ();
9833
9837
}
9834
9838
}
@@ -9838,11 +9842,13 @@ bool TypeSystemClang::IsForcefullyCompleted(lldb::opaque_compiler_type_t type) {
9838
9842
bool TypeSystemClang::SetDeclIsForcefullyCompleted (const clang::TagDecl *td) {
9839
9843
if (td == nullptr )
9840
9844
return false ;
9841
- ClangASTMetadata * metadata = GetMetadata (td);
9842
- if (metadata == nullptr )
9845
+ std::optional< ClangASTMetadata> metadata = GetMetadata (td);
9846
+ if (! metadata)
9843
9847
return false ;
9844
9848
m_has_forcefully_completed_types = true ;
9845
9849
metadata->SetIsForcefullyCompleted ();
9850
+ SetMetadata (td, *metadata);
9851
+
9846
9852
return true ;
9847
9853
}
9848
9854
0 commit comments