diff options
author | Jimmy Miller <[email protected]> | 2023-03-07 12:29:59 -0500 |
---|---|---|
committer | <[email protected]> | 2023-03-07 12:29:59 -0500 |
commit | 719a7726d17f0800b8f8ef42f3f48e7558d5a444 () | |
tree | 1e440cc92507b60fd28677954df606c598d1fa8d /yjit/bindgen/src/main.rs | |
parent | a6de8b0d2dea18b03374d27901f31be407523baa (diff) |
YJIT: Handle special case of splat and rest lining up (#7422)
If you have a method that takes rest arguments and a splat call that happens to line up perfectly with that rest, you can just dupe the array rather than move anything around. We still have to dupe, because people could have a custom to_a method or something like that which means it is hard to guarantee we have exclusive access to that array. Example: ```ruby def foo(a, b, *rest) end foo(1, 2, *[3, 4]) ```
Notes: Merged-By: maximecb <[email protected]>
-rw-r--r-- | yjit/bindgen/src/main.rs | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -135,6 +135,7 @@ fn main() { .allowlist_function("rb_ary_store") .allowlist_function("rb_ary_resurrect") .allowlist_function("rb_ary_clear") // From internal/array.h .allowlist_function("rb_ec_ary_new_from_values") |