@@ -11,10 +11,33 @@ extension ASTGenVisitor {
11
11
return SwiftASTContext_getIdentifier ( ctx, buf. baseAddress, buf. count)
12
12
}
13
13
14
- return . type( SimpleIdentTypeRepr_create ( ctx, loc, id) )
14
+ guard let generics = node. genericArgumentClause else {
15
+ return . type( SimpleIdentTypeRepr_create ( ctx, loc, id) )
16
+ }
17
+
18
+ let lAngle = self . base. advanced ( by: generics. leftAngleBracket. position. utf8Offset) . raw
19
+ let rAngle = self . base. advanced ( by: generics. rightAngleBracket. position. utf8Offset) . raw
20
+ return . type(
21
+ generics. arguments. map ( {
22
+ self . visit ( $0. argumentType)
23
+ } ) . withBridgedArrayRef {
24
+ genericArgs in
25
+ GenericIdentTypeRepr_create (
26
+ self . ctx, id, loc, genericArgs, lAngle, rAngle)
27
+ } )
15
28
}
16
29
17
30
public func visit( _ node: MemberTypeIdentifierSyntax ) -> ASTNode {
31
+ // Handle metatypes.
32
+ // FIXME: We might want to do this in the parser instead?
33
+ if node. name. tokenKind == . identifier( " Type " ) &&
34
+ node. genericArgumentClause == nil {
35
+ let baseType = visit ( node. baseType) . rawValue
36
+ let nameLoc = self . base. advanced ( by: node. name. position. utf8Offset) . raw
37
+ return . type(
38
+ MetatypeTypeRepr_create ( self . ctx, baseType, nameLoc) )
39
+ }
40
+
18
41
var path = [ ( TokenSyntax, GenericArgumentClauseSyntax? ) ] ( )
19
42
var memberRef : Syntax ? = Syntax ( node)
20
43
while let nestedMember = memberRef? . as ( MemberTypeIdentifierSyntax . self) {
0 commit comments