From 84ff64cf9033123e5842434fc44502fe6d4db087 Mon Sep 17 00:00:00 2001 From: Elizabeth Mattijsen Date: Sat, 23 May 2020 21:55:04 +0200 Subject: [PATCH] Make Blob.join between 4% and 11% faster - presize the result array back to 0 - use push_s instead of bindpos_s - use an nqp::while instead of a while --- src/core.c/Buf.pm6 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core.c/Buf.pm6 b/src/core.c/Buf.pm6 index c461ac1ca10..9eef8d55861 100644 --- a/src/core.c/Buf.pm6 +++ b/src/core.c/Buf.pm6 @@ -518,12 +518,13 @@ my role Blob[::T = uint8] does Positional[T] does Stringy is repr('VMArray') is method join(Blob:D: $delim = '') { my int $elems = nqp::elems(self); - my $list := nqp::setelems(nqp::list_s,$elems); my int $i = -1; + my $list := nqp::setelems(nqp::setelems(nqp::list_s,$elems),0); - nqp::bindpos_s($list,$i, - nqp::tostr_I(nqp::p6box_i(nqp::atpos_i(self,$i)))) - while nqp::islt_i(++$i,$elems); + nqp::while( + nqp::islt_i(($i = nqp::add_i($i,1)),$elems), + nqp::push_s($list,nqp::atpos_i(self,$i)) + ); nqp::join($delim.Str,$list) }