@@ -11,10 +11,33 @@ extension ASTGenVisitor {
1111 return SwiftASTContext_getIdentifier ( ctx, buf. baseAddress, buf. count)
1212 }
1313
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+ } )
1528 }
1629
1730 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+
1841 var path = [ ( TokenSyntax, GenericArgumentClauseSyntax? ) ] ( )
1942 var memberRef : Syntax ? = Syntax ( node)
2043 while let nestedMember = memberRef? . as ( MemberTypeIdentifierSyntax . self) {
0 commit comments