Skip to content

Commit 71f46a4

Browse files
committed
Add support to syntax tree
1 parent 8840ea6 commit 71f46a4

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

lib/Parse/ParseDecl.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,8 +595,10 @@ bool Parser::parseSpecializeAttributeArguments(
595595
auto ParamLabel = Tok.getText();
596596
SyntaxParsingContext ArgumentContext(
597597
SyntaxContext, ParamLabel == "target"
598-
? SyntaxKind::TargetFunctionEntry
599-
: SyntaxKind::LabeledSpecializeEntry);
598+
? SyntaxKind::TargetFunctionEntry :
599+
(ParamLabel == "availability" ?
600+
SyntaxKind::AvailabilityEntry
601+
: SyntaxKind::LabeledSpecializeEntry));
600602
if (ParamLabel != "exported" && ParamLabel != "kind" &&
601603
ParamLabel != "target" && ParamLabel != "spi" &&
602604
ParamLabel != "spiModule" && ParamLabel != "availability") {

test/SILGen/availability_attribute.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,7 @@ public struct AvailableStruct {
3434
public func availableNestedMethod() {}
3535
}
3636
}
37+
38+
@_specialize(exported: true, availability: macOS 11, iOS 13, *; where T == Int)
39+
//@_specialize(exported: true, where T == Int)
40+
public func testAvailability<T>(_ t: T) {}

utils/gyb_syntax_support/AttributeNodes.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,25 @@
102102
element='Syntax', element_name='SpecializeAttribute',
103103
element_choices=[
104104
'LabeledSpecializeEntry',
105+
'AvailabilityEntry',
105106
'TargetFunctionEntry',
106107
'GenericWhereClause',
107108
]),
108109

110+
Node('AvailabilityEntry', kind='Syntax',
111+
description='''
112+
The availability argument for the _specialize attribute
113+
''',
114+
children=[
115+
Child('Label', kind='IdentifierToken',
116+
description='The label of the argument'),
117+
Child('Colon', kind='ColonToken',
118+
description='The colon separating the label and the value'),
119+
Child('AvailabilityList', kind='AvailabilitySpecList',
120+
collection_element_name='Availability'),
121+
Child('Semicolon', kind='SemicolonToken'),
122+
]),
123+
109124
# Representation of e.g. 'exported: true,'
110125
# labeled-specialize-entry -> identifier ':' token ','?
111126
Node('LabeledSpecializeEntry', kind='Syntax',

utils/gyb_syntax_support/NodeSerializationCodes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@
253253
'TargetFunctionEntry': 248,
254254
'PostfixIfConfigExpr': 250,
255255
'UnavailabilityCondition': 251,
256+
'AvailabilityEntry' : 252,
256257
}
257258

258259

0 commit comments

Comments
 (0)