summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index abc8aef053..8db11be5e5 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -5376,7 +5376,11 @@ vm_opt_ltlt(VALUE recv, VALUE obj)
}
else if (RBASIC_CLASS(recv) == rb_cString &&
BASIC_OP_UNREDEFINED_P(BOP_LTLT, STRING_REDEFINED_OP_FLAG)) {
- return rb_str_concat(recv, obj);
+ if (LIKELY(RB_TYPE_P(obj, T_STRING))) {
+ return rb_str_buf_append(recv, obj);
+ } else {
+ return rb_str_concat(recv, obj);
+ }
}
else if (RBASIC_CLASS(recv) == rb_cArray &&
BASIC_OP_UNREDEFINED_P(BOP_LTLT, ARRAY_REDEFINED_OP_FLAG)) {