@@ -1653,29 +1653,6 @@ swift::Demangle::NodePointer TypeSystemSwiftTypeRef::GetDemangleTreeForPrinting(
16531653 return GetNodeForPrintingImpl (dem, node, flavor, resolve_objc_module);
16541654}
16551655
1656- // / Determine wether this demangle tree contains a node of kind \c kind and with
1657- // / text \c text (if provided).
1658- static bool Contains (swift::Demangle::NodePointer node,
1659- swift::Demangle::Node::Kind kind,
1660- llvm::StringRef text = " " ) {
1661- if (!node)
1662- return false ;
1663-
1664- if (node->getKind () == kind) {
1665- if (text.empty ())
1666- return true ;
1667- if (!node->hasText ())
1668- return false ;
1669- return node->getText () == text;
1670- }
1671-
1672- for (swift::Demangle::NodePointer child : *node)
1673- if (Contains (child, kind, text))
1674- return true ;
1675-
1676- return false ;
1677- }
1678-
16791656static bool ProtocolCompositionContainsSingleObjcProtocol (
16801657 swift::Demangle::NodePointer node) {
16811658 // Kind=ProtocolList
@@ -1691,12 +1668,18 @@ static bool ProtocolCompositionContainsSingleObjcProtocol(
16911668 type_list->getNumChildren () != 1 )
16921669 return false ;
16931670 NodePointer type = type_list->getFirstChild ();
1694- return Contains (type, Node::Kind::Module, swift::MANGLING_MODULE_OBJC);
1671+ return swift_demangle::FindIf (type, [](NodePointer node) {
1672+ return node->getKind () == Node::Kind::Module && node->hasText () &&
1673+ node->getText () == swift::MANGLING_MODULE_OBJC;
1674+ });
16951675}
16961676
16971677// / Determine wether this demangle tree contains a generic type parameter.
16981678static bool ContainsGenericTypeParameter (swift::Demangle::NodePointer node) {
1699- return Contains (node, swift::Demangle::Node::Kind::DependentGenericParamType);
1679+ return swift_demangle::FindIf (node, [](NodePointer node) {
1680+ return node->getKind () ==
1681+ swift::Demangle::Node::Kind::DependentGenericParamType;
1682+ });
17001683}
17011684
17021685// / Collect TypeInfo flags from a demangle tree. For most attributes
@@ -1929,7 +1912,9 @@ uint32_t TypeSystemSwiftTypeRef::CollectTypeInfo(
19291912 if (swift_flags != eTypeIsSwift) {
19301913 if (ContainsGenericTypeParameter (node))
19311914 swift_flags |= eTypeHasUnboundGeneric;
1932- if (Contains (node, Node::Kind::DynamicSelf))
1915+ if (swift_demangle::FindIf (node, [](NodePointer node) {
1916+ return node->getKind () == swift::Demangle::Node::Kind::DynamicSelf;
1917+ }))
19331918 swift_flags |= eTypeHasDynamicSelf;
19341919 return swift_flags;
19351920 }
@@ -2817,6 +2802,8 @@ constexpr ExecutionContextScope *g_no_exe_ctx = nullptr;
28172802
28182803bool TypeSystemSwiftTypeRef::UseSwiftASTContextFallback (
28192804 const char *func_name, lldb::opaque_compiler_type_t type) {
2805+ if (IsExpressionEvaluatorDefined (type))
2806+ return true ;
28202807 if (!ModuleList::GetGlobalModuleListProperties ().GetSwiftTypeSystemFallback ())
28212808 return false ;
28222809
@@ -2827,8 +2814,11 @@ bool TypeSystemSwiftTypeRef::UseSwiftASTContextFallback(
28272814 return true ;
28282815}
28292816
2830- bool TypeSystemSwiftTypeRef::DiagnoseSwiftASTContextFallback (
2817+ void TypeSystemSwiftTypeRef::DiagnoseSwiftASTContextFallback (
28312818 const char *func_name, lldb::opaque_compiler_type_t type) {
2819+ if (IsExpressionEvaluatorDefined (type))
2820+ return ;
2821+
28322822 const char *type_name = AsMangledName (type);
28332823
28342824 std::optional<lldb::user_id_t > debugger_id;
@@ -2842,7 +2832,6 @@ bool TypeSystemSwiftTypeRef::DiagnoseSwiftASTContextFallback(
28422832 Debugger::ReportWarning (msg, debugger_id, &m_fallback_warning);
28432833
28442834 LLDB_LOGF (GetLog (LLDBLog::Types), " %s" , msg.c_str ());
2845- return true ;
28462835}
28472836
28482837CompilerType
@@ -2900,6 +2889,20 @@ TypeSystemSwiftTypeRef::DemangleCanonicalOutermostType(
29002889 return canonical;
29012890}
29022891
2892+ bool TypeSystemSwiftTypeRef::IsExpressionEvaluatorDefined (
2893+ lldb::opaque_compiler_type_t type) {
2894+ using namespace swift ::Demangle;
2895+ const auto *mangled_name = AsMangledName (type);
2896+ Demangler dem;
2897+ NodePointer node = GetDemangledType (dem, mangled_name);
2898+ return swift_demangle::FindIf (node, [](NodePointer node) -> NodePointer {
2899+ if (node->getKind () == Node::Kind::Module &&
2900+ node->getText ().starts_with (" __lldb_expr" ))
2901+ return node;
2902+ return nullptr ;
2903+ });
2904+ }
2905+
29032906CompilerType TypeSystemSwiftTypeRef::CreateGenericTypeParamType (
29042907 unsigned int depth, unsigned int index,
29052908 swift::Mangle::ManglingFlavor flavor) {
0 commit comments