@@ -362,10 +362,9 @@ TEST_F(SymbolFilePDBTests, TestSimpleClassTypes) {
362
362
SymbolFilePDB *symfile =
363
363
static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
364
364
llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
365
- llvm::DenseSet<SymbolFile *> searched_files;
366
- TypeMap results;
367
- symfile->FindTypes (ConstString (" Class" ), CompilerDeclContext (), 0 ,
368
- searched_files, results);
365
+ TypeResults query_results;
366
+ symfile->FindTypes (TypeQuery (" Class" ), query_results);
367
+ TypeMap &results = query_results.GetTypeMap ();
369
368
EXPECT_EQ (1u , results.GetSize ());
370
369
lldb::TypeSP udt_type = results.GetTypeAtIndex (0 );
371
370
EXPECT_EQ (ConstString (" Class" ), udt_type->GetName ());
@@ -383,7 +382,6 @@ TEST_F(SymbolFilePDBTests, TestNestedClassTypes) {
383
382
SymbolFilePDB *symfile =
384
383
static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
385
384
llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
386
- llvm::DenseSet<SymbolFile *> searched_files;
387
385
TypeMap results;
388
386
389
387
auto clang_ast_ctx_or_err =
@@ -394,8 +392,10 @@ TEST_F(SymbolFilePDBTests, TestNestedClassTypes) {
394
392
llvm::dyn_cast_or_null<TypeSystemClang>(clang_ast_ctx_or_err->get ());
395
393
EXPECT_NE (nullptr , clang_ast_ctx);
396
394
397
- symfile->FindTypes (ConstString (" Class" ), CompilerDeclContext (), 0 ,
398
- searched_files, results);
395
+ TypeResults query_results;
396
+ symfile->FindTypes (TypeQuery (" Class" ), query_results);
397
+ TypeMap &results = query_results.GetTypeMap ();
398
+
399
399
EXPECT_EQ (1u , results.GetSize ());
400
400
401
401
auto Class = results.GetTypeAtIndex (0 );
@@ -413,10 +413,11 @@ TEST_F(SymbolFilePDBTests, TestNestedClassTypes) {
413
413
// compiler type for both, but `FindTypes` may return more than one type
414
414
// (with the same compiler type) because the symbols have different IDs.
415
415
416
- TypeMap more_results;
417
416
auto ClassCompilerDeclCtx = CompilerDeclContext (clang_ast_ctx, ClassDeclCtx);
418
- symfile->FindTypes (ConstString (" NestedClass" ), ClassCompilerDeclCtx, 0 ,
419
- searched_files, more_results);
417
+ TypeResults query_results;
418
+ symfile->FindTypes (TypeQuery (ClassCompilerDeclCtx, " NestedClass" ),
419
+ query_results);
420
+ TypeMap &more_results = query_results.GetTypeMap ();
420
421
EXPECT_LE (1u , more_results.GetSize ());
421
422
422
423
lldb::TypeSP udt_type = more_results.GetTypeAtIndex (0 );
@@ -437,9 +438,6 @@ TEST_F(SymbolFilePDBTests, TestClassInNamespace) {
437
438
SymbolFilePDB *symfile =
438
439
static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
439
440
llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
440
- llvm::DenseSet<SymbolFile *> searched_files;
441
- TypeMap results;
442
-
443
441
auto clang_ast_ctx_or_err =
444
442
symfile->GetTypeSystemForLanguage (lldb::eLanguageTypeC_plus_plus);
445
443
ASSERT_THAT_EXPECTED (clang_ast_ctx_or_err, llvm::Succeeded ());
@@ -456,12 +454,14 @@ TEST_F(SymbolFilePDBTests, TestClassInNamespace) {
456
454
symfile->ParseDeclsForContext (CompilerDeclContext (
457
455
clang_ast_ctx, static_cast <clang::DeclContext *>(tu)));
458
456
459
- auto ns_namespace =
457
+ auto ns_namespace_decl_ctx =
460
458
symfile->FindNamespace (ConstString (" NS" ), CompilerDeclContext (), true );
461
- EXPECT_TRUE (ns_namespace .IsValid ());
459
+ EXPECT_TRUE (ns_namespace_decl_ctx .IsValid ());
462
460
463
- symfile->FindTypes (ConstString (" NSClass" ), ns_namespace, 0 , searched_files,
464
- results);
461
+ TypeResults query_results;
462
+ symfile->FindTypes (TypeQuery (ns_namespace_decl_ctx, " NSClass" ),
463
+ query_results);
464
+ TypeMap &results = query_results.GetTypeMap ();
465
465
EXPECT_EQ (1u , results.GetSize ());
466
466
467
467
lldb::TypeSP udt_type = results.GetTypeAtIndex (0 );
@@ -482,12 +482,12 @@ TEST_F(SymbolFilePDBTests, TestEnumTypes) {
482
482
SymbolFilePDB *symfile =
483
483
static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
484
484
llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
485
- llvm::DenseSet<SymbolFile *> searched_files;
486
485
const char *EnumsToCheck[] = {" Enum" , " ShortEnum" };
487
486
for (auto Enum : EnumsToCheck) {
488
- TypeMap results;
489
- symfile->FindTypes (ConstString (Enum), CompilerDeclContext (), 0 ,
490
- searched_files, results);
487
+
488
+ TypeResults query_results;
489
+ symfile->FindTypes (TypeQuery (Enum), query_results);
490
+ TypeMap &results = query_results.GetTypeMap ();
491
491
EXPECT_EQ (1u , results.GetSize ());
492
492
lldb::TypeSP enum_type = results.GetTypeAtIndex (0 );
493
493
EXPECT_EQ (ConstString (Enum), enum_type->GetName ());
@@ -527,16 +527,15 @@ TEST_F(SymbolFilePDBTests, TestTypedefs) {
527
527
SymbolFilePDB *symfile =
528
528
static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
529
529
llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
530
- llvm::DenseSet<SymbolFile *> searched_files;
531
530
TypeMap results;
532
531
533
532
const char *TypedefsToCheck[] = {" ClassTypedef" , " NSClassTypedef" ,
534
533
" FuncPointerTypedef" ,
535
534
" VariadicFuncPointerTypedef" };
536
535
for (auto Typedef : TypedefsToCheck) {
537
- TypeMap results ;
538
- symfile->FindTypes (ConstString (Typedef), CompilerDeclContext (), 0 ,
539
- searched_files, results );
536
+ TypeResults query_results ;
537
+ symfile->FindTypes (TypeQuery (Typedef), query_results);
538
+ TypeMap &results = query_results. GetTypeMap ( );
540
539
EXPECT_EQ (1u , results.GetSize ());
541
540
lldb::TypeSP typedef_type = results.GetTypeAtIndex (0 );
542
541
EXPECT_EQ (ConstString (Typedef), typedef_type->GetName ());
@@ -578,22 +577,24 @@ TEST_F(SymbolFilePDBTests, TestMaxMatches) {
578
577
579
578
SymbolFilePDB *symfile =
580
579
static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
581
- llvm::DenseSet<SymbolFile *> searched_files;
582
- TypeMap results;
583
- const ConstString name (" ClassTypedef" );
584
- symfile->FindTypes (name, CompilerDeclContext (), 0 , searched_files, results);
585
- // Try to limit ourselves from 1 to 10 results, otherwise we could
586
- // be doing this thousands of times. The idea is just to make sure
587
- // that for a variety of values, the number of limited results
588
- // always comes out to the number we are expecting.
589
- uint32_t num_results = results.GetSize ();
590
- uint32_t iterations = std::min (num_results, 10u );
591
- for (uint32_t i = 1 ; i <= iterations; ++i) {
592
- TypeMap more_results;
593
- symfile->FindTypes (name, CompilerDeclContext (), i, searched_files,
594
- more_results);
595
- uint32_t num_limited_results = more_results.GetSize ();
596
- EXPECT_EQ (i, num_limited_results);
580
+
581
+ // Make a type query object we can use for all types and for one type
582
+ TypeQuery query (" ClassTypedef" );
583
+ {
584
+ // Find all types that match
585
+ TypeResults query_results;
586
+ symfile->FindTypes (query, query_results);
587
+ TypeMap &results = query_results.GetTypeMap ();
588
+ EXPECT_GT (results.GetSize (), 1u );
589
+ }
590
+
591
+ {
592
+ // Find a single type that matches
593
+ query.SetFindOne (true );
594
+ TypeResults query_results;
595
+ symfile->FindTypes (query, query_results);
596
+ TypeMap &results = query_results.GetTypeMap ();
597
+ EXPECT_EQ (results.GetSize (), 1u );
597
598
}
598
599
}
599
600
@@ -604,10 +605,10 @@ TEST_F(SymbolFilePDBTests, TestNullName) {
604
605
605
606
SymbolFilePDB *symfile =
606
607
static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
607
- llvm::DenseSet<SymbolFile *> searched_files;
608
- TypeMap results ;
609
- symfile->FindTypes (ConstString (), CompilerDeclContext (), 0 , searched_files,
610
- results );
608
+
609
+ TypeResults query_results ;
610
+ symfile->FindTypes (TypeQuery ( llvm::StringRef ()), query_results);
611
+ TypeMap &results = query_results. GetTypeMap ( );
611
612
EXPECT_EQ (0u , results.GetSize ());
612
613
}
613
614
0 commit comments