mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[libSyntax] Model parameter modifiers as a ModifierList
This fixes a libSyntax misparse where the first parameter name was parsed as the `isolated` token.
This commit is contained in:
@@ -255,6 +255,9 @@ Parser::parseParameterClause(SourceLoc &leftParenLoc,
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
SyntaxParsingContext ModifiersContext(SyntaxContext, SyntaxKind::ModifierList);
|
||||
|
||||
// ('inout' | '__shared' | '__owned' | isolated)?
|
||||
bool hasSpecifier = false;
|
||||
while (Tok.is(tok::kw_inout) ||
|
||||
@@ -262,6 +265,7 @@ Parser::parseParameterClause(SourceLoc &leftParenLoc,
|
||||
Tok.isContextualKeyword("__owned") ||
|
||||
Tok.isContextualKeyword("isolated") ||
|
||||
Tok.isContextualKeyword("_const")) {
|
||||
SyntaxParsingContext ModContext(SyntaxContext, SyntaxKind::DeclModifier);
|
||||
|
||||
if (Tok.isContextualKeyword("isolated")) {
|
||||
// did we already find an 'isolated' type modifier?
|
||||
@@ -320,6 +324,7 @@ Parser::parseParameterClause(SourceLoc &leftParenLoc,
|
||||
consumeToken();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If let or var is being used as an argument label, allow it but
|
||||
// generate a warning.
|
||||
|
||||
795
test/Syntax/Inputs/serialize_functions.json
Normal file
795
test/Syntax/Inputs/serialize_functions.json
Normal file
@@ -0,0 +1,795 @@
|
||||
{
|
||||
"kind": "SourceFile",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlockItemList",
|
||||
"layout": [
|
||||
{
|
||||
"kind": "CodeBlockItem",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionDecl",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "kw_func"
|
||||
},
|
||||
"leadingTrivia": "\/\/ RUN: %swift-syntax-test -input-source-filename %s -serialize-raw-tree > %t\n\/\/ RUN: diff %S\/Inputs\/serialize_functions.json %t -u\n\n",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "oneName"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionSignature",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "ParameterClause",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionParameterList",
|
||||
"layout": [
|
||||
{
|
||||
"kind": "FunctionParameter",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "name"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "colon"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "SimpleTypeIdentifier",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "String"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlock",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlockItemList",
|
||||
"layout": [],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
{
|
||||
"kind": "CodeBlockItem",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionDecl",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "kw_func"
|
||||
},
|
||||
"leadingTrivia": "\n",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "oneName"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionSignature",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "ParameterClause",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionParameterList",
|
||||
"layout": [
|
||||
{
|
||||
"kind": "FunctionParameter",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "firstName"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "secondName"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "colon"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "SimpleTypeIdentifier",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "String"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlock",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlockItemList",
|
||||
"layout": [],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
{
|
||||
"kind": "CodeBlockItem",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionDecl",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "kw_func"
|
||||
},
|
||||
"leadingTrivia": "\n",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "const"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionSignature",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "ParameterClause",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionParameterList",
|
||||
"layout": [
|
||||
{
|
||||
"kind": "FunctionParameter",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "ModifierList",
|
||||
"layout": [
|
||||
{
|
||||
"kind": "DeclModifier",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "_const"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "kw__"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "map"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "colon"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "SimpleTypeIdentifier",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "String"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlock",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlockItemList",
|
||||
"layout": [],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
{
|
||||
"kind": "CodeBlockItem",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionDecl",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "kw_func"
|
||||
},
|
||||
"leadingTrivia": "\n",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "isolated"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionSignature",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"kind": "ParameterClause",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "FunctionParameterList",
|
||||
"layout": [
|
||||
{
|
||||
"kind": "FunctionParameter",
|
||||
"layout": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "ModifierList",
|
||||
"layout": [
|
||||
{
|
||||
"kind": "DeclModifier",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "isolated"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "kw__"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "map"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "colon"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "SimpleTypeIdentifier",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "identifier",
|
||||
"text": "String"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_paren"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": " ",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlock",
|
||||
"layout": [
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "l_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"kind": "CodeBlockItemList",
|
||||
"layout": [],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "r_brace"
|
||||
},
|
||||
"leadingTrivia": "",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
},
|
||||
null,
|
||||
{
|
||||
"tokenKind": {
|
||||
"kind": "eof",
|
||||
"text": ""
|
||||
},
|
||||
"leadingTrivia": "\n",
|
||||
"trailingTrivia": "",
|
||||
"presence": "Present"
|
||||
}
|
||||
],
|
||||
"presence": "Present"
|
||||
}
|
||||
7
test/Syntax/serialize_functions.swift
Normal file
7
test/Syntax/serialize_functions.swift
Normal file
@@ -0,0 +1,7 @@
|
||||
// RUN: %swift-syntax-test -input-source-filename %s -serialize-raw-tree > %t
|
||||
// RUN: diff %S/Inputs/serialize_functions.json %t -u
|
||||
|
||||
func oneName(name: String) {}
|
||||
func oneName(firstName secondName: String) {}
|
||||
func const(_const _ map: String) {}
|
||||
func isolated(isolated _ map: String) {}
|
||||
Reference in New Issue
Block a user