@@ -107,14 +107,15 @@ TypeSystemSwiftTypeRef::CanonicalizeSugar(swift::Demangle::Demangler &dem,
107
107
}
108
108
109
109
// / Create a mangled name for a type alias node.
110
- static ConstString GetTypeAlias (swift::Demangle::Demangler &dem,
111
- swift::Demangle::NodePointer node) {
110
+ static swift::Demangle::ManglingErrorOr<std::string>
111
+ GetTypeAlias (swift::Demangle::Demangler &dem,
112
+ swift::Demangle::NodePointer node) {
112
113
using namespace swift ::Demangle;
113
114
auto global = dem.createNode (Node::Kind::Global);
114
115
auto type_mangling = dem.createNode (Node::Kind::TypeMangling);
115
116
global->addChild (type_mangling, dem);
116
117
type_mangling->addChild (node, dem);
117
- return ConstString ( mangleNode (global) );
118
+ return mangleNode (global);
118
119
}
119
120
120
121
// / Find a Clang type by name in the modules in \p module_holder.
@@ -328,7 +329,14 @@ ResolveTypeAlias(SwiftASTContext *module_holder,
328
329
// Try to look this up as a Swift type alias. For each *Swift*
329
330
// type alias there is a debug info entry that has the mangled
330
331
// name as name and the aliased type as a type.
331
- ConstString mangled = GetTypeAlias (dem, node);
332
+ auto mangling = GetTypeAlias (dem, node);
333
+ if (!mangling.isSuccess ()) {
334
+ LLDB_LOGF (GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES),
335
+ " Failed while mangling type alias (%d:%u)" , mangling.error ().code ,
336
+ mangling.error ().line );
337
+ return {{}, {}};
338
+ }
339
+ ConstString mangled (mangling.result ());
332
340
TypeList types;
333
341
if (!prefer_clang_types) {
334
342
llvm::DenseSet<SymbolFile *> searched_symbol_files;
@@ -1332,7 +1340,10 @@ bool TypeSystemSwiftTypeRef::Verify(opaque_compiler_type_t type) {
1332
1340
using namespace swift ::Demangle;
1333
1341
Demangler dem;
1334
1342
NodePointer node = dem.demangleSymbol (str);
1335
- std::string remangled = mangleNode (node);
1343
+ auto mangling = mangleNode (node);
1344
+ if (!mangling.isSuccess ())
1345
+ return false ;
1346
+ std::string remangled = mangling.result ();
1336
1347
return remangled == std::string (str);
1337
1348
}
1338
1349
@@ -1476,10 +1487,14 @@ template <> bool Equivalent<CompilerType>(CompilerType l, CompilerType r) {
1476
1487
if (ContainsUnresolvedTypeAlias (r_node) ||
1477
1488
ContainsGenericTypeParameter (r_node) || ContainsSugaredParen (r_node))
1478
1489
return true ;
1479
- if (swift::Demangle::mangleNode (StripPrivateIDs (
1480
- dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, l_node))) ==
1481
- swift::Demangle::mangleNode (StripPrivateIDs (
1482
- dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, r_node))))
1490
+ auto l_mangling = swift::Demangle::mangleNode (StripPrivateIDs (
1491
+ dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, l_node)));
1492
+ auto r_mangling = swift::Demangle::mangleNode (StripPrivateIDs (
1493
+ dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, r_node)));
1494
+ if (!l_mangling.isSuccess () || !r_mangling.isSuccess ())
1495
+ return false ;
1496
+
1497
+ if (l_mangling.result () == r_mangling.result ())
1483
1498
return true ;
1484
1499
1485
1500
// SwiftASTContext hardcodes some less-precise types.
@@ -1645,7 +1660,10 @@ TypeSystemSwiftTypeRef::RemangleAsType(swift::Demangle::Demangler &dem,
1645
1660
auto type_mangling = dem.createNode (Node::Kind::TypeMangling);
1646
1661
type_mangling->addChild (node, dem);
1647
1662
global->addChild (type_mangling, dem);
1648
- ConstString mangled_element (mangleNode (global));
1663
+ auto mangling = mangleNode (global);
1664
+ if (!mangling.isSuccess ())
1665
+ return {};
1666
+ ConstString mangled_element (mangling.result ());
1649
1667
return GetTypeFromMangledTypename (mangled_element);
1650
1668
}
1651
1669
@@ -1952,7 +1970,16 @@ ConstString TypeSystemSwiftTypeRef::GetTypeName(opaque_compiler_type_t type) {
1952
1970
Demangler dem;
1953
1971
NodePointer print_node =
1954
1972
GetDemangleTreeForPrinting (dem, AsMangledName (type), true );
1955
- std::string remangled = mangleNode (print_node);
1973
+ auto mangling = mangleNode (print_node);
1974
+ std::string remangled;
1975
+ if (mangling.isSuccess ())
1976
+ remangled = mangling.result ();
1977
+ else {
1978
+ std::ostringstream buf;
1979
+ buf << " <mangling error " << mangling.error ().code << " :"
1980
+ << mangling.error ().line << " >" ;
1981
+ remangled = buf.str ();
1982
+ }
1956
1983
return ConstString (SwiftLanguageRuntime::DemangleSymbolAsString (
1957
1984
remangled, SwiftLanguageRuntime::eTypeName));
1958
1985
};
@@ -1968,7 +1995,16 @@ TypeSystemSwiftTypeRef::GetDisplayTypeName(opaque_compiler_type_t type,
1968
1995
Demangler dem;
1969
1996
NodePointer print_node =
1970
1997
GetDemangleTreeForPrinting (dem, AsMangledName (type), false );
1971
- std::string remangled = mangleNode (print_node);
1998
+ auto mangling = mangleNode (print_node);
1999
+ std::string remangled;
2000
+ if (mangling.isSuccess ())
2001
+ remangled = mangling.result ();
2002
+ else {
2003
+ std::ostringstream buf;
2004
+ buf << " <mangling error " << mangling.error ().code << " :"
2005
+ << mangling.error ().line << " >" ;
2006
+ remangled = buf.str ();
2007
+ }
1972
2008
return ConstString (SwiftLanguageRuntime::DemangleSymbolAsString (
1973
2009
remangled, SwiftLanguageRuntime::eDisplayTypeName, sc));
1974
2010
};
@@ -2052,7 +2088,10 @@ TypeSystemSwiftTypeRef::GetCanonicalType(opaque_compiler_type_t type) {
2052
2088
CompilerType ast_type = ReconstructType ({this , type}).GetCanonicalType ();
2053
2089
return GetTypeFromMangledTypename (ast_type.GetMangledTypeName ());
2054
2090
}
2055
- ConstString mangled (mangleNode (canonical));
2091
+ auto mangling = mangleNode (canonical);
2092
+ if (!mangling.isSuccess ())
2093
+ return CompilerType ();
2094
+ ConstString mangled (mangling.result ());
2056
2095
return GetTypeFromMangledTypename (mangled);
2057
2096
};
2058
2097
VALIDATE_AND_RETURN (impl, GetCanonicalType, type, (ReconstructType (type)),
0 commit comments