From 0dc35f0d3027413d7fd7f73d6be1d7ea99cf156e Mon Sep 17 00:00:00 2001 From: Haldun Bayhantopcu Date: Fri, 8 Nov 2024 18:26:50 +0100 Subject: [PATCH] [ruby/prism] Ignore newlines in labelled lambda arguments https://github.com/ruby/prism/commit/4ce6bcf182 --- prism/prism.c | 8 +++++--- test/prism/fixtures/lambda.txt | 12 ++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/prism/prism.c b/prism/prism.c index a15529b227..f53e0a861e 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -14523,6 +14523,7 @@ parse_parameters( bool allows_trailing_comma, bool allows_forwarding_parameters, bool accepts_blocks_in_defaults, + bool in_block, uint16_t depth ) { pm_do_loop_stack_push(parser, false); @@ -14687,7 +14688,7 @@ parse_parameters( break; } case PM_TOKEN_LABEL: { - if (!uses_parentheses) parser->in_keyword_arg = true; + if (!uses_parentheses && !in_block) parser->in_keyword_arg = true; update_parameter_state(parser, &parser->current, &order); context_push(parser, PM_CONTEXT_DEFAULT_PARAMS); @@ -15251,6 +15252,7 @@ parse_block_parameters( allows_trailing_comma, false, accepts_blocks_in_defaults, + true, (uint16_t) (depth + 1) ); } @@ -19405,7 +19407,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) { params = NULL; } else { - params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, true, false, true, true, (uint16_t) (depth + 1)); + params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, true, false, true, true, false, (uint16_t) (depth + 1)); } lex_state_set(parser, PM_LEX_STATE_BEG); @@ -19430,7 +19432,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b lparen = not_provided(parser); rparen = not_provided(parser); - params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, false, false, true, true, (uint16_t) (depth + 1)); + params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, false, false, true, true, false, (uint16_t) (depth + 1)); context_pop(parser); break; diff --git a/test/prism/fixtures/lambda.txt b/test/prism/fixtures/lambda.txt index 5c21eafb24..dfe833509f 100644 --- a/test/prism/fixtures/lambda.txt +++ b/test/prism/fixtures/lambda.txt @@ -9,3 +9,15 @@ -> foo = bar do end -> foo: bar do end + +p{|a: +b|} + +->(a: +b){} + +->a: +b{} + +->a: +{}