From 7d978fb2663763a197ee0dc530ffd8b1a21147f9 Mon Sep 17 00:00:00 2001 From: Elizabeth Mattijsen Date: Sun, 18 Mar 2018 17:45:59 +0100 Subject: [PATCH] Add .append(IterationBuffer) methods to ReificationTargets So that we have a better change of .append working in iterators. --- src/core/Array.pm6 | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/core/Array.pm6 b/src/core/Array.pm6 index 72ea9c2cf70..f23b4b7edf3 100644 --- a/src/core/Array.pm6 +++ b/src/core/Array.pm6 @@ -32,6 +32,22 @@ my class Array { # declared in BOOTSTRAP nqp::push($!target, nqp::assign(nqp::p6scalarfromdesc($!descriptor), value)); } + + method append(IterationBuffer:D $buffer) { + nqp::if( + (my int $elems = nqp::elems($buffer)), + nqp::stmts( + (my int $i = -1), + nqp::while( + nqp::islt_i(($i = nqp::add_i($i,1)),$elems), + nqp::push($!target,nqp::assign( + nqp::p6scalarfromdesc($!descriptor), + nqp::atpos($buffer,$i) + )) + ) + ) + ) + } } my class ListReificationTarget { @@ -45,6 +61,10 @@ my class Array { # declared in BOOTSTRAP nqp::push($!target, nqp::decont(value)); } + + method append(IterationBuffer:D \buffer) { + nqp::splice($!target,buffer,nqp::elems($!target),0) + } } multi method clone(Array:D:) {