From: "jeremyevans0 (Jeremy Evans) via ruby-core" <ruby-core@...>
Date: 2025-06-20T23:47:55+00:00
Subject: [ruby-core:122565] [Ruby Bug#21447] Fix handling of PM_CONSTANT_PATH_NODE node in keyword arguments with ARGS_SPLAT

Issue #21447 has been updated by jeremyevans0 (Jeremy Evans).

Status changed from Open to Closed

Fixed by commit:1d94a9e1a4351e01f851dad250ba97dad859ee70

----------------------------------------
Bug #21447: Fix handling of PM_CONSTANT_PATH_NODE node in keyword arguments with ARGS_SPLAT
https://bugs.ruby-lang.org/issues/21447#change-113795

* Author: jeremyevans0 (Jeremy Evans)
* Status: Closed
* Assignee: jeremyevans0 (Jeremy Evans)
* Backport: 3.2: DONTNEED, 3.3: DONTNEED, 3.4: REQUIRED
----------------------------------------
I added an optimization to reduce implicit allocations when using parse.y in commit:3de20efc308cccc38bf9dacfffca6c626d039a06.  An implementation was added for prism in commit:14bb376b79ca9140bfd36dbbad06be045f31f92e.  Unfortunately, when I added tests for the optimization, I only tested the optimizable case for `NODE_COLON2` (`Foo::Bar`).  I neglected to add a test for the unoptimizable case (`foo()::Bar`).  The prism implementation of the optimization incorrectly optimized the unoptimizable case (for `PM_CONSTANT_PATH_NODE`), but that's because the tests did not fail when it was incorrectly optimized.  This can cause an evaluation order issue in the following code if `foo` modifies `array`:

```ruby
method(*array, kw: foo(array)::Bar)
```

I've submitted a PR that adds tests for the unoptimizable case, and fixes the prism implementation of the optimization: https://github.com/ruby/ruby/pull/13664



-- 
https://bugs.ruby-lang.org/
______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/