Skip to content

Commit de499d1

Browse files
committed
[NFC] ASTGen: Refactor for recursive MemberTypeRepr representation
1 parent 8bea09d commit de499d1

File tree

4 files changed

+37
-47
lines changed

4 files changed

+37
-47
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1569,11 +1569,11 @@ BridgedInverseTypeRepr_createParsed(BridgedASTContext cContext,
15691569
BridgedSourceLoc cTildeLoc,
15701570
BridgedTypeRepr cConstraint);
15711571

1572-
SWIFT_NAME("BridgedMemberTypeRepr.createParsed(_:base:members:)")
1573-
BridgedTypeRepr
1574-
BridgedMemberTypeRepr_createParsed(BridgedASTContext cContext,
1575-
BridgedTypeRepr baseComponent,
1576-
BridgedArrayRef bridgedMemberComponents);
1572+
SWIFT_NAME("BridgedDeclRefTypeRepr.createParsed(_:base:name:nameLoc:genericArguments:angleRange:)")
1573+
BridgedDeclRefTypeRepr BridgedDeclRefTypeRepr_createParsed(
1574+
BridgedASTContext cContext, BridgedTypeRepr cBase, BridgedIdentifier cName,
1575+
BridgedSourceLoc cLoc, BridgedArrayRef cGenericArguments,
1576+
BridgedSourceRange cAngleRange);
15771577

15781578
SWIFT_NAME("BridgedMetatypeTypeRepr.createParsed(_:base:typeKeywordLoc:)")
15791579
BridgedMetatypeTypeRepr

include/swift/Basic/BasicBridging.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ class BridgedSourceRange {
292292
SWIFT_NAME("end")
293293
BridgedSourceLoc End;
294294

295+
BridgedSourceRange() : Start(), End() {}
296+
295297
SWIFT_NAME("init(start:end:)")
296298
BridgedSourceRange(BridgedSourceLoc start, BridgedSourceLoc end)
297299
: Start(start), End(end) {}

lib/AST/ASTBridging.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,15 +2225,19 @@ BridgedTupleTypeRepr BridgedTupleTypeRepr_createParsed(
22252225
SourceRange{lParen, rParen});
22262226
}
22272227

2228-
BridgedTypeRepr
2229-
BridgedMemberTypeRepr_createParsed(BridgedASTContext cContext,
2230-
BridgedTypeRepr baseComponent,
2231-
BridgedArrayRef bridgedMemberComponents) {
2228+
BridgedDeclRefTypeRepr BridgedDeclRefTypeRepr_createParsed(
2229+
BridgedASTContext cContext, BridgedTypeRepr cBase, BridgedIdentifier cName,
2230+
BridgedSourceLoc cLoc, BridgedArrayRef cGenericArguments,
2231+
BridgedSourceRange cAngleRange) {
22322232
ASTContext &context = cContext.unbridged();
2233-
auto memberComponents = bridgedMemberComponents.unbridged<IdentTypeRepr *>();
2233+
auto genericArguments = cGenericArguments.unbridged<TypeRepr *>();
2234+
auto angleRange = cAngleRange.unbridged();
22342235

2235-
return MemberTypeRepr::create(context, baseComponent.unbridged(),
2236-
memberComponents);
2236+
assert(angleRange.isValid() || genericArguments.empty());
2237+
2238+
return DeclRefTypeRepr::create(
2239+
context, cBase.unbridged(), DeclNameLoc(cLoc.unbridged()),
2240+
DeclNameRef(cName.unbridged()), genericArguments, angleRange);
22372241
}
22382242

22392243
BridgedCompositionTypeRepr

lib/ASTGen/Sources/ASTGen/Types.swift

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ extension ASTGenVisitor {
8282
case .implicitlyUnwrappedOptionalType(let node):
8383
return self.generate(implicitlyUnwrappedOptionalType: node).asTypeRepr
8484
case .memberType(let node):
85-
return self.generate(memberType: node)
85+
return self.generate(memberType: node).asTypeRepr
8686
case .metatypeType(let node):
8787
return self.generate(metatypeType: node)
8888
case .missingType:
@@ -137,45 +137,29 @@ extension ASTGenVisitor {
137137
).asTypeRepr
138138
}
139139

140-
func generate(memberType node: MemberTypeSyntax) -> BridgedTypeRepr {
141-
// Gather the member components, in decreasing depth order.
142-
var reverseMemberComponents = [BridgedTypeRepr]()
140+
func generate(memberType node: MemberTypeSyntax) -> BridgedDeclRefTypeRepr {
141+
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
143142

144-
var baseType = TypeSyntax(node)
145-
while let memberType = baseType.as(MemberTypeSyntax.self) {
146-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
143+
let genericArguments: BridgedArrayRef
144+
let angleRange: BridgedSourceRange
145+
if let generics = node.genericArgumentClause {
146+
genericArguments = generics.arguments.lazy.map {
147+
self.generate(type: $0.argument)
148+
}.bridgedArray(in: self)
147149

148-
if let generics = memberType.genericArgumentClause {
149-
let genericArguments = generics.arguments.lazy.map {
150-
self.generate(type: $0.argument)
151-
}
152-
153-
reverseMemberComponents.append(
154-
BridgedGenericIdentTypeRepr.createParsed(
155-
self.ctx,
156-
name: name,
157-
nameLoc: nameLoc,
158-
genericArgs: genericArguments.bridgedArray(in: self),
159-
leftAngleLoc: self.generateSourceLoc(generics.leftAngle),
160-
rightAngleLoc: self.generateSourceLoc(generics.rightAngle)
161-
).asTypeRepr
162-
)
163-
} else {
164-
reverseMemberComponents.append(
165-
BridgedSimpleIdentTypeRepr.createParsed(self.ctx, loc: nameLoc, name: name).asTypeRepr
166-
)
167-
}
168-
169-
baseType = memberType.baseType
150+
angleRange = self.generateSourceRange(start: generics.leftAngle, end: generics.rightAngle)
151+
} else {
152+
genericArguments = .init()
153+
angleRange = .init()
170154
}
171155

172-
let baseComponent = generate(type: baseType)
173-
let memberComponents = reverseMemberComponents.reversed().bridgedArray(in: self)
174-
175-
return BridgedMemberTypeRepr.createParsed(
156+
return BridgedDeclRefTypeRepr.createParsed(
176157
self.ctx,
177-
base: baseComponent,
178-
members: memberComponents
158+
base: self.generate(type: node.baseType),
159+
name: name,
160+
nameLoc: nameLoc,
161+
genericArguments: genericArguments,
162+
angleRange: angleRange
179163
)
180164
}
181165

0 commit comments

Comments
 (0)