Skip to content

Commit 97ced30

Browse files
committed
[ASTGen] Handle metatypes and simple generic types.
1 parent 51fcde7 commit 97ced30

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

lib/ASTGen/Sources/ASTGen/Types.swift

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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) {

lib/Sema/TypeCheckMacros.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,6 @@ getMacroSignature(
128128
*mod, SourceFileKind::Library, macroBufferID);
129129
mod->addAuxiliaryFile(*macroSourceFile);
130130

131-
// FIXME: Inject imports, which we don't yet have everywhere.
132-
133131
// Parse the struct declaration used for the macro evaluation context.
134132
auto *start = sourceMgr.getLocForBufferStart(macroBufferID)
135133
.getOpaquePointerValue();

0 commit comments

Comments
 (0)