diff --git a/basis/dlists/dlists-tests.factor b/basis/dlists/dlists-tests.factor index 15022452ee..92b141dca8 100644 --- a/basis/dlists/dlists-tests.factor +++ b/basis/dlists/dlists-tests.factor @@ -77,3 +77,10 @@ IN: dlists.tests [ f ] [ 3 over push-front 4 over push-back -1 swap deque-member? ] unit-test [ f ] [ 0 swap deque-member? ] unit-test + +! Make sure clone does the right thing +[ V{ 2 1 } V{ 2 1 3 } ] [ + 1 over push-front 2 over push-front + dup clone 3 over push-back + [ dlist>seq ] bi@ +] unit-test diff --git a/basis/dlists/dlists.factor b/basis/dlists/dlists.factor index 3b3cae2820..5072c3edfd 100644 --- a/basis/dlists/dlists.factor +++ b/basis/dlists/dlists.factor @@ -154,6 +154,14 @@ M: dlist clear-deque ( dlist -- ) : dlist-each ( dlist quot -- ) [ obj>> ] prepose dlist-each-node ; inline +: dlist>seq ( dlist -- seq ) + [ ] pusher [ dlist-each ] dip ; + : 1dlist ( obj -- dlist ) [ push-front ] keep ; +M: dlist clone + [ + [ push-back ] curry dlist-each + ] keep ; + INSTANCE: dlist deque