Skip to content

Commit bfffd7e

Browse files
committed
Set the param kind in ASTGen
1 parent 19fc174 commit bfffd7e

File tree

4 files changed

+45
-8
lines changed

4 files changed

+45
-8
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1887,6 +1887,15 @@ enum ENUM_EXTENSIBILITY_ATTR(open) BridgedMacroDefinitionKind : size_t {
18871887
BridgedBuiltinIsolationMacro,
18881888
};
18891889

1890+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedGenericTypeParamKind : size_t {
1891+
/// A regular generic type parameter: 'T'
1892+
BridgedGenericTypeParamKindType = 0,
1893+
/// A generic parameter pack: 'each T'
1894+
BridgedGenericTypeParamKindPack,
1895+
/// A generic value parameter: 'let T'
1896+
BridgedGenericTypeParamKindValue,
1897+
};
1898+
18901899
SWIFT_NAME("BridgedGenericParamList.createParsed(_:leftAngleLoc:parameters:"
18911900
"genericWhereClause:rightAngleLoc:)")
18921901
BridgedGenericParamList BridgedGenericParamList_createParsed(
@@ -1897,12 +1906,12 @@ BridgedGenericParamList BridgedGenericParamList_createParsed(
18971906

18981907
SWIFT_NAME(
18991908
"BridgedGenericTypeParamDecl.createParsed(_:declContext:specifierLoc:"
1900-
"name:nameLoc:inheritedType:index:)")
1909+
"name:nameLoc:inheritedType:index:paramKind:)")
19011910
BridgedGenericTypeParamDecl BridgedGenericTypeParamDecl_createParsed(
19021911
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
19031912
BridgedSourceLoc cSpecifierLoc, BridgedIdentifier cName,
19041913
BridgedSourceLoc cNameLoc, BridgedNullableTypeRepr opaqueInheritedType,
1905-
size_t index);
1914+
size_t index, BridgedGenericTypeParamKind paramKind);
19061915

19071916
SWIFT_NAME(
19081917
"BridgedTrailingWhereClause.createParsed(_:whereKeywordLoc:requirements:)")

lib/AST/ASTBridging.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2610,11 +2610,26 @@ BridgedGenericTypeParamDecl BridgedGenericTypeParamDecl_createParsed(
26102610
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
26112611
BridgedSourceLoc cSpecifierLoc, BridgedIdentifier cName,
26122612
BridgedSourceLoc cNameLoc, BridgedNullableTypeRepr bridgedInheritedType,
2613-
size_t index) {
2613+
size_t index, BridgedGenericTypeParamKind cParamKind) {
26142614
auto specifierLoc = cSpecifierLoc.unbridged();
2615+
2616+
GenericTypeParamKind paramKind;
2617+
2618+
switch (cParamKind) {
2619+
case BridgedGenericTypeParamKindType:
2620+
paramKind = GenericTypeParamKind::Type;
2621+
break;
2622+
case BridgedGenericTypeParamKindPack:
2623+
paramKind = GenericTypeParamKind::Pack;
2624+
break;
2625+
case BridgedGenericTypeParamKindValue:
2626+
paramKind = GenericTypeParamKind::Value;
2627+
break;
2628+
}
2629+
26152630
auto *decl = GenericTypeParamDecl::createParsed(
26162631
cDeclContext.unbridged(), cName.unbridged(), cNameLoc.unbridged(),
2617-
specifierLoc, index, GenericTypeParamKind::Type); // FIXME
2632+
specifierLoc, index, paramKind);
26182633

26192634
if (auto *inheritedType = bridgedInheritedType.unbridged()) {
26202635
auto entry = InheritedEntry(inheritedType);

lib/ASTGen/Sources/ASTGen/Generics.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,23 @@ extension ASTGenVisitor {
3838
preconditionFailure("Node not part of the parent?")
3939
}
4040

41+
var paramKind: BridgedGenericTypeParamKind = .type
42+
43+
if node.specifier?.tokenKind == .keyword(.each) {
44+
paramKind = .pack
45+
} else if node.specifier?.tokenKind == .keyword(.let) {
46+
paramKind = .value
47+
}
48+
4149
return .createParsed(
4250
self.ctx,
4351
declContext: self.declContext,
44-
45-
// FIXME ALEX
46-
specifierLoc: self.generateSourceLoc(node.eachKeyword),
52+
specifierLoc: self.generateSourceLoc(node.specifier),
4753
name: name,
4854
nameLoc: nameLoc,
4955
inheritedType: self.generate(type: node.inheritedType),
50-
index: genericParameterIndex
56+
index: genericParameterIndex,
57+
paramKind: paramKind
5158
)
5259
}
5360

test/ASTGen/decls.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,3 +284,9 @@ struct TestStruct {
284284
// FIXME: Compute 'static' location
285285
// static func instance(arg: Int) -> TestStruct { return TestStruct() }
286286
}
287+
288+
struct ValueStruct<let N: Int> {}
289+
290+
func genericTest1<T>(_: T) {}
291+
func genericTest2<each T>(_: repeat each T) {}
292+
func genericTest4<let T: Int>(_: ValueStruct<T>) {}

0 commit comments

Comments
 (0)