summaryrefslogtreecommitdiff
path: root/yjit/bindgen
diff options
context:
space:
mode:
authorJimmy Miller <jimmy.miller@shopify.com>2023-03-07 12:29:59 -0500
committerGitHub <noreply@github.com>2023-03-07 12:29:59 -0500
commit719a7726d17f0800b8f8ef42f3f48e7558d5a444 (patch)
tree1e440cc92507b60fd28677954df606c598d1fa8d /yjit/bindgen
parenta6de8b0d2dea18b03374d27901f31be407523baa (diff)
downloadruby-719a7726d17f0800b8f8ef42f3f48e7558d5a444.tar.gz
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]) ```
Diffstat (limited to 'yjit/bindgen')
-rw-r--r--yjit/bindgen/src/main.rs1
1 files changed, 1 insertions, 0 deletions
diff --git a/yjit/bindgen/src/main.rs b/yjit/bindgen/src/main.rs
index d0551aedb7..481c403714 100644
--- a/yjit/bindgen/src/main.rs
+++ b/yjit/bindgen/src/main.rs
@@ -135,6 +135,7 @@ fn main() {
.allowlist_function("rb_ary_store")
.allowlist_function("rb_ary_resurrect")
.allowlist_function("rb_ary_clear")
+ .allowlist_function("rb_ary_dup")
// From internal/array.h
.allowlist_function("rb_ec_ary_new_from_values")