diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h b/lldb/include/lldb/Core/DemangledNameInfo.h index 11d3bb58871b8..dba7e288686e8 100644 --- a/lldb/include/lldb/Core/DemangledNameInfo.h +++ b/lldb/include/lldb/Core/DemangledNameInfo.h @@ -9,6 +9,7 @@ #ifndef LLDB_CORE_DEMANGLEDNAMEINFO_H #define LLDB_CORE_DEMANGLEDNAMEINFO_H +#include "swift/Demangling/Demangle.h" #include "llvm/Demangle/ItaniumDemangle.h" #include "llvm/Demangle/Utility.h" @@ -39,7 +40,7 @@ struct DemangledNameInfo { /// \endcode std::pair ScopeRange; - /// Indicates the [start, end) of the function argument lits. + /// Indicates the [start, end) of the function argument list. /// E.g., /// \code{.cpp} /// int (*getFunc(float, double))(int, int) @@ -59,10 +60,24 @@ struct DemangledNameInfo { /// \endcode std::pair QualifiersRange; + /// Indicates the [start, end) of the function's prefix. This is a + /// catch-all range for anything that is not tracked by the rest of + /// the pairs. + std::pair PrefixRange; + + /// Indicates the [start, end) of the function's suffix. This is a + /// catch-all range for anything that is not tracked by the rest of + /// the pairs. + std::pair SuffixRange; + /// Returns \c true if this object holds a valid basename range. bool hasBasename() const { - return BasenameRange.second > BasenameRange.first && - BasenameRange.second > 0; + return BasenameRange.second > BasenameRange.first; + } + + /// Returns \c true if this object holds a valid arguments range. + bool hasArguments() const { + return ArgumentsRange.second > ArgumentsRange.first; } }; diff --git a/lldb/include/lldb/Core/FormatEntity.h b/lldb/include/lldb/Core/FormatEntity.h index 38897a55cd1dc..8e97cb9f7fadc 100644 --- a/lldb/include/lldb/Core/FormatEntity.h +++ b/lldb/include/lldb/Core/FormatEntity.h @@ -88,6 +88,7 @@ struct Entry { FunctionNameWithArgs, FunctionNameNoArgs, FunctionMangledName, + FunctionPrefix, FunctionScope, FunctionBasename, FunctionTemplateArguments, diff --git a/lldb/include/lldb/Core/Mangled.h b/lldb/include/lldb/Core/Mangled.h index b65583ce23cb0..3a935771ce0c7 100644 --- a/lldb/include/lldb/Core/Mangled.h +++ b/lldb/include/lldb/Core/Mangled.h @@ -308,6 +308,75 @@ class Mangled { Stream &operator<<(Stream &s, const Mangled &obj); +using namespace swift::Demangle; +class TrackingNodePrinter : public NodePrinter { +public: + TrackingNodePrinter(DemangleOptions options) : NodePrinter(options) {} + + DemangledNameInfo takeInfo() { return std::move(info); } + +private: + DemangledNameInfo info; + std::optional parametersDepth; + + void startName() { + if (!info.hasBasename()) + info.BasenameRange.first = getStreamLength(); + } + + void endName() { + if (!info.hasBasename()) + info.BasenameRange.second = getStreamLength(); + } + + void startParameters(unsigned depth) { + if (parametersDepth || !info.hasBasename() || info.hasArguments()) { + return; + } + info.ArgumentsRange.first = getStreamLength(); + parametersDepth = depth; + } + + void endParameters(unsigned depth) { + if (!parametersDepth || *parametersDepth != depth || info.hasArguments()) { + return; + } + info.ArgumentsRange.second = getStreamLength(); + } + + bool shouldTrackNameRange(NodePointer Node) const { + switch (Node->getKind()) { + case Node::Kind::Function: + case Node::Kind::Constructor: + case Node::Kind::Allocator: + case Node::Kind::ExplicitClosure: + return true; + default: + return false; + } + } + + void printFunctionName(bool hasName, llvm::StringRef &OverwriteName, + llvm::StringRef &ExtraName, bool MultiWordName, + int &ExtraIndex, NodePointer Entity, + unsigned int depth) override { + if (shouldTrackNameRange(Entity)) + startName(); + NodePrinter::printFunctionName(hasName, OverwriteName, ExtraName, + MultiWordName, ExtraIndex, Entity, depth); + if (shouldTrackNameRange(Entity)) + endName(); + } + + void printFunctionParameters(NodePointer LabelList, NodePointer ParameterType, + unsigned depth, bool showTypes) override { + startParameters(depth); + NodePrinter::printFunctionParameters(LabelList, ParameterType, depth, + showTypes); + endParameters(depth); + } +}; + } // namespace lldb_private #endif // LLDB_CORE_MANGLED_H diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h index c0213e3f8d3f6..32f0eab207bd3 100644 --- a/lldb/include/lldb/Core/PluginManager.h +++ b/lldb/include/lldb/Core/PluginManager.h @@ -610,6 +610,14 @@ class PluginManager { static bool CreateSettingForCPlusPlusLanguagePlugin( Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp, llvm::StringRef description, bool is_global_property); + + static lldb::OptionValuePropertiesSP + GetSettingForSwiftLanguagePlugin(Debugger &debugger, + llvm::StringRef setting_name); + + static bool CreateSettingForSwiftLanguagePlugin( + Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp, + llvm::StringRef description, bool is_global_property); }; } // namespace lldb_private diff --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp index 8093fbec74aaa..178f111588372 100644 --- a/lldb/source/Core/FormatEntity.cpp +++ b/lldb/source/Core/FormatEntity.cpp @@ -123,6 +123,7 @@ constexpr Definition g_function_child_entries[] = { Definition("initial-function", EntryType::FunctionInitial), Definition("changed", EntryType::FunctionChanged), Definition("is-optimized", EntryType::FunctionIsOptimized), + Definition("prefix", EntryType::FunctionPrefix), Definition("scope", EntryType::FunctionScope), Definition("basename", EntryType::FunctionBasename), Definition("template-arguments", EntryType::FunctionTemplateArguments), @@ -362,6 +363,7 @@ const char *FormatEntity::Entry::TypeToCString(Type t) { ENUM_TO_CSTR(FunctionNameWithArgs); ENUM_TO_CSTR(FunctionNameNoArgs); ENUM_TO_CSTR(FunctionMangledName); + ENUM_TO_CSTR(FunctionPrefix); ENUM_TO_CSTR(FunctionScope); ENUM_TO_CSTR(FunctionBasename); ENUM_TO_CSTR(FunctionTemplateArguments); @@ -1812,6 +1814,7 @@ bool FormatEntity::Format(const Entry &entry, Stream &s, return true; } + case Entry::Type::FunctionPrefix: case Entry::Type::FunctionScope: case Entry::Type::FunctionBasename: case Entry::Type::FunctionTemplateArguments: diff --git a/lldb/source/Core/Mangled.cpp b/lldb/source/Core/Mangled.cpp index 093451f070e70..b5c5133d09a66 100644 --- a/lldb/source/Core/Mangled.cpp +++ b/lldb/source/Core/Mangled.cpp @@ -181,6 +181,8 @@ GetItaniumDemangledStr(const char *M) { TrackingOutputBuffer OB(demangled_cstr, demangled_size); demangled_cstr = ipd.finishDemangle(&OB); + OB.NameInfo.SuffixRange.first = OB.NameInfo.QualifiersRange.second; + OB.NameInfo.SuffixRange.second = std::string(demangled_cstr).length(); info = std::move(OB.NameInfo); assert(demangled_cstr && @@ -351,8 +353,17 @@ ConstString Mangled::GetDemangledNameImpl(bool force, // BEGIN SWIFT const char *mangled_name = m_mangled.GetCString(); Log *log = GetLog(LLDBLog::Demangle); LLDB_LOGF(log, "demangle swift: %s", mangled_name); - std::string demangled(SwiftLanguageRuntime::DemangleSymbolAsString( - mangled_name, SwiftLanguageRuntime::eTypeName, sc)); + auto demangled_data = SwiftLanguageRuntime::TrackedDemangleSymbolAsString( + mangled_name, SwiftLanguageRuntime::eSimplified, sc); + std::string demangled = demangled_data.first; + DemangledNameInfo info = demangled_data.second; + info.PrefixRange.second = + std::min(info.BasenameRange.first, info.ArgumentsRange.first); + info.SuffixRange.first = + std::max(info.BasenameRange.second, info.ArgumentsRange.second); + info.SuffixRange.second = demangled.length(); + m_demangled_info.emplace(info); + // Don't cache the demangled name the function isn't available yet. if (!sc || !sc->function) { LLDB_LOGF(log, "demangle swift: %s -> \"%s\" (not cached)", mangled_name, diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp index c7ef83d82d6c7..38eab194a58bc 100644 --- a/lldb/source/Core/PluginManager.cpp +++ b/lldb/source/Core/PluginManager.cpp @@ -1766,6 +1766,7 @@ static constexpr llvm::StringLiteral kJITLoaderPluginName("jit-loader"); static constexpr llvm::StringLiteral kStructuredDataPluginName("structured-data"); static constexpr llvm::StringLiteral kCPlusPlusLanguagePlugin("cplusplus"); +static constexpr llvm::StringLiteral kSwiftLanguagePlugin("swift"); lldb::OptionValuePropertiesSP PluginManager::GetSettingForDynamicLoaderPlugin(Debugger &debugger, @@ -1937,3 +1938,17 @@ bool PluginManager::CreateSettingForCPlusPlusLanguagePlugin( "Settings for CPlusPlus language plug-ins", properties_sp, description, is_global_property); } + +lldb::OptionValuePropertiesSP +PluginManager::GetSettingForSwiftLanguagePlugin( + Debugger &debugger, llvm::StringRef setting_name) { + return GetSettingForPlugin(debugger, setting_name, kSwiftLanguagePlugin); +} + +bool PluginManager::CreateSettingForSwiftLanguagePlugin( + Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp, + llvm::StringRef description, bool is_global_property) { + return CreateSettingForPlugin(debugger, kSwiftLanguagePlugin, + "Settings for Swift language plug-ins", + properties_sp, description, is_global_property); +} \ No newline at end of file diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index a219cf3b04f07..19eee054433b4 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -374,8 +374,8 @@ GetDemangledFunctionSuffix(const SymbolContext &sc) { if (!info->hasBasename()) return std::nullopt; - return demangled_name.slice(info->QualifiersRange.second, - llvm::StringRef::npos); + return demangled_name.slice(info->SuffixRange.first, + info->SuffixRange.second); } static bool PrintDemangledArgumentList(Stream &s, const SymbolContext &sc) { diff --git a/lldb/source/Plugins/Language/Swift/CMakeLists.txt b/lldb/source/Plugins/Language/Swift/CMakeLists.txt index 78cc8db0e8811..ae26f05d07c10 100644 --- a/lldb/source/Plugins/Language/Swift/CMakeLists.txt +++ b/lldb/source/Plugins/Language/Swift/CMakeLists.txt @@ -1,3 +1,11 @@ +lldb_tablegen(LanguageSwiftProperties.inc -gen-lldb-property-defs + SOURCE LanguageSwiftProperties.td + TARGET LLDBPluginLanguageSwiftPropertiesGen) + +lldb_tablegen(LanguageSwiftPropertiesEnum.inc -gen-lldb-property-enum-defs + SOURCE LanguageSwiftProperties.td + TARGET LLDBPluginLanguageSwiftPropertiesEnumGen) + set(LLVM_NO_RTTI 1) add_lldb_library(lldbPluginSwiftLanguage PLUGIN @@ -36,3 +44,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL Clang AND NOT SWIFT_COMPILER_MSVC_LIKE) target_compile_options(lldbPluginSwiftLanguage PRIVATE -Wno-dollar-in-identifier-extension) endif() + +add_dependencies(lldbPluginSwiftLanguage + LLDBPluginLanguageSwiftPropertiesGen + LLDBPluginLanguageSwiftPropertiesEnumGen) \ No newline at end of file diff --git a/lldb/source/Plugins/Language/Swift/LanguageSwiftProperties.td b/lldb/source/Plugins/Language/Swift/LanguageSwiftProperties.td new file mode 100644 index 0000000000000..668f17f6502bc --- /dev/null +++ b/lldb/source/Plugins/Language/Swift/LanguageSwiftProperties.td @@ -0,0 +1,12 @@ +include "../../../../include/lldb/Core/PropertiesBase.td" + +let Definition = "language_swift" in { + def FunctionNameFormat + : Property<"function-name-format", "FormatEntity">, + Global, + DefaultStringValue< + "${function.prefix}${ansi.fg.yellow}${function.basename}${ansi." + "normal}${function.formatted-arguments}${function.suffix}">, + Desc<"Swift specific frame format string to use when displaying stack " + "frame information for threads.">; +} \ No newline at end of file diff --git a/lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp b/lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp index edfe3b07e30fc..9c01a566bebbe 100644 --- a/lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp +++ b/lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp @@ -41,6 +41,7 @@ #include #include "lldb/lldb-enumerations.h" +#include "lldb/Interpreter/OptionValueProperties.h" #include "swift/AST/ImportCache.h" #include "swift/Basic/InitializeSwiftModules.h" #include "swift/Demangling/ManglingMacros.h" @@ -68,7 +69,7 @@ void SwiftLanguage::Initialize() { static ConstString g_SwiftStringStorageClass("_TtCs15__StringStorage"); static ConstString g_NSArrayClass1("_TtCs22__SwiftDeferredNSArray"); PluginManager::RegisterPlugin(GetPluginNameStatic(), "Swift Language", - CreateInstance); + CreateInstance, &DebuggerInitialize); lldb_private::formatters::NSString_Additionals::GetAdditionalSummaries() .emplace( @@ -1763,95 +1764,104 @@ bool SwiftLanguage::GetFunctionDisplayName( s << display_name; return true; } - const char *cstr = display_name.data(); - const char *open_paren = strchr(cstr, '('); - const char *close_paren = nullptr; - const char *generic = strchr(cstr, '<'); - // If before the arguments list begins there is a template sign - // then scan to the end of the generic args before you try to find - // the arguments list. - if (generic && open_paren && generic < open_paren) { - int generic_depth = 1; - ++generic; - for (; *generic && generic_depth > 0; generic++) { - if (*generic == '<') - generic_depth++; - if (*generic == '>') - generic_depth--; - } - if (*generic) - open_paren = strchr(generic, '('); - else - open_paren = nullptr; - } - if (open_paren) { - close_paren = strchr(open_paren, ')'); + return GetFunctionDisplayArgs(args, s, display_name, exe_scope); + } + } + return false; +} + +bool SwiftLanguage::GetFunctionDisplayArgs( + VariableList &args, lldb_private::Stream &s, std::string display_name, + lldb_private::ExecutionContextScope *exe_scope) { + const char *cstr = display_name.data(); + const char *open_paren = strchr(cstr, '('); + const char *close_paren = nullptr; + const char *generic = strchr(cstr, '<'); + // If before the arguments list begins there is a template sign + // then scan to the end of the generic args before you try to find + // the arguments list. + const char *generic_start = generic; + if (generic && open_paren && generic < open_paren) { + int generic_depth = 1; + ++generic; + for (; *generic && generic_depth > 0; generic++) { + if (*generic == '<') + generic_depth++; + if (*generic == '>') + generic_depth--; } + if (*generic) + open_paren = strchr(generic, '('); + else + open_paren = nullptr; + } + if (open_paren) { + close_paren = strchr(open_paren, ')'); + } - if (open_paren) + if (open_paren && generic_start) + if (generic_start) + s.Write(generic_start, open_paren - generic_start + 1); + else s.Write(cstr, open_paren - cstr + 1); - else { - s << display_name; - s.PutChar('('); - } - const size_t num_args = args.GetSize(); - for (size_t arg_idx = 0; arg_idx < num_args; ++arg_idx) { - std::string buffer; - - VariableSP var_sp(args.GetVariableAtIndex(arg_idx)); - ValueObjectSP var_value_sp( - ValueObjectVariable::Create(exe_scope, var_sp)); - if (!var_sp || !var_value_sp || var_sp->IsArtificial()) - continue; - StreamString ss; - const char *var_representation = nullptr; - const char *var_name = var_value_sp->GetName().GetCString(); - if (var_value_sp->GetCompilerType().IsValid()) { - if (var_value_sp && exe_scope->CalculateTarget()) - var_value_sp = var_value_sp->GetQualifiedRepresentationIfAvailable( - exe_scope->CalculateTarget() - ->TargetProperties::GetPreferDynamicValue(), - exe_scope->CalculateTarget() - ->TargetProperties::GetEnableSyntheticValue()); - if (var_value_sp->GetCompilerType().IsAggregateType() && - DataVisualization::ShouldPrintAsOneLiner(*var_value_sp.get())) { - static StringSummaryFormat format(TypeSummaryImpl::Flags() - .SetHideItemNames(false) - .SetShowMembersOneLiner(true), - ""); - format.FormatObject(var_value_sp.get(), buffer, TypeSummaryOptions()); - var_representation = buffer.c_str(); - } else - var_value_sp->DumpPrintableRepresentation( - ss, - ValueObject::ValueObjectRepresentationStyle:: - eValueObjectRepresentationStyleSummary, - eFormatDefault, - ValueObject::PrintableRepresentationSpecialCases::eAllow, false); - } - if (ss.GetData() && ss.GetSize()) - var_representation = ss.GetData(); - if (arg_idx > 0) - s.PutCString(", "); - if (var_value_sp->GetError().Success()) { - if (var_representation) - s.Printf("%s=%s", var_name, var_representation); - else - s.Printf("%s=%s at %s", var_name, - var_value_sp->GetTypeName().GetCString(), - var_value_sp->GetLocationAsCString()); + else { + s.PutChar('('); + } + + const size_t num_args = args.GetSize(); + for (size_t arg_idx = 0; arg_idx < num_args; ++arg_idx) { + std::string buffer; + + VariableSP var_sp(args.GetVariableAtIndex(arg_idx)); + ValueObjectSP var_value_sp(ValueObjectVariable::Create(exe_scope, var_sp)); + if (!var_sp || !var_value_sp || var_sp->IsArtificial()) + continue; + StreamString ss; + const char *var_representation = nullptr; + const char *var_name = var_value_sp->GetName().GetCString(); + if (var_value_sp->GetCompilerType().IsValid()) { + if (var_value_sp && exe_scope->CalculateTarget()) + var_value_sp = var_value_sp->GetQualifiedRepresentationIfAvailable( + exe_scope->CalculateTarget() + ->TargetProperties::GetPreferDynamicValue(), + exe_scope->CalculateTarget() + ->TargetProperties::GetEnableSyntheticValue()); + if (var_value_sp->GetCompilerType().IsAggregateType() && + DataVisualization::ShouldPrintAsOneLiner(*var_value_sp.get())) { + static StringSummaryFormat format(TypeSummaryImpl::Flags() + .SetHideItemNames(false) + .SetShowMembersOneLiner(true), + ""); + format.FormatObject(var_value_sp.get(), buffer, TypeSummaryOptions()); + var_representation = buffer.c_str(); } else - s.Printf("%s=", var_name); + var_value_sp->DumpPrintableRepresentation( + ss, + ValueObject::ValueObjectRepresentationStyle:: + eValueObjectRepresentationStyleSummary, + eFormatDefault, + ValueObject::PrintableRepresentationSpecialCases::eAllow, false); } - - if (close_paren) - s.PutCString(close_paren); - else - s.PutChar(')'); - } - return true; + if (ss.GetData() && ss.GetSize()) + var_representation = ss.GetData(); + if (arg_idx > 0) + s.PutCString(", "); + if (var_value_sp->GetError().Success()) { + if (var_representation) + s.Printf("%s=%s", var_name, var_representation); + else + s.Printf("%s=%s at %s", var_name, + var_value_sp->GetTypeName().GetCString(), + var_value_sp->GetLocationAsCString()); + } else + s.Printf("%s=", var_name); } - return false; + + if (close_paren) + s.PutCString(close_paren); + else + s.PutChar(')'); + return true; } void SwiftLanguage::GetExceptionResolverDescription(bool catch_on, @@ -1880,6 +1890,220 @@ SwiftLanguage::GetDemangledFunctionNameWithoutArguments(Mangled mangled) const { return mangled_name; } +static std::optional +GetDemangledBasename(const SymbolContext &sc) { + Mangled mangled = sc.GetPossiblyInlinedFunctionName(); + if (!mangled) + return std::nullopt; + + auto demangled_name = mangled.GetDemangledName().GetStringRef(); + if (demangled_name.empty()) + return std::nullopt; + + const std::optional &info = mangled.GetDemangledInfo(); + if (!info) + return std::nullopt; + + // Function without a basename is nonsense. + if (!info->hasBasename()) + return std::nullopt; + + return demangled_name.slice(info->BasenameRange.first, + info->BasenameRange.second); +} + +static std::optional +GetDemangledFunctionPrefix(const SymbolContext &sc) { + Mangled mangled = sc.GetPossiblyInlinedFunctionName(); + if (!mangled) + return std::nullopt; + + auto demangled_name = mangled.GetDemangledName().GetStringRef(); + if (demangled_name.empty()) + return std::nullopt; + + const std::optional &info = mangled.GetDemangledInfo(); + if (!info) + return std::nullopt; + + // Function without a basename is nonsense. + if (!info->hasBasename()) + return std::nullopt; + + return demangled_name.slice(info->PrefixRange.first, + info->PrefixRange.second); +} + +static std::optional +GetDemangledFunctionSuffix(const SymbolContext &sc) { + Mangled mangled = sc.GetPossiblyInlinedFunctionName(); + if (!mangled) + return std::nullopt; + + auto demangled_name = mangled.GetDemangledName().GetStringRef(); + if (demangled_name.empty()) + return std::nullopt; + + const std::optional &info = mangled.GetDemangledInfo(); + if (!info) + return std::nullopt; + + // Function without a basename is nonsense. + if (!info->hasBasename()) + return std::nullopt; + + return demangled_name.slice(info->SuffixRange.first, + info->SuffixRange.second); +} + +static bool PrintDemangledArgumentList(Stream &s, const SymbolContext &sc) { + assert(sc.symbol); + + Mangled mangled = sc.GetPossiblyInlinedFunctionName(); + if (!mangled) + return false; + + auto demangled_name = mangled.GetDemangledName().GetStringRef(); + if (demangled_name.empty()) + return false; + + const std::optional &info = mangled.GetDemangledInfo(); + if (!info) + return false; + + // Function without a basename is nonsense. + if (!info->hasBasename()) + return false; + + if (info->ArgumentsRange.second < info->ArgumentsRange.first) + return false; + + s << demangled_name.slice(info->ArgumentsRange.first, + info->ArgumentsRange.second); + + return true; +} + +static VariableListSP GetFunctionVariableList(const SymbolContext &sc) { + assert(sc.function); + + if (sc.block) + if (Block *inline_block = sc.block->GetContainingInlinedBlock()) + return inline_block->GetBlockVariableList(true); + + return sc.function->GetBlock(true).GetBlockVariableList(true); +} + +bool SwiftLanguage::HandleFrameFormatVariable(const SymbolContext &sc, + const ExecutionContext *exe_ctx, + FormatEntity::Entry::Type type, + Stream &s) { + switch (type) { + case FormatEntity::Entry::Type::FunctionBasename: { + std::optional name = GetDemangledBasename(sc); + if (!name) + return false; + + s << *name; + + return true; + } + case FormatEntity::Entry::Type::FunctionFormattedArguments: { + // This ensures we print the arguments even when no debug-info is available. + // + // FIXME: we should have a Entry::Type::FunctionArguments and + // use it in the plugin.cplusplus.display.function-name-format + // once we have a "fallback operator" in the frame-format language. + if (!sc.function && sc.symbol) + return PrintDemangledArgumentList(s, sc); + std::string display_name = SwiftLanguageRuntime::DemangleSymbolAsString( + sc.function->GetMangled().GetMangledName().GetStringRef(), + SwiftLanguageRuntime::eSimplified, &sc, exe_ctx); + if (display_name.empty()) + return false; + + VariableList args; + if (auto variable_list_sp = GetFunctionVariableList(sc)) + variable_list_sp->AppendVariablesWithScope(eValueTypeVariableArgument, + args); + + ExecutionContextScope *exe_scope = + exe_ctx ? exe_ctx->GetBestExecutionContextScope() : nullptr; + return GetFunctionDisplayArgs(args, s, display_name, exe_scope); + } + case FormatEntity::Entry::Type::FunctionPrefix: { + std::optional prefix = GetDemangledFunctionPrefix(sc); + if (!prefix) + return false; + + s << *prefix; + + return true; + } + case FormatEntity::Entry::Type::FunctionSuffix: { + std::optional suffix = GetDemangledFunctionSuffix(sc); + if (!suffix) + return false; + + s << *suffix; + + return true; + } + + case FormatEntity::Entry::Type::FunctionScope: + case FormatEntity::Entry::Type::FunctionTemplateArguments: + case FormatEntity::Entry::Type::FunctionReturnRight: + case FormatEntity::Entry::Type::FunctionReturnLeft: + case FormatEntity::Entry::Type::FunctionQualifiers: + default: + return true; + } +} + +#define LLDB_PROPERTIES_language_swift +#include "LanguageSwiftProperties.inc" + +enum { +#define LLDB_PROPERTIES_language_swift +#include "LanguageSwiftPropertiesEnum.inc" +}; + +namespace { +class PluginProperties : public Properties { +public: + static llvm::StringRef GetSettingName() { return "display"; } + + PluginProperties() { + m_collection_sp = std::make_shared(GetSettingName()); + m_collection_sp->Initialize(g_language_swift_properties); + } + + const FormatEntity::Entry *GetFunctionNameFormat() const { + return GetPropertyAtIndexAs( + ePropertyFunctionNameFormat); + } +}; +} // namespace + +static PluginProperties &GetGlobalPluginProperties() { + static PluginProperties g_settings; + return g_settings; +} + +const FormatEntity::Entry *SwiftLanguage::GetFunctionNameFormat() const { + return GetGlobalPluginProperties().GetFunctionNameFormat(); +} + +void SwiftLanguage::DebuggerInitialize(Debugger &debugger) { + if (!PluginManager::GetSettingForSwiftLanguagePlugin( + debugger, PluginProperties::GetSettingName())) { + PluginManager::CreateSettingForSwiftLanguagePlugin( + debugger, GetGlobalPluginProperties().GetValueProperties(), + "Properties for the Swift language plug-in.", + /*is_global_property=*/true); + } +} + namespace { using namespace swift::Demangle; struct AsyncInfo { diff --git a/lldb/source/Plugins/Language/Swift/SwiftLanguage.h b/lldb/source/Plugins/Language/Swift/SwiftLanguage.h index c93743f595661..4f545b6ae549f 100644 --- a/lldb/source/Plugins/Language/Swift/SwiftLanguage.h +++ b/lldb/source/Plugins/Language/Swift/SwiftLanguage.h @@ -69,6 +69,15 @@ class SwiftLanguage : public Language { FunctionNameRepresentation representation, Stream &s) override; + bool GetFunctionDisplayArgs(VariableList &args, Stream &s, + std::string display_name, + ExecutionContextScope *exe_scope); + + bool HandleFrameFormatVariable(const SymbolContext &sc, + const ExecutionContext *exe_ctx, + FormatEntity::Entry::Type type, + Stream &s) override; + void GetExceptionResolverDescription(bool catch_on, bool throw_on, Stream &s) override; @@ -96,6 +105,8 @@ class SwiftLanguage : public Language { llvm::StringRef GetInstanceVariableName() override { return "self"; } + const FormatEntity::Entry *GetFunctionNameFormat() const override; + /// Override that skips breakpoints inside await resume ("Q") async funclets. void FilterForLineBreakpoints( llvm::SmallVectorImpl &) const override; @@ -104,6 +115,9 @@ class SwiftLanguage : public Language { // PluginInterface protocol //------------------------------------------------------------------ llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } + + private: + static void DebuggerInitialize(Debugger &); }; } // namespace lldb_private diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h index 91bb9165a2518..c4878a706beec 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h +++ b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h @@ -198,11 +198,22 @@ class SwiftLanguageRuntime : public LanguageRuntime { IsSwiftAsyncAwaitResumePartialFunctionSymbol(llvm::StringRef name); enum DemangleMode { eSimplified, eTypeName, eDisplayTypeName }; + + static std::pair> + DemangleSymbolAsString(llvm::StringRef symbol, DemangleMode mode, + bool tracking, const SymbolContext *sc = nullptr, + const ExecutionContext *exe_ctx = nullptr); + static std::string DemangleSymbolAsString(llvm::StringRef symbol, DemangleMode mode, const SymbolContext *sc = nullptr, const ExecutionContext *exe_ctx = nullptr); + static std::pair + TrackedDemangleSymbolAsString(llvm::StringRef symbol, DemangleMode mode, + const SymbolContext *sc = nullptr, + const ExecutionContext *exe_ctx = nullptr); + /// Demangle a symbol to a swift::Demangle node tree. /// /// This is a central point of access, for purposes such as logging. diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeNames.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeNames.cpp index 98a9c1dfd2c9a..10d6b5e0704c6 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeNames.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeNames.cpp @@ -13,6 +13,7 @@ #include "SwiftLanguageRuntime.h" #include "lldb/Breakpoint/StoppointCallbackContext.h" +#include "lldb/Core/DemangledNameInfo.h" #include "lldb/Symbol/Block.h" #include "lldb/Symbol/CompileUnit.h" #include "lldb/Symbol/VariableList.h" @@ -711,9 +712,11 @@ void SwiftLanguageRuntime::GetGenericParameterNamesForFunction( } } -std::string SwiftLanguageRuntime::DemangleSymbolAsString( - llvm::StringRef symbol, DemangleMode mode, const SymbolContext *sc, - const ExecutionContext *exe_ctx) { +std::pair> +SwiftLanguageRuntime::DemangleSymbolAsString(llvm::StringRef symbol, + DemangleMode mode, bool tracking, + const SymbolContext *sc, + const ExecutionContext *exe_ctx) { bool did_init = false; llvm::DenseMap dict; swift::Demangle::DemangleOptions options; @@ -758,7 +761,7 @@ std::string SwiftLanguageRuntime::DemangleSymbolAsString( return swift::Demangle::genericParameterName(depth, index); }; } else { - // Print generic generic parameter names. + // Print generic parameter names. options.GenericParameterName = [&](uint64_t depth, uint64_t index) { std::string name; { @@ -768,7 +771,30 @@ std::string SwiftLanguageRuntime::DemangleSymbolAsString( return name; }; } - return swift::Demangle::demangleSymbolAsString(symbol, options); + if (tracking) { + TrackingNodePrinter printer = TrackingNodePrinter(options); + std::string demangled = + swift::Demangle::demangleSymbolAsString(symbol, options, &printer); + return std::pair>( + demangled, printer.takeInfo()); + } + return std::pair>( + swift::Demangle::demangleSymbolAsString(symbol, options), std::nullopt); +} + +std::string SwiftLanguageRuntime::DemangleSymbolAsString( + llvm::StringRef symbol, DemangleMode mode, const SymbolContext *sc, + const ExecutionContext *exe_ctx) { + return DemangleSymbolAsString(symbol, mode, false, sc, exe_ctx).first; +} + +std::pair +SwiftLanguageRuntime::TrackedDemangleSymbolAsString( + llvm::StringRef symbol, DemangleMode mode, const SymbolContext *sc, + const ExecutionContext *exe_ctx) { + auto demangledData = DemangleSymbolAsString(symbol, mode, true, sc, exe_ctx); + return std::pair(demangledData.first, + *demangledData.second); } swift::Demangle::NodePointer diff --git a/lldb/unittests/Core/CMakeLists.txt b/lldb/unittests/Core/CMakeLists.txt index 949963fd40346..70597dbbed9da 100644 --- a/lldb/unittests/Core/CMakeLists.txt +++ b/lldb/unittests/Core/CMakeLists.txt @@ -4,12 +4,13 @@ add_lldb_unittest(LLDBCoreTests DumpDataExtractorTest.cpp DumpRegisterInfoTest.cpp FormatEntityTest.cpp - MangledTest.cpp + ItaniumMangledTest.cpp ModuleSpecTest.cpp ProgressReportTest.cpp RichManglingContextTest.cpp SourceLocationSpecTest.cpp SourceManagerTest.cpp + SwiftMangledTest.cpp UniqueCStringMapTest.cpp LINK_LIBS diff --git a/lldb/unittests/Core/MangledTest.cpp b/lldb/unittests/Core/ItaniumMangledTest.cpp similarity index 98% rename from lldb/unittests/Core/MangledTest.cpp rename to lldb/unittests/Core/ItaniumMangledTest.cpp index 8a452a84614ef..b876fdd30928c 100644 --- a/lldb/unittests/Core/MangledTest.cpp +++ b/lldb/unittests/Core/ItaniumMangledTest.cpp @@ -1,4 +1,4 @@ -//===-- MangledTest.cpp ---------------------------------------------------===// +//===-- ItaniumMangledTest.cpp --------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -401,7 +401,7 @@ TEST(MangledTest, DemangledNameInfo_SetValue) { EXPECT_FALSE(mangled.GetDemangledInfo()->hasBasename()); } -struct DemanglingPartsTestCase { +struct ItaniumDemanglingPartsTestCase { const char *mangled; DemangledNameInfo expected_info; std::string_view basename; @@ -410,7 +410,7 @@ struct DemanglingPartsTestCase { bool valid_basename = true; }; -DemanglingPartsTestCase g_demangling_parts_test_cases[] = { +ItaniumDemanglingPartsTestCase g_demangling_itanium_parts_test_cases[] = { // clang-format off { "_ZNVKO3BarIN2ns3QuxIiEEE1CIPFi3FooIS_IiES6_EEE6methodIS6_EENS5_IT_SC_E5InnerIiEESD_SD_", { /*.BasenameRange=*/{92, 98}, /*.ScopeRange=*/{36, 92}, /*.ArgumentsRange=*/{ 108, 158 }, @@ -527,7 +527,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }; struct DemanglingPartsTestFixture - : public ::testing::TestWithParam {}; + : public ::testing::TestWithParam {}; namespace { class TestAllocator { @@ -579,5 +579,6 @@ TEST_P(DemanglingPartsTestFixture, DemanglingParts) { EXPECT_EQ(get_part(OB.NameInfo.QualifiersRange), qualifiers); } -INSTANTIATE_TEST_SUITE_P(DemanglingPartsTests, DemanglingPartsTestFixture, - ::testing::ValuesIn(g_demangling_parts_test_cases)); +INSTANTIATE_TEST_SUITE_P( + DemanglingPartsTests, DemanglingPartsTestFixture, + ::testing::ValuesIn(g_demangling_itanium_parts_test_cases)); diff --git a/lldb/unittests/Core/SwiftMangledTest.cpp b/lldb/unittests/Core/SwiftMangledTest.cpp new file mode 100644 index 0000000000000..b6c8c10ef6d84 --- /dev/null +++ b/lldb/unittests/Core/SwiftMangledTest.cpp @@ -0,0 +1,1276 @@ +//===-- SwiftMangledTest.cpp ----------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h" +// #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" +// #include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" +// #include "TestingSupport/SubsystemRAII.h" +#include "TestingSupport/TestUtilities.h" + +#include "lldb/Core/DemangledNameInfo.h" +#include "lldb/Core/Mangled.h" +// #include "lldb/Core/Module.h" +// #include "lldb/Core/ModuleSpec.h" +// #include "lldb/Host/FileSystem.h" +// #include "lldb/Host/HostInfo.h" +// #include "lldb/Symbol/SymbolContext.h" + +// #include "llvm/Support/FileUtilities.h" +// #include "llvm/Support/Path.h" +// #include "llvm/Support/Program.h" +// #include "llvm/Testing/Support/Error.h" + +#include "gtest/gtest.h" + +using namespace lldb; +using namespace lldb_private; + +struct SwiftDemanglingPartsTestCase { + const char *mangled; + DemangledNameInfo expected_info; + std::string_view basename; + std::string_view arguments; +}; + +SwiftDemanglingPartsTestCase g_swift_demangling_parts_test_cases[] = { + // clang-format off + { "_TFC3foo3bar3basfT3zimCS_3zim_T_", + { /*.BasenameRange=*/{8, 11}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 25}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 8}, /*.SuffixRange=*/{25, 31} + }, + /*.basename=*/"bas", + /*.arguments=*/"(zim: foo.zim)" + }, + { "_TToFC3foo3bar3basfT3zimCS_3zim_T_", + { /*.BasenameRange=*/{14, 17}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{17, 31}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 14}, /*.SuffixRange=*/{31, 37} + }, + /*.basename=*/"bas", + /*.arguments=*/"(zim: foo.zim)" + }, + { "_TTOFSC3fooFTSdSd_Sd", + { /*.BasenameRange=*/{25, 28}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{28, 56}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 25}, /*.SuffixRange=*/{56, 72} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Double, Swift.Double)" + }, + { "_T03foo3barC3basyAA3zimCAE_tFTo", + { /*.BasenameRange=*/{14, 17}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{17, 31}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 14}, /*.SuffixRange=*/{31, 37} + }, + /*.basename=*/"bas", + /*.arguments=*/"(zim: foo.zim)" + }, + { "_T0SC3fooS2d_SdtFTO", + { /*.BasenameRange=*/{25, 28}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{28, 56}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 25}, /*.SuffixRange=*/{56, 72} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Double, Swift.Double)" + }, + { "_$s3foo3barC3bas3zimyAaEC_tFTo", + { /*.BasenameRange=*/{14, 17}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{17, 31}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 14}, /*.SuffixRange=*/{31, 37} + }, + /*.basename=*/"bas", + /*.arguments=*/"(zim: foo.zim)" + }, + { "_$sSC3fooyS2d_SdtFTO", + { /*.BasenameRange=*/{25, 28}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{28, 56}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 25}, /*.SuffixRange=*/{56, 72} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Double, Swift.Double)" + }, + { "$s4main3fooyySiFyyXEfU_TA.1", + { /*.BasenameRange=*/{28, 38}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{39, 41}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 28}, /*.SuffixRange=*/{41, 103} + }, + /*.basename=*/"closure #1", + /*.arguments=*/"()" + }, + { "$s4main8MyStructV3fooyyFAA1XV_Tg5.foo", + { /*.BasenameRange=*/{49, 52}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{52, 54}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 49}, /*.SuffixRange=*/{54, 89} + }, + /*.basename=*/"foo", + /*.arguments=*/"()" + }, + { "_TTDFC3foo3bar3basfT3zimCS_3zim_T_", + { /*.BasenameRange=*/{16, 19}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{19, 33}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 16}, /*.SuffixRange=*/{33, 39} + }, + /*.basename=*/"bas", + /*.arguments=*/"(zim: foo.zim)" + }, + { "_TF3foooi1pFTCS_3barVS_3bas_OS_3zim", + { /*.BasenameRange=*/{4, 11}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 29}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 4}, /*.SuffixRange=*/{29, 40} + }, + /*.basename=*/"+ infix", + /*.arguments=*/"(foo.bar, foo.bas)" + }, + { "_TF3foooP1xFTCS_3barVS_3bas_OS_3zim", + { /*.BasenameRange=*/{4, 13}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{13, 31}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 4}, /*.SuffixRange=*/{31, 42} + }, + /*.basename=*/"^ postfix", + /*.arguments=*/"(foo.bar, foo.bas)" + }, + { "_TFC3foo3barCfT_S0_", + { /*.BasenameRange=*/{8, 25}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{25, 27}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 8}, /*.SuffixRange=*/{27, 38} + }, + /*.basename=*/"__allocating_init", + /*.arguments=*/"()" + }, + { "_TFC3foo3barcfT_S0_", + { /*.BasenameRange=*/{8, 12}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{12, 14}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 8}, /*.SuffixRange=*/{14, 25} + }, + /*.basename=*/"init", + /*.arguments=*/"()" + }, + { "_TIF1t1fFT1iSi1sSS_T_A_", + { /*.BasenameRange=*/{24, 25}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{25, 56}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 24}, /*.SuffixRange=*/{56, 62} + }, + /*.basename=*/"f", + /*.arguments=*/"(i: Swift.Int, s: Swift.String)" + }, + { "_TIF1t1fFT1iSi1sSS_T_A0_", + { /*.BasenameRange=*/{24, 25}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{25, 56}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 24}, /*.SuffixRange=*/{56, 62} + }, + /*.basename=*/"f", + /*.arguments=*/"(i: Swift.Int, s: Swift.String)" + }, + { "_TFSqcfT_GSqx_", + { /*.BasenameRange=*/{15, 19}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{19, 21}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 15}, /*.SuffixRange=*/{21, 42} + }, + /*.basename=*/"init", + /*.arguments=*/"()" + }, + { "_TF21class_bound_protocols32class_bound_protocol_compositionFT1xPS_10ClassBoundS_13NotClassBound__PS0_S1__", + { /*.BasenameRange=*/{22, 54}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{54, 129}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 22}, /*.SuffixRange=*/{129, 203} + }, + /*.basename=*/"class_bound_protocol_composition", + /*.arguments=*/"(x: class_bound_protocols.ClassBound & class_bound_protocols.NotClassBound)" + }, + { "_TFVCC6nested6AClass12AnotherClass7AStruct9aFunctionfT1aSi_S2_", + { /*.BasenameRange=*/{35, 44}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{44, 58}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 35}, /*.SuffixRange=*/{58, 96} + }, + /*.basename=*/"aFunction", + /*.arguments=*/"(a: Swift.Int)" + }, + { "_TFCF5types1gFT1bSb_T_L0_10Collection3zimfT_T_", + { /*.BasenameRange=*/{0, 3}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{3, 5}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{5, 60} + }, + /*.basename=*/"zim", + /*.arguments=*/"()" + }, + { "_TFF17capture_promotion22test_capture_promotionFT_FT_SiU_FT_Si_promote0", + { /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 13}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{13, 125} + }, + /*.basename=*/"closure #1", + /*.arguments=*/"()" + }, + { "_TFIVs8_Processi10_argumentsGSaSS_U_FT_GSaSS_", + { /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{0, 0}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{10, 130} + }, + /*.basename=*/"_arguments", + /*.arguments=*/"" + }, + { "_TFIvVs8_Process10_argumentsGSaSS_iU_FT_GSaSS_", + { /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 13}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{13, 137} + }, + /*.basename=*/"closure #1", + /*.arguments=*/"()" + }, + { "_TTWC13call_protocol1CS_1PS_FS1_3foofT_Si", + { /*.BasenameRange=*/{37, 40}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{40, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 37}, /*.SuffixRange=*/{42, 121} + }, + /*.basename=*/"foo", + /*.arguments=*/"()" + }, + { "_T013call_protocol1CCAA1PA2aDP3fooSiyFTW", + { /*.BasenameRange=*/{37, 40}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{40, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 37}, /*.SuffixRange=*/{42, 121} + }, + /*.basename=*/"foo", + /*.arguments=*/"()" + }, + { "_TFC12dynamic_self1X1ffT_DS0_", + { /*.BasenameRange=*/{15, 16}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{16, 18}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 15}, /*.SuffixRange=*/{18, 26} + }, + /*.basename=*/"f", + /*.arguments=*/"()" + }, + { "_TTSg5Si___TFSqcfT_GSqx_", + { /*.BasenameRange=*/{53, 57}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{57, 59}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 53}, /*.SuffixRange=*/{59, 80} + }, + /*.basename=*/"init", + /*.arguments=*/"()" + }, + { "_TTSgq5Si___TFSqcfT_GSqx_", + { /*.BasenameRange=*/{65, 69}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{69, 71}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 65}, /*.SuffixRange=*/{71, 92} + }, + /*.basename=*/"init", + /*.arguments=*/"()" + }, + { "_TTSg5SiSis3Foos_Sf___TFSqcfT_GSqx_", + { /*.BasenameRange=*/{102, 106}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{106, 108}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 102}, /*.SuffixRange=*/{108, 129} + }, + /*.basename=*/"init", + /*.arguments=*/"()" + }, + { "_TTSg5Si_Sf___TFSqcfT_GSqx_", + { /*.BasenameRange=*/{66, 70}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{70, 72}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 66}, /*.SuffixRange=*/{72, 93} + }, + /*.basename=*/"init", + /*.arguments=*/"()" + }, + { "_TTSr5Si___TF4test7genericurFxx", + { /*.BasenameRange=*/{61, 68}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{71, 74}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 61}, /*.SuffixRange=*/{74, 79} + }, + /*.basename=*/"generic", + /*.arguments=*/"(A)" + }, + { "_TTSrq5Si___TF4test7genericurFxx", + { /*.BasenameRange=*/{73, 80}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{83, 86}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 73}, /*.SuffixRange=*/{86, 91} + }, + /*.basename=*/"generic", + /*.arguments=*/"(A)" + }, + { "_TF8manglingX22egbpdajGbuEbxfgehfvwxnFT_T_", + { /*.BasenameRange=*/{9, 43}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{43, 45}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{45, 51} + }, + /*.basename=*/"ليهمابتكلموشعربي؟", + /*.arguments=*/"()" + }, + { "_TF8manglingX24ihqwcrbEcvIaIdqgAFGpqjyeFT_T_", + { /*.BasenameRange=*/{9, 36}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{36, 38}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{38, 44} + }, + /*.basename=*/"他们为什么不说中文", + /*.arguments=*/"()" + }, + { "_TF8manglingX27ihqwctvzcJBfGFJdrssDxIboAybFT_T_", + { /*.BasenameRange=*/{9, 36}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{36, 38}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{38, 44} + }, + /*.basename=*/"他們爲什麽不說中文", + /*.arguments=*/"()" + }, + { "_TF8manglingX30Proprostnemluvesky_uybCEdmaEBaFT_T_", + { /*.BasenameRange=*/{9, 35}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{35, 37}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{37, 43} + }, + /*.basename=*/"Pročprostěnemluvíčesky", + /*.arguments=*/"()" + }, + { "_TF8manglingXoi7p_qcaDcFTSiSi_Si", + { /*.BasenameRange=*/{9, 20}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{20, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{42, 55} + }, + /*.basename=*/"«+» infix", + /*.arguments=*/"(Swift.Int, Swift.Int)" + }, + { "_TF8manglingoi2qqFTSiSi_T_", + { /*.BasenameRange=*/{9, 17}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{17, 39}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{39, 45} + }, + /*.basename=*/"?? infix", + /*.arguments=*/"(Swift.Int, Swift.Int)" + }, + { "_TFE11ext_structAV11def_structA1A4testfT_T_", + { /*.BasenameRange=*/{41, 45}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{45, 47}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 41}, /*.SuffixRange=*/{47, 53} + }, + /*.basename=*/"test", + /*.arguments=*/"()" + }, + { "_TF13devirt_accessP5_DISC15getPrivateClassFT_CS_P5_DISC12PrivateClass", + { /*.BasenameRange=*/{14, 40}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{40, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 14}, /*.SuffixRange=*/{42, 83} + }, + /*.basename=*/"(getPrivateClass in _DISC)", + /*.arguments=*/"()" + }, + { "_TF4mainP5_mainX3wxaFT_T_", + { /*.BasenameRange=*/{5, 18}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{18, 20}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{20, 26} + }, + /*.basename=*/"(λ in _main)", + /*.arguments=*/"()" + }, + { "_TF4mainP5_main3abcFT_aS_P5_DISC3xyz", + { /*.BasenameRange=*/{5, 19}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{19, 21}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{21, 44} + }, + /*.basename=*/"(abc in _main)", + /*.arguments=*/"()" + }, + { "_TFCs13_NSSwiftArray29canStoreElementsOfDynamicTypefPMP_Sb", + { /*.BasenameRange=*/{20, 49}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{49, 59}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 20}, /*.SuffixRange=*/{59, 73} + }, + /*.basename=*/"canStoreElementsOfDynamicType", + /*.arguments=*/"(Any.Type)" + }, + { "_TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiSi_T_T_", + { /*.BasenameRange=*/{183, 195}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{195, 225}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 183}, /*.SuffixRange=*/{225, 231} + }, + /*.basename=*/"take_closure", + /*.arguments=*/"((Swift.Int, Swift.Int) -> ())" + }, + { "_TTSfq1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiSi_T_T_", + { /*.BasenameRange=*/{195, 207}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{207, 237}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 195}, /*.SuffixRange=*/{237, 243} + }, + /*.basename=*/"take_closure", + /*.arguments=*/"((Swift.Int, Swift.Int) -> ())" + }, + { "_TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TTSg5Si___TF7specgen12take_closureFFTSiSi_T_T_", + { /*.BasenameRange=*/{221, 233}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{233, 263}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 221}, /*.SuffixRange=*/{263, 269} + }, + /*.basename=*/"take_closure", + /*.arguments=*/"((Swift.Int, Swift.Int) -> ())" + }, + { "_TTSg5Si___TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiSi_T_T_", + { /*.BasenameRange=*/{221, 233}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{233, 263}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 221}, /*.SuffixRange=*/{263, 269} + }, + /*.basename=*/"take_closure", + /*.arguments=*/"((Swift.Int, Swift.Int) -> ())" + }, + { "_TTSf1cpi0_cpfl0_cpse0v4u123_cpg53globalinit_33_06E7F1D906492AE070936A9B58CBAE1C_token8_cpfr36_TFtest_capture_propagation2_closure___TF7specgen12take_closureFFTSiSi_T_T_", + { /*.BasenameRange=*/{357, 369}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{369, 399}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 357}, /*.SuffixRange=*/{399, 405} + }, + /*.basename=*/"take_closure", + /*.arguments=*/"((Swift.Int, Swift.Int) -> ())" + }, + { "_TTSf0gs___TFVs17_LegacyStringCore15_invariantCheckfT_T_", + { /*.BasenameRange=*/{105, 120}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{120, 122}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 105}, /*.SuffixRange=*/{122, 128} + }, + /*.basename=*/"_invariantCheck", + /*.arguments=*/"()" + }, + { "_TTSf2g___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{164, 168}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{168, 189}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 164}, /*.SuffixRange=*/{189, 216} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TTSf2dg___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{173, 177}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{177, 198}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 173}, /*.SuffixRange=*/{198, 225} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TTSf2dgs___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{186, 190}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{190, 211}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 186}, /*.SuffixRange=*/{211, 238} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TTSf3d_i_d_i_d_i___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{209, 213}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{213, 234}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 209}, /*.SuffixRange=*/{234, 261} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TTSf3d_i_n_i_d_i___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{194, 198}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{198, 219}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 194}, /*.SuffixRange=*/{219, 246} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TFFV23interface_type_mangling18GenericTypeContext23closureInGenericContexturFqd__T_L_3fooFTqd__x_T_", + { /*.BasenameRange=*/{0, 6}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{7, 14}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{14, 103} + }, + /*.basename=*/"foo #1", + /*.arguments=*/"(A1, A)" + }, + { "_TFFV23interface_type_mangling18GenericTypeContextg31closureInGenericPropertyContextxL_3fooFT_x", + { /*.BasenameRange=*/{0, 6}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{7, 9}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{9, 103} + }, + /*.basename=*/"foo #1", + /*.arguments=*/"()" + }, + { "_TTWurGV23interface_type_mangling18GenericTypeContextx_S_18GenericWitnessTestS_FS1_23closureInGenericContextuRxS1_rfqd__T_", + { /*.BasenameRange=*/{64, 87}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{142, 146}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 64}, /*.SuffixRange=*/{146, 289} + }, + /*.basename=*/"closureInGenericContext", + /*.arguments=*/"(A1)" + }, + { "_TTWurGV23interface_type_mangling18GenericTypeContextx_S_18GenericWitnessTestS_FS1_16twoParamsAtDepthu0_RxS1_rfTqd__1yqd_0__T_", + { /*.BasenameRange=*/{64, 80}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{138, 149}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 64}, /*.SuffixRange=*/{149, 292} + }, + /*.basename=*/"twoParamsAtDepth", + /*.arguments=*/"(A1, y: B1)" + }, + { "_TFC3red11BaseClassEHcfzT1aSi_S0_", + { /*.BasenameRange=*/{16, 20}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{20, 34}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 16}, /*.SuffixRange=*/{34, 60} + }, + /*.basename=*/"init", + /*.arguments=*/"(a: Swift.Int)" + }, + { "_TFC4testP33_83378C430F65473055F1BD53F3ADCDB71C5doFoofT_T_", + { /*.BasenameRange=*/{46, 51}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{51, 53}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 46}, /*.SuffixRange=*/{53, 59} + }, + /*.basename=*/"doFoo", + /*.arguments=*/"()" + }, + { "_TFVV15nested_generics5Lunch6DinnerCfT11firstCoursex12secondCourseGSqqd___9leftoversx14transformationFxqd___GS1_x_qd___", + { /*.BasenameRange=*/{29, 33}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{33, 124}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 29}, /*.SuffixRange=*/{124, 163} + }, + /*.basename=*/"init", + /*.arguments=*/"(firstCourse: A, secondCourse: Swift.Optional, leftovers: A, transformation: (A) -> A1)" + }, + { "_TFVFC15nested_generics7HotDogs11applyRelishFT_T_L_6RelishCfT8materialx_GS1_x_", + { /*.BasenameRange=*/{0, 4}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{4, 17}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{17, 140} + }, + /*.basename=*/"init", + /*.arguments=*/"(material: A)" + }, + { "_TFVFE15nested_genericsSS3fooFT_T_L_6CheeseCfT8materialx_GS0_x_", + { /*.BasenameRange=*/{0, 4}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{4, 17}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{17, 164} + }, + /*.basename=*/"init", + /*.arguments=*/"(material: A)" + }, + { "_T0s17MutableCollectionP1asAARzs012RandomAccessB0RzsAA11SubSequences013BidirectionalB0PRpzsAdHRQlE06rotatecD05Indexs01_A9IndexablePQzAM15shiftingToStart_tFAJs01_J4BasePQzAQcfU_", + { /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 41}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{41, 435} + }, + /*.basename=*/"closure #1", + /*.arguments=*/"(A.Swift._IndexableBase.Index)" + }, + { "_$Ss17MutableCollectionP1asAARzs012RandomAccessB0RzsAA11SubSequences013BidirectionalB0PRpzsAdHRQlE06rotatecD015shiftingToStart5Indexs01_A9IndexablePQzAN_tFAKs01_M4BasePQzAQcfU_", + { /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 41}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{41, 435} + }, + /*.basename=*/"closure #1", + /*.arguments=*/"(A.Swift._IndexableBase.Index)" + }, + { "_T04main5innerys5Int32Vz_yADctF25closure_with_box_argumentxz_Bi32__lXXTf1nc_n", + { /*.BasenameRange=*/{151, 156}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{156, 196}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 151}, /*.SuffixRange=*/{196, 202} + }, + /*.basename=*/"inner", + /*.arguments=*/"(inout Swift.Int32, (Swift.Int32) -> ())" + }, + { "_$S4main5inneryys5Int32Vz_yADctF25closure_with_box_argumentxz_Bi32__lXXTf1nc_n", + { /*.BasenameRange=*/{151, 156}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{156, 196}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 151}, /*.SuffixRange=*/{196, 202} + }, + /*.basename=*/"inner", + /*.arguments=*/"(inout Swift.Int32, (Swift.Int32) -> ())" + }, + { "_T03foo6testityyyc_yyctF1a1bTf3pfpf_n", + { /*.BasenameRange=*/{132, 138}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{138, 158}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 132}, /*.SuffixRange=*/{158, 164} + }, + /*.basename=*/"testit", + /*.arguments=*/"(() -> (), () -> ())" + }, + { "_$S3foo6testityyyyc_yyctF1a1bTf3pfpf_n", + { /*.BasenameRange=*/{132, 138}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{138, 158}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 132}, /*.SuffixRange=*/{158, 164} + }, + /*.basename=*/"testit", + /*.arguments=*/"(() -> (), () -> ())" + }, + { "_T0s10DictionaryV3t17E6Index2V1loiSbAEyxq__G_AGtFZ", + { /*.BasenameRange=*/{50, 57}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{57, 157}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 50}, /*.SuffixRange=*/{157, 171} + }, + /*.basename=*/"< infix", + /*.arguments=*/"((extension in t17):Swift.Dictionary.Index2, (extension in t17):Swift.Dictionary.Index2)" + }, + { "_T08mangling14varargsVsArrayySi3arrd_SS1ntF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 59}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{59, 65} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Int..., n: Swift.String)" + }, + { "_T08mangling14varargsVsArrayySaySiG3arr_SS1ntF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 69}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{69, 75} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Array, n: Swift.String)" + }, + { "_T08mangling14varargsVsArrayySaySiG3arrd_SS1ntF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 72}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{72, 78} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Array..., n: Swift.String)" + }, + { "_T08mangling14varargsVsArrayySi3arrd_tF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{42, 48} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Int...)" + }, + { "_T08mangling14varargsVsArrayySaySiG3arrd_tF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 55}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{55, 61} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Array...)" + }, + { "_$Ss10DictionaryV3t17E6Index2V1loiySbAEyxq__G_AGtFZ", + { /*.BasenameRange=*/{50, 57}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{57, 157}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 50}, /*.SuffixRange=*/{157, 171} + }, + /*.basename=*/"< infix", + /*.arguments=*/"((extension in t17):Swift.Dictionary.Index2, (extension in t17):Swift.Dictionary.Index2)" + }, + { "_$S8mangling14varargsVsArray3arr1nySid_SStF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 59}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{59, 65} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Int..., n: Swift.String)" + }, + { "_$S8mangling14varargsVsArray3arr1nySaySiG_SStF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 69}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{69, 75} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Array, n: Swift.String)" + }, + { "_$S8mangling14varargsVsArray3arr1nySaySiGd_SStF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 72}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{72, 78} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Array..., n: Swift.String)" + }, + { "_$S8mangling14varargsVsArray3arrySid_tF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{42, 48} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Int...)" + }, + { "_$S8mangling14varargsVsArray3arrySaySiGd_tF", + { /*.BasenameRange=*/{9, 23}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{23, 55}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{55, 61} + }, + /*.basename=*/"varargsVsArray", + /*.arguments=*/"(arr: Swift.Array...)" + }, + { "_T010Foundation11MeasurementV12SimulatorKitSo9UnitAngleCRszlE11OrientationO2eeoiSbAcDEAGOyAF_G_AKtFZ", + { /*.BasenameRange=*/{98, 106}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{106, 264}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 98}, /*.SuffixRange=*/{264, 278} + }, + /*.basename=*/"== infix", + /*.arguments=*/"((extension in SimulatorKit):Foundation.Measurement<__C.UnitAngle>.Orientation, (extension in SimulatorKit):Foundation.Measurement<__C.UnitAngle>.Orientation)" + }, + { "_$S10Foundation11MeasurementV12SimulatorKitSo9UnitAngleCRszlE11OrientationO2eeoiySbAcDEAGOyAF_G_AKtFZ", + { /*.BasenameRange=*/{98, 106}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{106, 264}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 98}, /*.SuffixRange=*/{264, 278} + }, + /*.basename=*/"== infix", + /*.arguments=*/"((extension in SimulatorKit):Foundation.Measurement<__C.UnitAngle>.Orientation, (extension in SimulatorKit):Foundation.Measurement<__C.UnitAngle>.Orientation)" + }, + { "_T04main1_yyF", + { /*.BasenameRange=*/{5, 6}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{6, 8}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{8, 14} + }, + /*.basename=*/"_", + /*.arguments=*/"()" + }, + { "_T04test6testitSiyt_tF", + { /*.BasenameRange=*/{5, 11}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 15}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{15, 28} + }, + /*.basename=*/"testit", + /*.arguments=*/"(())" + }, + { "_$S4test6testitySiyt_tF", + { /*.BasenameRange=*/{5, 11}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 15}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{15, 28} + }, + /*.basename=*/"testit", + /*.arguments=*/"(())" + }, + { "_T03abc6testitySiFTm", + { /*.BasenameRange=*/{11, 17}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{17, 28}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 11}, /*.SuffixRange=*/{28, 34} + }, + /*.basename=*/"testit", + /*.arguments=*/"(Swift.Int)" + }, + { "_T04main4TestCACSi1x_tc6_PRIV_Llfc", + { /*.BasenameRange=*/{10, 26}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{26, 40}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 10}, /*.SuffixRange=*/{40, 53} + }, + /*.basename=*/"(in _PRIV_).init", + /*.arguments=*/"(x: Swift.Int)" + }, + { "_$S3abc6testityySiFTm", + { /*.BasenameRange=*/{11, 17}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{17, 28}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 11}, /*.SuffixRange=*/{28, 34} + }, + /*.basename=*/"testit", + /*.arguments=*/"(Swift.Int)" + }, + { "_$S4main4TestC1xACSi_tc6_PRIV_Llfc", + { /*.BasenameRange=*/{10, 26}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{26, 40}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 10}, /*.SuffixRange=*/{40, 53} + }, + /*.basename=*/"(in _PRIV_).init", + /*.arguments=*/"(x: Swift.Int)" + }, + { "_T03nix6testitSaySiGyFTv_", + { /*.BasenameRange=*/{28, 34}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{34, 36}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 28}, /*.SuffixRange=*/{36, 62} + }, + /*.basename=*/"testit", + /*.arguments=*/"()" + }, + { "_T03nix6testitSaySiGyFTv_r", + { /*.BasenameRange=*/{36, 42}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{42, 44}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 36}, /*.SuffixRange=*/{44, 70} + }, + /*.basename=*/"testit", + /*.arguments=*/"()" + }, + { "_T03nix6testitSaySiGyFTv0_", + { /*.BasenameRange=*/{28, 34}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{34, 36}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 28}, /*.SuffixRange=*/{36, 62} + }, + /*.basename=*/"testit", + /*.arguments=*/"()" + }, + { "$sSo5GizmoC11doSomethingyypSgSaySSGSgFToTembgnn_", + { /*.BasenameRange=*/{51, 62}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{62, 105}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 51}, /*.SuffixRange=*/{105, 128} + }, + /*.basename=*/"doSomething", + /*.arguments=*/"(Swift.Optional>)" + }, + { "_T0s24_UnicodeScalarExceptions33_0E4228093681F6920F0AB2E48B4F1C69LLVACycfC", + { /*.BasenameRange=*/{70, 74}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{74, 76}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 70}, /*.SuffixRange=*/{76, 149} + }, + /*.basename=*/"init", + /*.arguments=*/"()" + }, + { "_T0s18EnumeratedIteratorVyxGs8Sequencess0B8ProtocolRzlsADP5splitSay03SubC0QzGSi9maxSplits_Sb25omittingEmptySubsequencesSb7ElementQzKc14whereSeparatortKFTW", + { /*.BasenameRange=*/{36, 41}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{41, 152}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 36}, /*.SuffixRange=*/{152, 294} + }, + /*.basename=*/"split", + /*.arguments=*/"(maxSplits: Swift.Int, omittingEmptySubsequences: Swift.Bool, whereSeparator: (A.Element) throws -> Swift.Bool)" + }, + { "$s18opaque_return_type3fooQryFQOHo", + { /*.BasenameRange=*/{85, 88}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{88, 90}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 85}, /*.SuffixRange=*/{90, 100} + }, + /*.basename=*/"foo", + /*.arguments=*/"()" + }, + { "$s20mangling_retroactive5test0yyAA1ZVy12RetroactiveB1XVSiAE1YVAG0D1A1PAAyHCg_AiJ1QAAyHCg1_GF", + { /*.BasenameRange=*/{21, 26}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{26, 93}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 21}, /*.SuffixRange=*/{93, 99} + }, + /*.basename=*/"test0", + /*.arguments=*/"(mangling_retroactive.Z)" + }, + { "$s20mangling_retroactive5test0yyAA1ZVy12RetroactiveB1XVSiAE1YVAG0D1A1PHPyHCg_AiJ1QHPyHCg1_GF", + { /*.BasenameRange=*/{21, 26}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{26, 93}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 21}, /*.SuffixRange=*/{93, 99} + }, + /*.basename=*/"test0", + /*.arguments=*/"(mangling_retroactive.Z)" + }, + { "$s20mangling_retroactive5test0yyAA1ZVy12RetroactiveB1XVSiAE1YVAG0D1A1PHpyHCg_AiJ1QHpyHCg1_GF", + { /*.BasenameRange=*/{21, 26}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{26, 93}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 21}, /*.SuffixRange=*/{93, 99} + }, + /*.basename=*/"test0", + /*.arguments=*/"(mangling_retroactive.Z)" + }, + { "_TTSf0os___TFVs17_LegacyStringCore15_invariantCheckfT_T_", + { /*.BasenameRange=*/{105, 120}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{120, 122}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 105}, /*.SuffixRange=*/{122, 128} + }, + /*.basename=*/"_invariantCheck", + /*.arguments=*/"()" + }, + { "_TTSf2o___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{164, 168}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{168, 189}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 164}, /*.SuffixRange=*/{189, 216} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TTSf2do___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{173, 177}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{177, 198}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 173}, /*.SuffixRange=*/{198, 225} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TTSf2dos___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_", + { /*.BasenameRange=*/{186, 190}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{190, 211}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 186}, /*.SuffixRange=*/{211, 238} + }, + /*.basename=*/"init", + /*.arguments=*/"(Swift._StringBuffer)" + }, + { "_TtCF4test11doNotCrash1FT_QuL_8MyClass1", + { /*.BasenameRange=*/{20, 31}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{31, 33}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 20}, /*.SuffixRange=*/{33, 41} + }, + /*.basename=*/"doNotCrash1", + /*.arguments=*/"()" + }, + { "$s4Test5ProtoP8IteratorV10collectionAEy_qd__Gqd___tcfc", + { /*.BasenameRange=*/{20, 24}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{24, 40}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 20}, /*.SuffixRange=*/{40, 67} + }, + /*.basename=*/"init", + /*.arguments=*/"(collection: A1)" + }, + { "$s4test3fooV4blahyAA1SV1fQryFQOy_Qo_AHF", + { /*.BasenameRange=*/{9, 13}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{13, 61}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{61, 111} + }, + /*.basename=*/"blah", + /*.arguments=*/"(< some>>.0)" + }, + { "$S3nix8MystructV1xACyxGx_tcfc7MyaliasL_ayx__GD", + { /*.BasenameRange=*/{30, 34}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{34, 40}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 30}, /*.SuffixRange=*/{40, 59} + }, + /*.basename=*/"init", + /*.arguments=*/"(x: A)" + }, + { "$S3nix8MystructV6testit1xyx_tF7MyaliasL_ayx__GD", + { /*.BasenameRange=*/{30, 36}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{36, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 30}, /*.SuffixRange=*/{42, 48} + }, + /*.basename=*/"testit", + /*.arguments=*/"(x: A)" + }, + { "$S3nix8MystructV6testit1x1u1vyx_qd__qd_0_tr0_lF7MyaliasL_ayx_qd__qd_0__GD", + { /*.BasenameRange=*/{30, 36}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{44, 64}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 30}, /*.SuffixRange=*/{64, 70} + }, + /*.basename=*/"testit", + /*.arguments=*/"(x: A, u: A1, v: B1)" + }, + { "$s1A1gyyxlFx_qd__t_Ti5", + { /*.BasenameRange=*/{40, 41}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{44, 47}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 40}, /*.SuffixRange=*/{47, 53} + }, + /*.basename=*/"g", + /*.arguments=*/"(A)" + }, + { "$s4Test6testityyxlFAA8MystructV_TB5", + { /*.BasenameRange=*/{47, 53}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{56, 59}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 47}, /*.SuffixRange=*/{59, 65} + }, + /*.basename=*/"testit", + /*.arguments=*/"(A)" + }, + { "$sSUss17FixedWidthIntegerRzrlEyxqd__cSzRd__lufCSu_SiTg5", + { /*.BasenameRange=*/{128, 132}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{165, 169}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 128}, /*.SuffixRange=*/{169, 174} + }, + /*.basename=*/"init", + /*.arguments=*/"(A1)" + }, + { "$s4test7genFuncyyx_q_tr0_lFSi_SbTtt1g5", + { /*.BasenameRange=*/{55, 62}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{68, 74}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 55}, /*.SuffixRange=*/{74, 80} + }, + /*.basename=*/"genFunc", + /*.arguments=*/"(A, B)" + }, + { "$s4test3StrCACycfC", + { /*.BasenameRange=*/{9, 26}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{26, 28}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{28, 40} + }, + /*.basename=*/"__allocating_init", + /*.arguments=*/"()" + }, + { "$s3red4testyAA3ResOyxSayq_GAEs5ErrorAAq_sAFHD1__HCg_GADyxq_GsAFR_r0_lF", + { /*.BasenameRange=*/{4, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{35, 50}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 4}, /*.SuffixRange=*/{50, 80} + }, + /*.basename=*/"test", + /*.arguments=*/"(red.Res)" + }, + { "$s3red4testyAA7OurTypeOy4them05TheirD0Vy5AssocQzGAjE0F8ProtocolAAxAA0c7DerivedH0HD1_AA0c4BaseH0HI1_AieKHA2__HCg_GxmAaLRzlF", + { /*.BasenameRange=*/{4, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{43, 51}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 4}, /*.SuffixRange=*/{51, 91} + }, + /*.basename=*/"test", + /*.arguments=*/"(A.Type)" + }, + { "$sSo17OS_dispatch_queueC4sync7executeyyyXE_tFTOTA", + { /*.BasenameRange=*/{59, 63}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{63, 82}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 59}, /*.SuffixRange=*/{82, 88} + }, + /*.basename=*/"sync", + /*.arguments=*/"(execute: () -> ())" + }, + { "$s7example1fyyYaF", + { /*.BasenameRange=*/{8, 9}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{9, 11}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 8}, /*.SuffixRange=*/{11, 23} + }, + /*.basename=*/"f", + /*.arguments=*/"()" + }, + { "$s7example1fyyYaKF", + { /*.BasenameRange=*/{8, 9}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{9, 11}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 8}, /*.SuffixRange=*/{11, 30} + }, + /*.basename=*/"f", + /*.arguments=*/"()" + }, + { "$s4main20receiveInstantiationyySo34__CxxTemplateInst12MagicWrapperIiEVzF", + { /*.BasenameRange=*/{5, 25}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{25, 71}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{71, 77} + }, + /*.basename=*/"receiveInstantiation", + /*.arguments=*/"(inout __C.__CxxTemplateInst12MagicWrapperIiE)" + }, + { "$s4main19returnInstantiationSo34__CxxTemplateInst12MagicWrapperIiEVyF", + { /*.BasenameRange=*/{5, 24}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{24, 26}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{26, 68} + }, + /*.basename=*/"returnInstantiation", + /*.arguments=*/"()" + }, + { "$s4main6testityyYaFTu", + { /*.BasenameRange=*/{31, 37}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{37, 39}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 31}, /*.SuffixRange=*/{39, 51} + }, + /*.basename=*/"testit", + /*.arguments=*/"()" + }, + { "$s13test_mangling3fooyS2f_S2ftFTJfUSSpSr", + { /*.BasenameRange=*/{41, 44}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{44, 83}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 41}, /*.SuffixRange=*/{83, 148} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Float, Swift.Float, Swift.Float)" + }, + { "$s13test_mangling4foo21xq_x_t16_Differentiation14DifferentiableR_AA1P13TangentVectorRp_r0_lFAdERzAdER_AafGRpzAafHRQr0_lTJrSpSr", + { /*.BasenameRange=*/{41, 45}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{126, 132}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 41}, /*.SuffixRange=*/{132, 341} + }, + /*.basename=*/"foo2", + /*.arguments=*/"(x: A)" + }, + { "$s13test_mangling4foo21xq_x_t16_Differentiation14DifferentiableR_AA1P13TangentVectorRp_r0_lFAdERzAdER_AafGRpzAafHRQr0_lTJVrSpSr", + { /*.BasenameRange=*/{58, 62}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{143, 149}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 58}, /*.SuffixRange=*/{149, 358} + }, + /*.basename=*/"foo2", + /*.arguments=*/"(x: A)" + }, + { "$s13test_mangling3fooyS2f_xq_t16_Differentiation14DifferentiableR_r0_lFAcDRzAcDR_r0_lTJpUSSpSr", + { /*.BasenameRange=*/{26, 29}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{76, 95}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 26}, /*.SuffixRange=*/{95, 249} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Float, A, B)" + }, + { "$s13test_mangling4foo21xq_x_t16_Differentiation14DifferentiableR_AA1P13TangentVectorRp_r0_lFTSAdERzAdER_AafGRpzAafHRQr0_lTJrSpSr", + { /*.BasenameRange=*/{79, 83}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{164, 170}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 79}, /*.SuffixRange=*/{170, 379} + }, + /*.basename=*/"foo2", + /*.arguments=*/"(x: A)" + }, + { "$s13test_mangling3fooyS2f_xq_t16_Differentiation14DifferentiableR_r0_lFAcDRzAcDR_r0_lTJpUSSpSrTj", + { /*.BasenameRange=*/{44, 47}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{94, 113}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 44}, /*.SuffixRange=*/{113, 267} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Float, A, B)" + }, + { "$s13test_mangling3fooyS2f_xq_t16_Differentiation14DifferentiableR_r0_lFAcDRzAcDR_r0_lTJpUSSpSrTq", + { /*.BasenameRange=*/{48, 51}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{98, 117}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 48}, /*.SuffixRange=*/{117, 271} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Float, A, B)" + }, + { "$s39differentiation_subset_parameters_thunk19inoutIndirectCalleryq_x_q_q0_t16_Differentiation14DifferentiableRzAcDR_AcDR0_r1_lFxq_Sdq_xq_Sdr0_ly13TangentVectorAcDPQy_AeFQzIsegnrr_Iegnnnro_TJSrSSSpSrSUSP", + { /*.BasenameRange=*/{106, 125}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{247, 256}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 106}, /*.SuffixRange=*/{256, 658} + }, + /*.basename=*/"inoutIndirectCaller", + /*.arguments=*/"(A, B, C)" + }, + { "$s13test_mangling3fooyS2f_S2ftFWJrSpSr", + { /*.BasenameRange=*/{57, 60}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{60, 99}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 57}, /*.SuffixRange=*/{99, 161} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Float, Swift.Float, Swift.Float)" + }, + { "$s13test_mangling3fooyS2f_xq_t16_Differentiation14DifferentiableR_r0_lFAcDRzAcDR_r0_lWJrUSSpSr", + { /*.BasenameRange=*/{57, 60}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{107, 126}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 57}, /*.SuffixRange=*/{126, 280} + }, + /*.basename=*/"foo", + /*.arguments=*/"(Swift.Float, A, B)" + }, + { "$s5async1hyyS2iYbXEF", + { /*.BasenameRange=*/{6, 7}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{7, 43}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 6}, /*.SuffixRange=*/{43, 49} + }, + /*.basename=*/"h", + /*.arguments=*/"(@Sendable (Swift.Int) -> Swift.Int)" + }, + { "$s5Actor02MyA0C17testAsyncFunctionyyYaKFTY0_", + { /*.BasenameRange=*/{54, 71}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{71, 73}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 54}, /*.SuffixRange=*/{73, 92} + }, + /*.basename=*/"testAsyncFunction", + /*.arguments=*/"()" + }, + { "$s5Actor02MyA0C17testAsyncFunctionyyYaKFTQ1_", + { /*.BasenameRange=*/{52, 69}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{69, 71}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 52}, /*.SuffixRange=*/{71, 90} + }, + /*.basename=*/"testAsyncFunction", + /*.arguments=*/"()" + }, + { "$s4diff1hyyS2iYjfXEF", + { /*.BasenameRange=*/{5, 6}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{6, 58}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{58, 64} + }, + /*.basename=*/"h", + /*.arguments=*/"(@differentiable(_forward) (Swift.Int) -> Swift.Int)" + }, + { "$s4diff1hyyS2iYjrXEF", + { /*.BasenameRange=*/{5, 6}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{6, 57}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{57, 63} + }, + /*.basename=*/"h", + /*.arguments=*/"(@differentiable(reverse) (Swift.Int) -> Swift.Int)" + }, + { "$s4diff1hyyS2iYjdXEF", + { /*.BasenameRange=*/{5, 6}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{6, 48}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{48, 54} + }, + /*.basename=*/"h", + /*.arguments=*/"(@differentiable (Swift.Int) -> Swift.Int)" + }, + { "$s4diff1hyyS2iYjlXEF", + { /*.BasenameRange=*/{5, 6}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{6, 57}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{57, 63} + }, + /*.basename=*/"h", + /*.arguments=*/"(@differentiable(_linear) (Swift.Int) -> Swift.Int)" + }, + { "$s4test3fooyyS2f_SfYkztYjrXEF", + { /*.BasenameRange=*/{5, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{8, 96}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{96, 102} + }, + /*.basename=*/"foo", + /*.arguments=*/"(@differentiable(reverse) (Swift.Float, inout @noDerivative Swift.Float) -> Swift.Float)" + }, + { "$s4test3fooyyS2f_SfYkntYjrXEF", + { /*.BasenameRange=*/{5, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{8, 98}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{98, 104} + }, + /*.basename=*/"foo", + /*.arguments=*/"(@differentiable(reverse) (Swift.Float, __owned @noDerivative Swift.Float) -> Swift.Float)" + }, + { "$s4test3fooyyS2f_SfYktYjrXEF", + { /*.BasenameRange=*/{5, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{8, 90}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{90, 96} + }, + /*.basename=*/"foo", + /*.arguments=*/"(@differentiable(reverse) (Swift.Float, @noDerivative Swift.Float) -> Swift.Float)" + }, + { "$s4test3fooyyS2f_SfYktYaYbYjrXEF", + { /*.BasenameRange=*/{5, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{8, 106}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{106, 112} + }, + /*.basename=*/"foo", + /*.arguments=*/"(@differentiable(reverse) @Sendable (Swift.Float, @noDerivative Swift.Float) async -> Swift.Float)" + }, + { "$s1t10globalFuncyyAA7MyActorCYiF", + { /*.BasenameRange=*/{2, 12}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{12, 32}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 2}, /*.SuffixRange=*/{32, 38} + }, + /*.basename=*/"globalFunc", + /*.arguments=*/"(isolated t.MyActor)" + }, + { "$s6Foobar7Vector2VAASdRszlE10simdMatrix5scale6rotate9translateSo0C10_double3x3aACySdG_SdAJtFZ0D4TypeL_aySd__GD", + { /*.BasenameRange=*/{102, 112}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{112, 212}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 102}, /*.SuffixRange=*/{212, 234} + }, + /*.basename=*/"simdMatrix", + /*.arguments=*/"(scale: Foobar.Vector2, rotate: Swift.Double, translate: Foobar.Vector2)" + }, + { "$s17distributed_thunk2DAC1fyyFTE", + { /*.BasenameRange=*/{39, 40}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{40, 42}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 39}, /*.SuffixRange=*/{42, 48} + }, + /*.basename=*/"f", + /*.arguments=*/"()" + }, + { "$s16distributed_test1XC7computeyS2iFTF", + { /*.BasenameRange=*/{44, 51}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{51, 62}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 44}, /*.SuffixRange=*/{62, 75} + }, + /*.basename=*/"compute", + /*.arguments=*/"(Swift.Int)" + }, + { "$s27distributed_actor_accessors7MyActorC7simple2ySSSiFTETFHF", + { /*.BasenameRange=*/{118, 125}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{125, 136}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 118}, /*.SuffixRange=*/{136, 152} + }, + /*.basename=*/"simple2", + /*.arguments=*/"(Swift.Int)" + }, + { "$s1A3bar1aySSYt_tF", + { /*.BasenameRange=*/{2, 5}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{5, 29}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 2}, /*.SuffixRange=*/{29, 35} + }, + /*.basename=*/"bar", + /*.arguments=*/"(a: _const Swift.String)" + }, + { "$s1t1fyyFSiAA3StrVcs7KeyPathCyADSiGcfu_SiADcfu0_33_556644b740b1b333fecb81e55a7cce98ADSiTf3npk_n", + { /*.BasenameRange=*/{258, 259}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{259, 261}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 258}, /*.SuffixRange=*/{261, 267} + }, + /*.basename=*/"f", + /*.arguments=*/"()" + }, + { "$s21back_deploy_attribute0A12DeployedFuncyyFTwb", + { /*.BasenameRange=*/{48, 64}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{64, 66}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 48}, /*.SuffixRange=*/{66, 72} + }, + /*.basename=*/"backDeployedFunc", + /*.arguments=*/"()" + }, + { "$s21back_deploy_attribute0A12DeployedFuncyyFTwB", + { /*.BasenameRange=*/{51, 67}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{67, 69}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 51}, /*.SuffixRange=*/{69, 75} + }, + /*.basename=*/"backDeployedFunc", + /*.arguments=*/"()" + }, + { "$s4test3fooyyAA1P_px1TRts_XPlF", + { /*.BasenameRange=*/{5, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{11, 36}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{36, 42} + }, + /*.basename=*/"foo", + /*.arguments=*/"(any test.P)" + }, + { "$s4test3fooyyAA1P_pSS1TAaCPRts_Si1UAERtsXPF", + { /*.BasenameRange=*/{5, 8}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{8, 79}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{79, 85} + }, + /*.basename=*/"foo", + /*.arguments=*/"(any test.P)" + }, + { "$s4test3FooVAAyyAA1P_pF", + { /*.BasenameRange=*/{9, 13}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{13, 21}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 9}, /*.SuffixRange=*/{21, 27} + }, + /*.basename=*/"test", + /*.arguments=*/"(test.P)" + }, + { "$s7Library3fooyyFTwS", + { /*.BasenameRange=*/{30, 33}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{33, 35}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 30}, /*.SuffixRange=*/{35, 41} + }, + /*.basename=*/"foo", + /*.arguments=*/"()" + }, + { "$s9MacroUser13testStringify1a1bySi_SitF9stringifyfMf1_", + { /*.BasenameRange=*/{58, 71}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{71, 99}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 58}, /*.SuffixRange=*/{99, 105} + }, + /*.basename=*/"testStringify", + /*.arguments=*/"(a: Swift.Int, b: Swift.Int)" + }, + { "$s9MacroUser016testFreestandingA9ExpansionyyF4Foo3L_V23bitwidthNumberedStructsfMf_6methodfMu0_", + { /*.BasenameRange=*/{111, 141}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{141, 143}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 111}, /*.SuffixRange=*/{143, 149} + }, + /*.basename=*/"testFreestandingMacroExpansion", + /*.arguments=*/"()" + }, + { "@__swiftmacro_1a13testStringifyAA1bySi_SitF9stringifyfMf_", + { /*.BasenameRange=*/{50, 63}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{63, 91}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 50}, /*.SuffixRange=*/{91, 97} + }, + /*.basename=*/"testStringify", + /*.arguments=*/"(a: Swift.Int, b: Swift.Int)" + }, + { "$s12typed_throws15rethrowConcreteyyAA7MyErrorOYKF", + { /*.BasenameRange=*/{13, 28}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{28, 30}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 13}, /*.SuffixRange=*/{30, 65} + }, + /*.basename=*/"rethrowConcrete", + /*.arguments=*/"()" + }, + { "$s3red3use2fnySiyYAXE_tF", + { /*.BasenameRange=*/{4, 7}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{7, 43}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 4}, /*.SuffixRange=*/{43, 49} + }, + /*.basename=*/"use", + /*.arguments=*/"(fn: @isolated(any) () -> Swift.Int)" + }, + { "$s4testAAyAA5KlassC_ACtACnYTF", + { /*.BasenameRange=*/{5, 9}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{9, 29}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{29, 65} + }, + /*.basename=*/"test", + /*.arguments=*/"(__owned test.Klass)" + }, + { "$s5test24testyyAA5KlassCnYuF", + { /*.BasenameRange=*/{6, 10}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{10, 39}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 6}, /*.SuffixRange=*/{39, 45} + }, + /*.basename=*/"test", + /*.arguments=*/"(sending __owned test2.Klass)" + }, + { "$s4testA2A5KlassCyYTF", + { /*.BasenameRange=*/{5, 9}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{9, 11}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{11, 33} + }, + /*.basename=*/"test", + /*.arguments=*/"()" + }, + { "$s4null19transferAsyncResultAA16NonSendableKlassCyYaYTF", + { /*.BasenameRange=*/{5, 24}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{24, 26}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 5}, /*.SuffixRange=*/{26, 65} + }, + /*.basename=*/"transferAsyncResult", + /*.arguments=*/"()" + }, + { "$s3red7MyActorC3runyxxyYaKACYcYTXEYaKlFZ", + { /*.BasenameRange=*/{19, 22}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{25, 68}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 19}, /*.SuffixRange=*/{68, 86} + }, + /*.basename=*/"run", + /*.arguments=*/"(@red.MyActor () async throws -> sending A)" + }, + { "$s3red7MyActorC3runyxxyYaKYAYTXEYaKlFZ", + { /*.BasenameRange=*/{19, 22}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{25, 70}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 19}, /*.SuffixRange=*/{70, 88} + }, + /*.basename=*/"run", + /*.arguments=*/"(@isolated(any) () async throws -> sending A)" + }, + { "$s3red7MyActorC3runyxxyYaKYCXEYaKlFZ", + { /*.BasenameRange=*/{19, 22}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{25, 71}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 19}, /*.SuffixRange=*/{71, 89} + }, + /*.basename=*/"run", + /*.arguments=*/"(nonisolated(nonsending) () async throws -> A)" + }, + { "_$s15raw_identifiers0020pathfoo_yuEHaaCiJskayyF", + { /*.BasenameRange=*/{16, 28}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{28, 30}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 16}, /*.SuffixRange=*/{30, 36} + }, + /*.basename=*/"`path://foo`", + /*.arguments=*/"()" + }, + { "_$s15raw_identifiers10FontWeightO009_100_FpEpdyyFZ", + { /*.BasenameRange=*/{34, 39}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{39, 41}, + /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 34}, /*.SuffixRange=*/{41, 47} + }, + /*.basename=*/"`100`", + /*.arguments=*/"()" + }, + // clang-format on +}; + +struct SwiftDemanglingPartsTestFixture + : public ::testing::TestWithParam {}; + +TEST_P(SwiftDemanglingPartsTestFixture, SwiftDemanglingParts) { + const auto &[mangled, info, basename, arguments] = GetParam(); + + TrackingNodePrinter printer = + TrackingNodePrinter(swift::Demangle::DemangleOptions()); + std::string demangled = swift::Demangle::demangleSymbolAsString( + std::string(mangled), swift::Demangle::DemangleOptions(), &printer); + DemangledNameInfo nameInfo = printer.takeInfo(); + nameInfo.PrefixRange.second = + std::min(info.BasenameRange.first, info.ArgumentsRange.first); + nameInfo.SuffixRange.first = + std::max(info.BasenameRange.second, info.ArgumentsRange.second); + nameInfo.SuffixRange.second = demangled.length(); + + EXPECT_EQ(nameInfo.BasenameRange, info.BasenameRange); + EXPECT_EQ(nameInfo.ScopeRange, info.ScopeRange); + EXPECT_EQ(nameInfo.ArgumentsRange, info.ArgumentsRange); + EXPECT_EQ(nameInfo.QualifiersRange, info.QualifiersRange); + EXPECT_EQ(nameInfo.PrefixRange, info.PrefixRange); + EXPECT_EQ(nameInfo.SuffixRange, info.SuffixRange); + + auto get_part = [&](const std::pair &loc) { + return demangled.substr(loc.first, loc.second - loc.first); + }; + + EXPECT_EQ(get_part(nameInfo.BasenameRange), basename); + EXPECT_EQ(get_part(nameInfo.ArgumentsRange), arguments); +} + +INSTANTIATE_TEST_SUITE_P( + SwiftDemanglingPartsTests, SwiftDemanglingPartsTestFixture, + ::testing::ValuesIn(g_swift_demangling_parts_test_cases));