@@ -1913,6 +1913,18 @@ static void VisitNodeTypeAlias(
1913
1913
}
1914
1914
}
1915
1915
1916
+ static void VisitNodeInOut (
1917
+ ASTContext *ast,
1918
+ Demangle::NodePointer cur_node, VisitNodeResult &result) {
1919
+ VisitNodeResult type_result;
1920
+ VisitNode (ast, cur_node->getFirstChild (), type_result);
1921
+ if (type_result._types .size () == 1 && type_result._types [0 ]) {
1922
+ result._types .push_back (InOutType::get (type_result._types [0 ]));
1923
+ } else {
1924
+ result._error = " couldn't resolve referent type" ;
1925
+ }
1926
+ }
1927
+
1916
1928
static void VisitNodeExistentialMetatype (ASTContext *ast,
1917
1929
Demangle::NodePointer cur_node,
1918
1930
VisitNodeResult &result) {
@@ -2110,6 +2122,9 @@ static void VisitNodeTupleElement(
2110
2122
2111
2123
auto tupleType = tuple_type_result._types .front ();
2112
2124
auto typeFlags = ParameterTypeFlags ();
2125
+ typeFlags = typeFlags.withInOut (tupleType->is <InOutType>());
2126
+ if (auto *inOutTy = tupleType->getAs <InOutType>())
2127
+ tupleType = inOutTy->getObjectType ();
2113
2128
Identifier idName =
2114
2129
tuple_name.empty () ? Identifier () : ast->getIdentifier (tuple_name);
2115
2130
result._tuple_type_element = TupleTypeElt (tupleType, idName, typeFlags);
@@ -2350,6 +2365,10 @@ static void VisitNode(
2350
2365
VisitNodeSetterGetter (ast, node, result);
2351
2366
break ;
2352
2367
2368
+ case Demangle::Node::Kind::InOut:
2369
+ VisitNodeInOut (ast, node, result);
2370
+ break ;
2371
+
2353
2372
case Demangle::Node::Kind::ExistentialMetatype:
2354
2373
VisitNodeExistentialMetatype (ast, node, result);
2355
2374
break ;
0 commit comments