mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Add support to syntax tree
This commit is contained in:
@@ -595,8 +595,10 @@ bool Parser::parseSpecializeAttributeArguments(
|
|||||||
auto ParamLabel = Tok.getText();
|
auto ParamLabel = Tok.getText();
|
||||||
SyntaxParsingContext ArgumentContext(
|
SyntaxParsingContext ArgumentContext(
|
||||||
SyntaxContext, ParamLabel == "target"
|
SyntaxContext, ParamLabel == "target"
|
||||||
? SyntaxKind::TargetFunctionEntry
|
? SyntaxKind::TargetFunctionEntry :
|
||||||
: SyntaxKind::LabeledSpecializeEntry);
|
(ParamLabel == "availability" ?
|
||||||
|
SyntaxKind::AvailabilityEntry
|
||||||
|
: SyntaxKind::LabeledSpecializeEntry));
|
||||||
if (ParamLabel != "exported" && ParamLabel != "kind" &&
|
if (ParamLabel != "exported" && ParamLabel != "kind" &&
|
||||||
ParamLabel != "target" && ParamLabel != "spi" &&
|
ParamLabel != "target" && ParamLabel != "spi" &&
|
||||||
ParamLabel != "spiModule" && ParamLabel != "availability") {
|
ParamLabel != "spiModule" && ParamLabel != "availability") {
|
||||||
|
|||||||
@@ -34,3 +34,7 @@ public struct AvailableStruct {
|
|||||||
public func availableNestedMethod() {}
|
public func availableNestedMethod() {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@_specialize(exported: true, availability: macOS 11, iOS 13, *; where T == Int)
|
||||||
|
//@_specialize(exported: true, where T == Int)
|
||||||
|
public func testAvailability<T>(_ t: T) {}
|
||||||
|
|||||||
@@ -102,10 +102,25 @@ ATTRIBUTE_NODES = [
|
|||||||
element='Syntax', element_name='SpecializeAttribute',
|
element='Syntax', element_name='SpecializeAttribute',
|
||||||
element_choices=[
|
element_choices=[
|
||||||
'LabeledSpecializeEntry',
|
'LabeledSpecializeEntry',
|
||||||
|
'AvailabilityEntry',
|
||||||
'TargetFunctionEntry',
|
'TargetFunctionEntry',
|
||||||
'GenericWhereClause',
|
'GenericWhereClause',
|
||||||
]),
|
]),
|
||||||
|
|
||||||
|
Node('AvailabilityEntry', kind='Syntax',
|
||||||
|
description='''
|
||||||
|
The availability argument for the _specialize attribute
|
||||||
|
''',
|
||||||
|
children=[
|
||||||
|
Child('Label', kind='IdentifierToken',
|
||||||
|
description='The label of the argument'),
|
||||||
|
Child('Colon', kind='ColonToken',
|
||||||
|
description='The colon separating the label and the value'),
|
||||||
|
Child('AvailabilityList', kind='AvailabilitySpecList',
|
||||||
|
collection_element_name='Availability'),
|
||||||
|
Child('Semicolon', kind='SemicolonToken'),
|
||||||
|
]),
|
||||||
|
|
||||||
# Representation of e.g. 'exported: true,'
|
# Representation of e.g. 'exported: true,'
|
||||||
# labeled-specialize-entry -> identifier ':' token ','?
|
# labeled-specialize-entry -> identifier ':' token ','?
|
||||||
Node('LabeledSpecializeEntry', kind='Syntax',
|
Node('LabeledSpecializeEntry', kind='Syntax',
|
||||||
|
|||||||
@@ -253,6 +253,7 @@ SYNTAX_NODE_SERIALIZATION_CODES = {
|
|||||||
'TargetFunctionEntry': 248,
|
'TargetFunctionEntry': 248,
|
||||||
'PostfixIfConfigExpr': 250,
|
'PostfixIfConfigExpr': 250,
|
||||||
'UnavailabilityCondition': 251,
|
'UnavailabilityCondition': 251,
|
||||||
|
'AvailabilityEntry' : 252,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user