From f1a1a4c1cb744edc1e40a7ed494ea5477faadace Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Tue, 11 Nov 2008 10:56:58 -0600 Subject: [PATCH] Cloning a dlist did not clone its nodes, and so was useless --- basis/dlists/dlists-tests.factor | 7 +++++++ basis/dlists/dlists.factor | 8 ++++++++ 2 files changed, 15 insertions(+) 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 ] [ <dlist> 3 over push-front 4 over push-back -1 swap deque-member? ] unit-test [ f ] [ <dlist> 0 swap deque-member? ] unit-test + +! Make sure clone does the right thing +[ V{ 2 1 } V{ 2 1 3 } ] [ + <dlist> 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 ) <dlist> [ push-front ] keep ; +M: dlist clone + <dlist> [ + [ push-back ] curry dlist-each + ] keep ; + INSTANCE: dlist deque