From 98e5ea94314340c9be37cc490739fd56c772c16b Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 10 Nov 2023 00:02:41 -0500 Subject: [ruby/prism] Disallow forwarding in blocks https://github.com/ruby/prism/commit/2bbd35943c --- prism/prism.c | 21 +++++++++++++++------ .../snapshots/unparser/corpus/literal/block.txt | 4 ++-- test/prism/snapshots/whitequark/blockargs.txt | 8 ++++---- test/prism/snapshots/whitequark/send_lambda.txt | 2 +- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/prism/prism.c b/prism/prism.c index 7689cdc95c..845f50f216 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -11029,7 +11029,7 @@ parse_parameters( pm_binding_power_t binding_power, bool uses_parentheses, bool allows_trailing_comma, - bool allows_forwarding_parameter + bool allows_forwarding_parameters ) { pm_parameters_node_t *params = pm_parameters_node_create(parser); bool looping = true; @@ -11064,7 +11064,10 @@ parse_parameters( pm_parser_local_add_token(parser, &name); } else { name = not_provided(parser); - pm_parser_local_add_token(parser, &operator); + + if (allows_forwarding_parameters) { + pm_parser_local_add_token(parser, &operator); + } } pm_block_parameter_node_t *param = pm_block_parameter_node_create(parser, &name, &operator); @@ -11078,7 +11081,7 @@ parse_parameters( break; } case PM_TOKEN_UDOT_DOT_DOT: { - if (!allows_forwarding_parameter) { + if (!allows_forwarding_parameters) { pm_parser_err_current(parser, PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES); } @@ -11086,7 +11089,7 @@ parse_parameters( update_parameter_state(parser, &parser->current, &order); parser_lex(parser); - if (allows_forwarding_parameter) { + if (allows_forwarding_parameters) { pm_parser_local_add_constant(parser, "*", 1); pm_parser_local_add_constant(parser, "&", 1); pm_parser_local_add_token(parser, &parser->previous); @@ -11244,7 +11247,10 @@ parse_parameters( pm_parser_local_add_token(parser, &name); } else { name = not_provided(parser); - pm_parser_local_add_token(parser, &operator); + + if (allows_forwarding_parameters) { + pm_parser_local_add_token(parser, &operator); + } } pm_rest_parameter_node_t *param = pm_rest_parameter_node_create(parser, &operator, &name); @@ -11276,7 +11282,10 @@ parse_parameters( pm_parser_local_add_token(parser, &name); } else { name = not_provided(parser); - pm_parser_local_add_token(parser, &operator); + + if (allows_forwarding_parameters) { + pm_parser_local_add_token(parser, &operator); + } } param = (pm_node_t *) pm_keyword_rest_parameter_node_create(parser, &operator, &name); diff --git a/test/prism/snapshots/unparser/corpus/literal/block.txt b/test/prism/snapshots/unparser/corpus/literal/block.txt index 2605b6a6b2..ef04ef93d6 100644 --- a/test/prism/snapshots/unparser/corpus/literal/block.txt +++ b/test/prism/snapshots/unparser/corpus/literal/block.txt @@ -226,7 +226,7 @@ │ ├── closing_loc: ∅ │ ├── block: │ │ @ BlockNode (location: (17,4)-(19,1)) - │ │ ├── locals: [:a, :*] + │ │ ├── locals: [:a] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (17,6)-(17,12)) │ │ │ ├── parameters: @@ -488,7 +488,7 @@ │ ├── closing_loc: ∅ │ ├── block: │ │ @ BlockNode (location: (32,8)-(34,1)) - │ │ ├── locals: [:*] + │ │ ├── locals: [] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (32,10)-(32,13)) │ │ │ ├── parameters: diff --git a/test/prism/snapshots/whitequark/blockargs.txt b/test/prism/snapshots/whitequark/blockargs.txt index ec0296813f..78281ce706 100644 --- a/test/prism/snapshots/whitequark/blockargs.txt +++ b/test/prism/snapshots/whitequark/blockargs.txt @@ -119,7 +119,7 @@ │ ├── closing_loc: ∅ │ ├── block: │ │ @ BlockNode (location: (9,1)-(9,12)) - │ │ ├── locals: [:*, :b] + │ │ ├── locals: [:b] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (9,3)-(9,10)) │ │ │ ├── parameters: @@ -265,7 +265,7 @@ │ ├── closing_loc: ∅ │ ├── block: │ │ @ BlockNode (location: (17,1)-(17,8)) - │ │ ├── locals: [:*] + │ │ ├── locals: [] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (17,3)-(17,6)) │ │ │ ├── parameters: @@ -379,7 +379,7 @@ │ ├── closing_loc: ∅ │ ├── block: │ │ @ BlockNode (location: (27,1)-(27,15)) - │ │ ├── locals: [:a, :*, :b] + │ │ ├── locals: [:a, :b] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (27,3)-(27,13)) │ │ │ ├── parameters: @@ -533,7 +533,7 @@ │ ├── closing_loc: ∅ │ ├── block: │ │ @ BlockNode (location: (35,1)-(35,11)) - │ │ ├── locals: [:a, :*] + │ │ ├── locals: [:a] │ │ ├── parameters: │ │ │ @ BlockParametersNode (location: (35,3)-(35,9)) │ │ │ ├── parameters: diff --git a/test/prism/snapshots/whitequark/send_lambda.txt b/test/prism/snapshots/whitequark/send_lambda.txt index bd3e74119f..b39992d868 100644 --- a/test/prism/snapshots/whitequark/send_lambda.txt +++ b/test/prism/snapshots/whitequark/send_lambda.txt @@ -4,7 +4,7 @@ @ StatementsNode (location: (1,0)-(5,5)) └── body: (length: 3) ├── @ LambdaNode (location: (1,0)-(1,8)) - │ ├── locals: [:*] + │ ├── locals: [] │ ├── operator_loc: (1,0)-(1,2) = "->" │ ├── opening_loc: (1,5)-(1,6) = "{" │ ├── closing_loc: (1,7)-(1,8) = "}" -- cgit v1.2.3