]> gitweb.factorcode.org Git - factor.git/commitdiff
memoize: change unpacker to embed array type.
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 14 Mar 2013 21:50:41 +0000 (14:50 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 14 Mar 2013 21:50:41 +0000 (14:50 -0700)
basis/memoize/memoize.factor

index a1d4da62dc485d43289ddd3adfb28e46c8454d0e..5e949d4558888857615a95f3a5610c9339ed8938 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2007, 2010 Slava Pestov, Daniel Ehrenberg.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel hashtables sequences sequences.private arrays
-words namespaces make parser effects.parser math assocs effects
-definitions quotations summary accessors fry hashtables.identity ;
+USING: accessors arrays assocs definitions effects
+effects.parser fry hashtables.identity kernel kernel.private
+math sequences sequences.private words ;
 IN: memoize
 
 <PRIVATE
@@ -28,9 +28,10 @@ IN: memoize
     [ { } [nsequence] ] if ;
 
 : unpacker ( seq -- quot )
-    length dup 4 <=
+    length dup dup 4 <=
     [ { [ drop ] [ ] [ first2-unsafe ] [ first3-unsafe ] [ first4-unsafe ] } nth ]
-    [ [firstn] ] if ;
+    [ [firstn] ] if swap 1 >
+    [ [ { array } declare ] prepose ] when ;
 
 : pack/unpack ( quot effect -- newquot )
     [ in>> packer ] [ out>> unpacker ] bi surround ;