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