@@ -1653,29 +1653,6 @@ swift::Demangle::NodePointer TypeSystemSwiftTypeRef::GetDemangleTreeForPrinting(
1653
1653
return GetNodeForPrintingImpl (dem, node, flavor, resolve_objc_module);
1654
1654
}
1655
1655
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
-
1679
1656
static bool ProtocolCompositionContainsSingleObjcProtocol (
1680
1657
swift::Demangle::NodePointer node) {
1681
1658
// Kind=ProtocolList
@@ -1691,12 +1668,18 @@ static bool ProtocolCompositionContainsSingleObjcProtocol(
1691
1668
type_list->getNumChildren () != 1 )
1692
1669
return false ;
1693
1670
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
+ });
1695
1675
}
1696
1676
1697
1677
// / Determine wether this demangle tree contains a generic type parameter.
1698
1678
static 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
+ });
1700
1683
}
1701
1684
1702
1685
// / Collect TypeInfo flags from a demangle tree. For most attributes
@@ -1929,7 +1912,9 @@ uint32_t TypeSystemSwiftTypeRef::CollectTypeInfo(
1929
1912
if (swift_flags != eTypeIsSwift) {
1930
1913
if (ContainsGenericTypeParameter (node))
1931
1914
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
+ }))
1933
1918
swift_flags |= eTypeHasDynamicSelf;
1934
1919
return swift_flags;
1935
1920
}
@@ -2817,6 +2802,8 @@ constexpr ExecutionContextScope *g_no_exe_ctx = nullptr;
2817
2802
2818
2803
bool TypeSystemSwiftTypeRef::UseSwiftASTContextFallback (
2819
2804
const char *func_name, lldb::opaque_compiler_type_t type) {
2805
+ if (IsExpressionEvaluatorDefined (type))
2806
+ return true ;
2820
2807
if (!ModuleList::GetGlobalModuleListProperties ().GetSwiftTypeSystemFallback ())
2821
2808
return false ;
2822
2809
@@ -2827,8 +2814,11 @@ bool TypeSystemSwiftTypeRef::UseSwiftASTContextFallback(
2827
2814
return true ;
2828
2815
}
2829
2816
2830
- bool TypeSystemSwiftTypeRef::DiagnoseSwiftASTContextFallback (
2817
+ void TypeSystemSwiftTypeRef::DiagnoseSwiftASTContextFallback (
2831
2818
const char *func_name, lldb::opaque_compiler_type_t type) {
2819
+ if (IsExpressionEvaluatorDefined (type))
2820
+ return ;
2821
+
2832
2822
const char *type_name = AsMangledName (type);
2833
2823
2834
2824
std::optional<lldb::user_id_t > debugger_id;
@@ -2842,7 +2832,6 @@ bool TypeSystemSwiftTypeRef::DiagnoseSwiftASTContextFallback(
2842
2832
Debugger::ReportWarning (msg, debugger_id, &m_fallback_warning);
2843
2833
2844
2834
LLDB_LOGF (GetLog (LLDBLog::Types), " %s" , msg.c_str ());
2845
- return true ;
2846
2835
}
2847
2836
2848
2837
CompilerType
@@ -2900,6 +2889,20 @@ TypeSystemSwiftTypeRef::DemangleCanonicalOutermostType(
2900
2889
return canonical;
2901
2890
}
2902
2891
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
+
2903
2906
CompilerType TypeSystemSwiftTypeRef::CreateGenericTypeParamType (
2904
2907
unsigned int depth, unsigned int index,
2905
2908
swift::Mangle::ManglingFlavor flavor) {
0 commit comments