diff --git a/src/prism.c b/src/prism.c index b0180dbeca..47106147d0 100644 --- a/src/prism.c +++ b/src/prism.c @@ -13745,6 +13745,9 @@ parse_write(pm_parser_t *parser, pm_node_t *target, pm_token_t *operator, pm_nod // Replace the name with "[]=". call->name = pm_parser_constant_id_constant(parser, "[]=", 3); + + // Ensure that the arguments for []= don't contain keywords + pm_index_arguments_check(parser, call->arguments, call->block); pm_node_flag_set((pm_node_t *) call, PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE | pm_implicit_array_write_flags(value, PM_CALL_NODE_FLAGS_IMPLICIT_ARRAY)); return target; diff --git a/test/prism/errors/block_args_in_array_assignment.txt b/test/prism/errors/block_args_in_array_assignment.txt new file mode 100644 index 0000000000..71dca8452b --- /dev/null +++ b/test/prism/errors/block_args_in_array_assignment.txt @@ -0,0 +1,3 @@ +matrix[5, &block] = 8 + ^~~~~~ unexpected block arg given in index assignment; blocks are not allowed in index assignment expressions + diff --git a/test/prism/errors/keyword_args_in_array_assignment.txt b/test/prism/errors/keyword_args_in_array_assignment.txt new file mode 100644 index 0000000000..e379ec0ef4 --- /dev/null +++ b/test/prism/errors/keyword_args_in_array_assignment.txt @@ -0,0 +1,3 @@ +matrix[5, axis: :y] = 8 + ^~~~~~~~ unexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressions + diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index a96c2e488d..cb2fd48d37 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -19,7 +19,11 @@ class ErrorsTest < TestCase end if RUBY_VERSION < "3.4" - filepaths -= ["it_with_ordinary_parameter.txt"] + filepaths -= [ + "it_with_ordinary_parameter.txt", + "block_args_in_array_assignment.txt", + "keyword_args_in_array_assignment.txt" + ] end if RUBY_VERSION < "3.4" || RUBY_RELEASE_DATE < "2024-07-24"