Skip to content

Commit 63546f1

Browse files
committed
More complete string initialization and avoiding unnecessary object creation.
1 parent 1dec2c8 commit 63546f1

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

lib/core/string.rb

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -343,14 +343,24 @@ def concat(other)
343343
%s(do
344344
(assign ro (callm other __get_raw))
345345
(assign osize (strlen ro))
346-
(assign bsize (strlen @buffer))
347-
(assign size (add bsize osize))
348-
(assign size (add size 1))
349-
(assign newb (__alloc_leaf size))
350-
(strcpy newb @buffer)
351-
(strcat newb ro)
352-
(assign @buffer newb)
353-
)
346+
(if (ge osize 1) (do
347+
(assign bsize (strlen @buffer))
348+
(assign size (add bsize osize))
349+
(assign @length size)
350+
(assign size (add size 1))
351+
(if (gt size @capacity) (do
352+
(assign @capacity (add size 8))
353+
(assign newb (__stralloc @capacity))
354+
(strcpy newb @buffer)
355+
(strcat newb ro)
356+
(assign @buffer newb)
357+
)
358+
(do
359+
(strcat @buffer ro)
360+
)
361+
)
362+
))
363+
)
354364
self
355365
end
356366

0 commit comments

Comments
 (0)