From 9861fdc9b3a30dee34cb298995c9bc273e964f66 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 9 Jun 2009 11:49:22 -0400 Subject: [PATCH] take-n returns the rest of the sequence if not enough elements are present --- extra/sequence-parser/sequence-parser-tests.factor | 4 ++-- extra/sequence-parser/sequence-parser.factor | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/extra/sequence-parser/sequence-parser-tests.factor b/extra/sequence-parser/sequence-parser-tests.factor index da097f4c00..259fb9f259 100644 --- a/extra/sequence-parser/sequence-parser-tests.factor +++ b/extra/sequence-parser/sequence-parser-tests.factor @@ -118,10 +118,10 @@ IN: sequence-parser.tests [ "abcd e \\\"f g" ] [ "\"abcd e \\\"f g\"" CHAR: \ CHAR: " take-token* ] unit-test -[ "" ] +[ f ] [ "" take-rest ] unit-test -[ "" ] +[ f ] [ "abc" dup "abc" take-sequence drop take-rest ] unit-test [ f ] diff --git a/extra/sequence-parser/sequence-parser.factor b/extra/sequence-parser/sequence-parser.factor index 4cc10fd5fd..e46abe8090 100644 --- a/extra/sequence-parser/sequence-parser.factor +++ b/extra/sequence-parser/sequence-parser.factor @@ -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