summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
authorNoah Gibbs (and/or Benchmark CI) <noah.gibbs@shopify.com>2022-07-06 11:47:34 +0000
committerJean Boussier <jean.boussier@gmail.com>2022-07-06 17:25:58 +0200
commita2e0815e27e7eb35d57a5bd4c09630797e1869fc (patch)
tree1af7bff10bdce65fb4ff077dc3d1d97adab0880b /yjit
parent906f7cb3e7e6de2b75dc4a4a3c09f98d8bf28388 (diff)
Switch YJIT to using rb_str_buf_append rather than rb_str_append when encodings don't match, as discussed with byroot
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6095
Diffstat (limited to 'yjit')
-rw-r--r--yjit/bindgen/src/main.rs2
-rw-r--r--yjit/src/codegen.rs2
-rw-r--r--yjit/src/cruby_bindings.inc.rs4
3 files changed, 4 insertions, 4 deletions
diff --git a/yjit/bindgen/src/main.rs b/yjit/bindgen/src/main.rs
index 5abd445dae..5d30d7b288 100644
--- a/yjit/bindgen/src/main.rs
+++ b/yjit/bindgen/src/main.rs
@@ -64,7 +64,7 @@ fn main() {
// From include/ruby/internal/intern/string.h
.allowlist_function("rb_utf8_str_new")
- .allowlist_function("rb_str_append")
+ .allowlist_function("rb_str_buf_append")
.allowlist_function("rb_str_dup")
// This struct is public to Ruby C extensions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index 12c97411b0..84f4ff4897 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -3792,7 +3792,7 @@ fn jit_rb_str_concat(
// If encodings are different, use a slower encoding-aware concatenate
cb.write_label(enc_mismatch);
- call_ptr(cb, REG0, rb_str_append as *const u8);
+ call_ptr(cb, REG0, rb_str_buf_append as *const u8);
// Drop through to return
cb.write_label(ret_label);
diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs
index 44f87a8482..88ad8e563c 100644
--- a/yjit/src/cruby_bindings.inc.rs
+++ b/yjit/src/cruby_bindings.inc.rs
@@ -224,10 +224,10 @@ extern "C" {
) -> VALUE;
}
extern "C" {
- pub fn rb_str_dup(str_: VALUE) -> VALUE;
+ pub fn rb_str_buf_append(dst: VALUE, src: VALUE) -> VALUE;
}
extern "C" {
- pub fn rb_str_append(dst: VALUE, src: VALUE) -> VALUE;
+ pub fn rb_str_dup(str_: VALUE) -> VALUE;
}
extern "C" {
pub fn rb_str_intern(str_: VALUE) -> VALUE;