From 36b42fb62b5cbebe54aa9bb7c5cc4f341c8ca541 Mon Sep 17 00:00:00 2001 From: Folkert Date: Wed, 6 Jul 2022 17:58:48 +0200 Subject: [PATCH] use existing capacity in Str.concat if possible --- crates/compiler/builtins/bitcode/src/str.zig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/compiler/builtins/bitcode/src/str.zig b/crates/compiler/builtins/bitcode/src/str.zig index b4d6551791..5c8b1ebcdb 100644 --- a/crates/compiler/builtins/bitcode/src/str.zig +++ b/crates/compiler/builtins/bitcode/src/str.zig @@ -1419,6 +1419,13 @@ fn strConcat(arg1: RocStr, arg2: RocStr) RocStr { const element_width = 1; + if (arg1.isUnique() and (arg1.capacity() - arg1.len()) >= arg2.len()) { + const destination = arg1.asU8ptr() + arg1.len(); + @memcpy(destination, arg2.asU8ptr(), arg2.len()); + + return arg1; + } + if (!arg1.isSmallStr() and arg1.isUnique()) { if (arg1.str_bytes) |source_ptr| { const new_source = utils.unsafeReallocate(