11#include " gtest/gtest.h"
22
33#include " Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h"
4+ #include " llvm/ADT/Sequence.h"
45
56using namespace lldb ;
67using namespace lldb_private ;
78using namespace llvm ;
89static constexpr auto IsSwiftMangledName =
910 SwiftLanguageRuntime::IsSwiftMangledName;
11+ static constexpr auto GetFuncletNumber = [](StringRef name) {
12+ return SwiftLanguageRuntime::GetFuncletNumber (name);
13+ };
1014static constexpr auto IsAnySwiftAsyncFunctionSymbol = [](StringRef name) {
1115 return SwiftLanguageRuntime::IsAnySwiftAsyncFunctionSymbol (name);
1216};
@@ -47,6 +51,13 @@ CheckGroupOfFuncletsFromDifferentFunctions(ArrayRef<StringRef> funclets1,
4751 }
4852}
4953
54+ // / Check that funclets contain a sequence of funclet names whose "async
55+ // / numbers" go from 0 to size(funclets).
56+ static void CheckFuncletNumbersAreARange (ArrayRef<StringRef> funclets) {
57+ for (auto idx : llvm::seq<int >(0 , funclets.size ()))
58+ EXPECT_EQ (idx, GetFuncletNumber (funclets[idx]));
59+ }
60+
5061TEST (TestSwiftDemangleAsyncNames, BasicAsync) {
5162 // "sayBasic" == a basic async function
5263 // "sayGeneric" == a generic async function
@@ -71,6 +82,8 @@ TEST(TestSwiftDemangleAsyncNames, BasicAsync) {
7182 CheckGroupOfFuncletsFromSameFunction (basic_funclets);
7283 CheckGroupOfFuncletsFromSameFunction (generic_funclets);
7384 CheckGroupOfFuncletsFromDifferentFunctions (basic_funclets, generic_funclets);
85+ CheckFuncletNumbersAreARange (basic_funclets);
86+ CheckFuncletNumbersAreARange (generic_funclets);
7487}
7588
7689TEST (TestSwiftDemangleAsyncNames, ClosureAsync) {
@@ -127,6 +140,10 @@ TEST(TestSwiftDemangleAsyncNames, ClosureAsync) {
127140 nested2_funclets_top_not_async);
128141 CheckGroupOfFuncletsFromDifferentFunctions (nested2_funclets2,
129142 nested2_funclets_top_not_async);
143+ CheckFuncletNumbersAreARange (nested1_funclets);
144+ CheckFuncletNumbersAreARange (nested2_funclets1);
145+ CheckFuncletNumbersAreARange (nested2_funclets2);
146+ CheckFuncletNumbersAreARange (nested2_funclets_top_not_async);
130147}
131148
132149TEST (TestSwiftDemangleAsyncNames, StaticAsync) {
@@ -153,4 +170,20 @@ TEST(TestSwiftDemangleAsyncNames, StaticAsync) {
153170 " $s1a8sayBasicyySSYaF" , " $s1a8sayBasicyySSYaFTY0_" };
154171 CheckGroupOfFuncletsFromDifferentFunctions (static_async_funclets,
155172 other_funclets);
173+ CheckFuncletNumbersAreARange (static_async_funclets);
174+ }
175+
176+ TEST (TestSwiftDemangleAsyncNames, NonAsync) {
177+ // func factorial(_ n:Int) -> Int {
178+ {
179+ StringRef func = " $s4test9factorialyS2iF" ;
180+ EXPECT_EQ (GetFuncletNumber (func), std::nullopt );
181+ }
182+
183+ // func factorial(_ n:Int) async -> Int {
184+ // func inner_factorial(_ n:Int) -> Int {
185+ {
186+ StringRef func = " $s4test9factorialyS2iYaF06inner_B0L_yS2iF" ;
187+ EXPECT_EQ (GetFuncletNumber (func), std::nullopt );
188+ }
156189}
0 commit comments