diff options
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 6 |
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)) { |