@@ -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;
@@ -1333,7 +1341,10 @@ bool TypeSystemSwiftTypeRef::Verify(opaque_compiler_type_t type) {
1333
1341
using namespace swift ::Demangle;
1334
1342
Demangler dem;
1335
1343
NodePointer node = dem.demangleSymbol (str);
1336
- std::string remangled = mangleNode (node);
1344
+ auto mangling = mangleNode (node);
1345
+ if (!mangling.isSuccess ())
1346
+ return false ;
1347
+ std::string remangled = mangling.result ();
1337
1348
return remangled == std::string (str);
1338
1349
}
1339
1350
@@ -1477,10 +1488,14 @@ template <> bool Equivalent<CompilerType>(CompilerType l, CompilerType r) {
1477
1488
if (ContainsUnresolvedTypeAlias (r_node) ||
1478
1489
ContainsGenericTypeParameter (r_node) || ContainsSugaredParen (r_node))
1479
1490
return true ;
1480
- if (swift::Demangle::mangleNode (StripPrivateIDs (
1481
- dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, l_node))) ==
1482
- swift::Demangle::mangleNode (StripPrivateIDs (
1483
- dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, r_node))))
1491
+ auto l_mangling = swift::Demangle::mangleNode (StripPrivateIDs (
1492
+ dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, l_node)));
1493
+ auto r_mangling = swift::Demangle::mangleNode (StripPrivateIDs (
1494
+ dem, TypeSystemSwiftTypeRef::CanonicalizeSugar (dem, r_node)));
1495
+ if (!l_mangling.isSuccess () || !r_mangling.isSuccess ())
1496
+ return false ;
1497
+
1498
+ if (l_mangling.result () == r_mangling.result ())
1484
1499
return true ;
1485
1500
1486
1501
// SwiftASTContext hardcodes some less-precise types.
@@ -1646,7 +1661,10 @@ TypeSystemSwiftTypeRef::RemangleAsType(swift::Demangle::Demangler &dem,
1646
1661
auto type_mangling = dem.createNode (Node::Kind::TypeMangling);
1647
1662
type_mangling->addChild (node, dem);
1648
1663
global->addChild (type_mangling, dem);
1649
- ConstString mangled_element (mangleNode (global));
1664
+ auto mangling = mangleNode (global);
1665
+ if (!mangling.isSuccess ())
1666
+ return {};
1667
+ ConstString mangled_element (mangling.result ());
1650
1668
return GetTypeFromMangledTypename (mangled_element);
1651
1669
}
1652
1670
@@ -1953,7 +1971,16 @@ ConstString TypeSystemSwiftTypeRef::GetTypeName(opaque_compiler_type_t type) {
1953
1971
Demangler dem;
1954
1972
NodePointer print_node =
1955
1973
GetDemangleTreeForPrinting (dem, AsMangledName (type), true );
1956
- std::string remangled = mangleNode (print_node);
1974
+ auto mangling = mangleNode (print_node);
1975
+ std::string remangled;
1976
+ if (mangling.isSuccess ())
1977
+ remangled = mangling.result ();
1978
+ else {
1979
+ std::ostringstream buf;
1980
+ buf << " <mangling error " << mangling.error ().code << " :"
1981
+ << mangling.error ().line << " >" ;
1982
+ remangled = buf.str ();
1983
+ }
1957
1984
return ConstString (SwiftLanguageRuntime::DemangleSymbolAsString (
1958
1985
remangled, SwiftLanguageRuntime::eTypeName));
1959
1986
};
@@ -1969,7 +1996,16 @@ TypeSystemSwiftTypeRef::GetDisplayTypeName(opaque_compiler_type_t type,
1969
1996
Demangler dem;
1970
1997
NodePointer print_node =
1971
1998
GetDemangleTreeForPrinting (dem, AsMangledName (type), false );
1972
- std::string remangled = mangleNode (print_node);
1999
+ auto mangling = mangleNode (print_node);
2000
+ std::string remangled;
2001
+ if (mangling.isSuccess ())
2002
+ remangled = mangling.result ();
2003
+ else {
2004
+ std::ostringstream buf;
2005
+ buf << " <mangling error " << mangling.error ().code << " :"
2006
+ << mangling.error ().line << " >" ;
2007
+ remangled = buf.str ();
2008
+ }
1973
2009
return ConstString (SwiftLanguageRuntime::DemangleSymbolAsString (
1974
2010
remangled, SwiftLanguageRuntime::eDisplayTypeName, sc));
1975
2011
};
@@ -2053,7 +2089,10 @@ TypeSystemSwiftTypeRef::GetCanonicalType(opaque_compiler_type_t type) {
2053
2089
CompilerType ast_type = ReconstructType ({this , type}).GetCanonicalType ();
2054
2090
return GetTypeFromMangledTypename (ast_type.GetMangledTypeName ());
2055
2091
}
2056
- ConstString mangled (mangleNode (canonical));
2092
+ auto mangling = mangleNode (canonical);
2093
+ if (!mangling.isSuccess ())
2094
+ return CompilerType ();
2095
+ ConstString mangled (mangling.result ());
2057
2096
return GetTypeFromMangledTypename (mangled);
2058
2097
};
2059
2098
VALIDATE_AND_RETURN (impl, GetCanonicalType, type, (ReconstructType (type)),
0 commit comments