]> gitweb.factorcode.org Git - factor.git/commitdiff
take-n returns the rest of the sequence if not enough elements are present
authorDoug Coleman <erg@jobim.local>
Tue, 9 Jun 2009 15:49:22 +0000 (11:49 -0400)
committerDoug Coleman <erg@jobim.local>
Tue, 9 Jun 2009 15:49:22 +0000 (11:49 -0400)
extra/sequence-parser/sequence-parser-tests.factor
extra/sequence-parser/sequence-parser.factor

index da097f4c00f2f5cc09205708258b631eb6d47cf9..259fb9f259a10acd306774787839d7b793d315a1 100644 (file)
@@ -118,10 +118,10 @@ IN: sequence-parser.tests
 [ "abcd e \\\"f g" ]
 [ "\"abcd e \\\"f g\"" <sequence-parser> CHAR: \ CHAR: " take-token* ] unit-test
 
-[ "" ]
+[ f ]
 [ "" <sequence-parser> take-rest ] unit-test
 
-[ "" ]
+[ f ]
 [ "abc" <sequence-parser> dup "abc" take-sequence drop take-rest ] unit-test
 
 [ f ]
index 4cc10fd5fd536c546e9c2d07eb112fe6391957ca..e46abe809050a1ad73a3db05c3a81b22d351094e 100644 (file)
@@ -35,6 +35,8 @@ TUPLE: sequence-parser sequence n ;
 : advance* ( sequence-parser -- )
     advance drop ; inline
 
+: next ( sequence-parser -- obj ) [ current ] [ advance* ] bi ;
+
 : get+increment ( sequence-parser -- char/f )
     [ current ] [ advance drop ] bi ; inline
 
@@ -148,7 +150,7 @@ TUPLE: sequence-parser sequence n ;
     2dup [ length ] dip < [ 2drop f ] [ tail-slice ] if ; inline
 
 : take-rest ( sequence-parser -- sequence )
-    [ take-rest-slice ] [ sequence>> like ] bi ;
+    [ take-rest-slice ] [ sequence>> like ] bi f like ;
 
 : take-until-object ( sequence-parser obj -- sequence )
     '[ current _ = ] take-until ;
@@ -190,7 +192,7 @@ TUPLE: sequence-parser sequence n ;
 
 :: take-n ( sequence-parser n -- seq/f )
     n sequence-parser [ n>> + ] [ sequence>> length ] bi > [
-        f
+        sequence-parser take-rest
     ] [
         sequence-parser n>> dup n + sequence-parser sequence>> subseq
         sequence-parser [ n + ] change-n drop