Skip to content

Commit 24af12b

Browse files
committed
Support for swiftlang/swift#66540: @_silgen_name on globals, @_silgen_name(raw: ...)
1 parent 49b3bbd commit 24af12b

File tree

17 files changed

+413
-2
lines changed

17 files changed

+413
-2
lines changed

CodeGeneration/Sources/SyntaxSupport/AttributeNodes.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ public let ATTRIBUTE_NODES: [Node] = [
113113
name: "ExposeAttributeArguments",
114114
kind: .node(kind: .exposeAttributeArguments)
115115
),
116+
Child(
117+
name: "SilgenNameAttributeArguments",
118+
kind: .node(kind: .silgenNameAttributeArguments)
119+
),
116120
Child(
117121
name: "OriginallyDefinedInArguments",
118122
kind: .node(kind: .originallyDefinedInArguments)
@@ -608,6 +612,32 @@ public let ATTRIBUTE_NODES: [Node] = [
608612
]
609613
),
610614

615+
Node(
616+
kind: .silgenNameAttributeArguments,
617+
base: .syntax,
618+
nameForDiagnostics: "@_silgen_name arguments",
619+
documentation: "The arguments for the '@_silgen_name' attribute",
620+
children: [
621+
Child(
622+
name: "Label",
623+
kind: .token(choices: [.keyword(text: "raw")]),
624+
nameForDiagnostics: "label",
625+
documentation: "The label of the argument",
626+
isOptional: true
627+
),
628+
Child(
629+
name: "Colon",
630+
kind: .token(choices: [.token(tokenKind: "ColonToken")]),
631+
documentation: "The colon separating the label and the value",
632+
isOptional: true
633+
),
634+
Child(
635+
name: "Name",
636+
kind: .node(kind: .stringLiteralExpr)
637+
),
638+
]
639+
),
640+
611641
// The argument of '@_implements(...)'
612642
// implements-attr-arguments -> simple-type-identifier ','
613643
// (identifier | operator) decl-name-arguments

CodeGeneration/Sources/SyntaxSupport/SyntaxNodeKind.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ public enum SyntaxNodeKind: String, CaseIterable {
246246
case returnStmt
247247
case sameTypeRequirement
248248
case sequenceExpr
249+
case silgenNameAttributeArguments
249250
case simpleTypeIdentifier
250251
case sourceFile
251252
case specializeAttributeSpecList

Sources/SwiftParser/Attributes.swift

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,14 @@ extension Parser {
292292
}
293293
return .effectsArguments(RawEffectsArgumentsSyntax(elements: tokens, arena: parser.arena))
294294
}
295-
case ._cdecl, ._silgen_name:
295+
case ._cdecl:
296296
return parseAttribute(argumentMode: .required) { parser in
297297
return .string(parser.parseStringLiteral())
298298
}
299+
case ._silgen_name:
300+
return parseAttribute(argumentMode: .required) { parser in
301+
return .silgenNameAttributeArguments(parser.parseSilgenNameArguments())
302+
}
299303
case ._implements:
300304
return parseAttribute(argumentMode: .required) { parser in
301305
return .implementsArguments(parser.parseImplementsAttributeArguments())
@@ -938,6 +942,30 @@ extension Parser {
938942
}
939943
}
940944

945+
extension Parser {
946+
mutating func parseSilgenNameArguments() -> RawSilgenNameAttributeArgumentsSyntax {
947+
let label: RawTokenSyntax?
948+
let unexpectedBeforeColon: RawUnexpectedNodesSyntax?
949+
let colon: RawTokenSyntax?
950+
if self.at(.identifier) {
951+
label = self.consumeAnyToken()
952+
(unexpectedBeforeColon, colon) = self.expect(.colon)
953+
} else {
954+
label = nil
955+
unexpectedBeforeColon = nil
956+
colon = nil
957+
}
958+
let name = self.parseStringLiteral()
959+
return RawSilgenNameAttributeArgumentsSyntax(
960+
label: label,
961+
unexpectedBeforeColon,
962+
colon: colon,
963+
name: name,
964+
arena: self.arena
965+
)
966+
}
967+
}
968+
941969
extension Parser {
942970
mutating func parseOriginallyDefinedInArguments() -> RawOriginallyDefinedInArgumentsSyntax {
943971
let (unexpectedBeforeModuleLabel, moduleLabel) = self.expect(.keyword(.module))

Sources/SwiftParserDiagnostics/generated/ChildNameForDiagnostics.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,8 @@ private func childNameForDiagnostics(_ keyPath: AnyKeyPath) -> String? {
306306
return "left-hand type"
307307
case \SameTypeRequirementSyntax.rightTypeIdentifier:
308308
return "right-hand type"
309+
case \SilgenNameAttributeArgumentsSyntax.label:
310+
return "label"
309311
case \StructDeclSyntax.attributes:
310312
return "attributes"
311313
case \StructDeclSyntax.modifiers:

Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,8 @@ extension SyntaxKind {
339339
return "'return' statement"
340340
case .sameTypeRequirement:
341341
return "same type requirement"
342+
case .silgenNameAttributeArguments:
343+
return "@_silgen_name arguments"
342344
case .simpleTypeIdentifier:
343345
return "type"
344346
case .sourceFile:

Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ These articles are intended for developers wishing to contribute to SwiftSyntax
356356
- <doc:SwiftSyntax/QualifiedDeclNameSyntax>
357357
- <doc:SwiftSyntax/ReturnClauseSyntax>
358358
- <doc:SwiftSyntax/SameTypeRequirementSyntax>
359+
- <doc:SwiftSyntax/SilgenNameAttributeArgumentsSyntax>
359360
- <doc:SwiftSyntax/SourceFileSyntax>
360361
- <doc:SwiftSyntax/SwitchCaseLabelSyntax>
361362
- <doc:SwiftSyntax/SwitchDefaultLabelSyntax>

Sources/SwiftSyntax/generated/ChildNameForKeyPath.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2833,6 +2833,20 @@ public func childName(_ keyPath: AnyKeyPath) -> String? {
28332833
return "elements"
28342834
case \SequenceExprSyntax.unexpectedAfterElements:
28352835
return "unexpectedAfterElements"
2836+
case \SilgenNameAttributeArgumentsSyntax.unexpectedBeforeLabel:
2837+
return "unexpectedBeforeLabel"
2838+
case \SilgenNameAttributeArgumentsSyntax.label:
2839+
return "label"
2840+
case \SilgenNameAttributeArgumentsSyntax.unexpectedBetweenLabelAndColon:
2841+
return "unexpectedBetweenLabelAndColon"
2842+
case \SilgenNameAttributeArgumentsSyntax.colon:
2843+
return "colon"
2844+
case \SilgenNameAttributeArgumentsSyntax.unexpectedBetweenColonAndName:
2845+
return "unexpectedBetweenColonAndName"
2846+
case \SilgenNameAttributeArgumentsSyntax.name:
2847+
return "name"
2848+
case \SilgenNameAttributeArgumentsSyntax.unexpectedAfterName:
2849+
return "unexpectedAfterName"
28362850
case \SimpleTypeIdentifierSyntax.unexpectedBeforeName:
28372851
return "unexpectedBeforeName"
28382852
case \SimpleTypeIdentifierSyntax.name:

Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1837,6 +1837,14 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
18371837
visitAnyPost(node._syntaxNode)
18381838
}
18391839

1840+
override open func visit(_ node: SilgenNameAttributeArgumentsSyntax) -> SyntaxVisitorContinueKind {
1841+
return visitAny(node._syntaxNode)
1842+
}
1843+
1844+
override open func visitPost(_ node: SilgenNameAttributeArgumentsSyntax) {
1845+
visitAnyPost(node._syntaxNode)
1846+
}
1847+
18401848
override open func visit(_ node: SimpleTypeIdentifierSyntax) -> SyntaxVisitorContinueKind {
18411849
return visitAny(node._syntaxNode)
18421850
}

Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -910,6 +910,7 @@ extension Syntax {
910910
.node(ReturnStmtSyntax.self),
911911
.node(SameTypeRequirementSyntax.self),
912912
.node(SequenceExprSyntax.self),
913+
.node(SilgenNameAttributeArgumentsSyntax.self),
913914
.node(SimpleTypeIdentifierSyntax.self),
914915
.node(SourceFileSyntax.self),
915916
.node(SpecializeAttributeSpecListSyntax.self),

Sources/SwiftSyntax/generated/SyntaxEnum.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ public enum SyntaxEnum {
238238
case returnStmt(ReturnStmtSyntax)
239239
case sameTypeRequirement(SameTypeRequirementSyntax)
240240
case sequenceExpr(SequenceExprSyntax)
241+
case silgenNameAttributeArguments(SilgenNameAttributeArgumentsSyntax)
241242
case simpleTypeIdentifier(SimpleTypeIdentifierSyntax)
242243
case sourceFile(SourceFileSyntax)
243244
case specializeAttributeSpecList(SpecializeAttributeSpecListSyntax)
@@ -747,6 +748,8 @@ public extension Syntax {
747748
return .sameTypeRequirement(SameTypeRequirementSyntax(self)!)
748749
case .sequenceExpr:
749750
return .sequenceExpr(SequenceExprSyntax(self)!)
751+
case .silgenNameAttributeArguments:
752+
return .silgenNameAttributeArguments(SilgenNameAttributeArgumentsSyntax(self)!)
750753
case .simpleTypeIdentifier:
751754
return .simpleTypeIdentifier(SimpleTypeIdentifierSyntax(self)!)
752755
case .sourceFile:

Sources/SwiftSyntax/generated/SyntaxKind.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ public enum SyntaxKind {
238238
case returnStmt
239239
case sameTypeRequirement
240240
case sequenceExpr
241+
case silgenNameAttributeArguments
241242
case simpleTypeIdentifier
242243
case sourceFile
243244
case specializeAttributeSpecList
@@ -866,6 +867,8 @@ public enum SyntaxKind {
866867
return SameTypeRequirementSyntax.self
867868
case .sequenceExpr:
868869
return SequenceExprSyntax.self
870+
case .silgenNameAttributeArguments:
871+
return SilgenNameAttributeArgumentsSyntax.self
869872
case .simpleTypeIdentifier:
870873
return SimpleTypeIdentifierSyntax.self
871874
case .sourceFile:

Sources/SwiftSyntax/generated/SyntaxRewriter.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1586,6 +1586,13 @@ open class SyntaxRewriter {
15861586
return ExprSyntax(visitChildren(node))
15871587
}
15881588

1589+
/// Visit a ``SilgenNameAttributeArgumentsSyntax``.
1590+
/// - Parameter node: the node that is being visited
1591+
/// - Returns: the rewritten node
1592+
open func visit(_ node: SilgenNameAttributeArgumentsSyntax) -> SilgenNameAttributeArgumentsSyntax {
1593+
return Syntax(visitChildren(node)).cast(SilgenNameAttributeArgumentsSyntax.self)
1594+
}
1595+
15891596
/// Visit a ``SimpleTypeIdentifierSyntax``.
15901597
/// - Parameter node: the node that is being visited
15911598
/// - Returns: the rewritten node
@@ -5167,6 +5174,20 @@ open class SyntaxRewriter {
51675174
return Syntax(visit(node))
51685175
}
51695176

5177+
/// Implementation detail of visit(_:). Do not call directly.
5178+
private func visitImplSilgenNameAttributeArgumentsSyntax(_ data: SyntaxData) -> Syntax {
5179+
let node = SilgenNameAttributeArgumentsSyntax(data)
5180+
// Accessing _syntaxNode directly is faster than calling Syntax(node)
5181+
visitPre(node._syntaxNode)
5182+
defer {
5183+
visitPost(node._syntaxNode)
5184+
}
5185+
if let newNode = visitAny(node._syntaxNode) {
5186+
return newNode
5187+
}
5188+
return Syntax(visit(node))
5189+
}
5190+
51705191
/// Implementation detail of visit(_:). Do not call directly.
51715192
private func visitImplSimpleTypeIdentifierSyntax(_ data: SyntaxData) -> Syntax {
51725193
let node = SimpleTypeIdentifierSyntax(data)
@@ -6425,6 +6446,8 @@ open class SyntaxRewriter {
64256446
return visitImplSameTypeRequirementSyntax
64266447
case .sequenceExpr:
64276448
return visitImplSequenceExprSyntax
6449+
case .silgenNameAttributeArguments:
6450+
return visitImplSilgenNameAttributeArgumentsSyntax
64286451
case .simpleTypeIdentifier:
64296452
return visitImplSimpleTypeIdentifierSyntax
64306453
case .sourceFile:
@@ -6991,6 +7014,8 @@ open class SyntaxRewriter {
69917014
return visitImplSameTypeRequirementSyntax(data)
69927015
case .sequenceExpr:
69937016
return visitImplSequenceExprSyntax(data)
7017+
case .silgenNameAttributeArguments:
7018+
return visitImplSilgenNameAttributeArgumentsSyntax(data)
69947019
case .simpleTypeIdentifier:
69957020
return visitImplSimpleTypeIdentifierSyntax(data)
69967021
case .sourceFile:

Sources/SwiftSyntax/generated/SyntaxTransform.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,6 +1134,11 @@ public protocol SyntaxTransformVisitor {
11341134
/// - Returns: the sum of whatever the child visitors return.
11351135
func visit(_ node: SequenceExprSyntax) -> ResultType
11361136

1137+
/// Visiting ``SilgenNameAttributeArgumentsSyntax`` specifically.
1138+
/// - Parameter node: the node we are visiting.
1139+
/// - Returns: the sum of whatever the child visitors return.
1140+
func visit(_ node: SilgenNameAttributeArgumentsSyntax) -> ResultType
1141+
11371142
/// Visiting ``SimpleTypeIdentifierSyntax`` specifically.
11381143
/// - Parameter node: the node we are visiting.
11391144
/// - Returns: the sum of whatever the child visitors return.
@@ -2976,6 +2981,13 @@ extension SyntaxTransformVisitor {
29762981
visitAny(Syntax(node))
29772982
}
29782983

2984+
/// Visiting ``SilgenNameAttributeArgumentsSyntax`` specifically.
2985+
/// - Parameter node: the node we are visiting.
2986+
/// - Returns: nil by default.
2987+
public func visit(_ node: SilgenNameAttributeArgumentsSyntax) -> ResultType {
2988+
visitAny(Syntax(node))
2989+
}
2990+
29792991
/// Visiting ``SimpleTypeIdentifierSyntax`` specifically.
29802992
/// - Parameter node: the node we are visiting.
29812993
/// - Returns: nil by default.
@@ -3811,6 +3823,8 @@ extension SyntaxTransformVisitor {
38113823
return visit(derived)
38123824
case .sequenceExpr(let derived):
38133825
return visit(derived)
3826+
case .silgenNameAttributeArguments(let derived):
3827+
return visit(derived)
38143828
case .simpleTypeIdentifier(let derived):
38153829
return visit(derived)
38163830
case .sourceFile(let derived):

Sources/SwiftSyntax/generated/SyntaxVisitor.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2710,6 +2710,18 @@ open class SyntaxVisitor {
27102710
open func visitPost(_ node: SequenceExprSyntax) {
27112711
}
27122712

2713+
/// Visiting ``SilgenNameAttributeArgumentsSyntax`` specifically.
2714+
/// - Parameter node: the node we are visiting.
2715+
/// - Returns: how should we continue visiting.
2716+
open func visit(_ node: SilgenNameAttributeArgumentsSyntax) -> SyntaxVisitorContinueKind {
2717+
return .visitChildren
2718+
}
2719+
2720+
/// The function called after visiting ``SilgenNameAttributeArgumentsSyntax`` and its descendents.
2721+
/// - node: the node we just finished visiting.
2722+
open func visitPost(_ node: SilgenNameAttributeArgumentsSyntax) {
2723+
}
2724+
27132725
/// Visiting ``SimpleTypeIdentifierSyntax`` specifically.
27142726
/// - Parameter node: the node we are visiting.
27152727
/// - Returns: how should we continue visiting.
@@ -5835,6 +5847,17 @@ open class SyntaxVisitor {
58355847
visitPost(node)
58365848
}
58375849

5850+
/// Implementation detail of doVisit(_:_:). Do not call directly.
5851+
private func visitImplSilgenNameAttributeArgumentsSyntax(_ data: SyntaxData) {
5852+
let node = SilgenNameAttributeArgumentsSyntax(data)
5853+
let needsChildren = (visit(node) == .visitChildren)
5854+
// Avoid calling into visitChildren if possible.
5855+
if needsChildren && !node.raw.layoutView!.children.isEmpty {
5856+
visitChildren(node)
5857+
}
5858+
visitPost(node)
5859+
}
5860+
58385861
/// Implementation detail of doVisit(_:_:). Do not call directly.
58395862
private func visitImplSimpleTypeIdentifierSyntax(_ data: SyntaxData) {
58405863
let node = SimpleTypeIdentifierSyntax(data)
@@ -6893,6 +6916,8 @@ open class SyntaxVisitor {
68936916
visitImplSameTypeRequirementSyntax(data)
68946917
case .sequenceExpr:
68956918
visitImplSequenceExprSyntax(data)
6919+
case .silgenNameAttributeArguments:
6920+
visitImplSilgenNameAttributeArgumentsSyntax(data)
68966921
case .simpleTypeIdentifier:
68976922
visitImplSimpleTypeIdentifierSyntax(data)
68986923
case .sourceFile:

0 commit comments

Comments
 (0)