From 44da4ed4dd366249c7498eacc0545c9d67d7c69b Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sun, 5 Mar 2017 14:09:03 -0800 Subject: [PATCH] sequences: fix filter! to allow stack arguments to be used by the quot. --- core/sequences/sequences-tests.factor | 1 + core/sequences/sequences.factor | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index cada259e75..a91bf4e100 100644 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -93,6 +93,7 @@ IN: sequences.tests { V{ 4 2 6 } } [ V{ 1 4 2 5 3 6 } clone [ 2 mod 0 = ] filter! ] unit-test { V{ 3 } } [ V{ 1 2 3 } clone 2 [ swap < ] curry filter! ] unit-test +{ 4 V{ 1 2 3 } } [ 4 V{ 1 4 2 5 3 6 } [ dupd > ] filter! ] unit-test { "hello world how are you" } [ { "hello" "world" "how" "are" "you" } " " join ] unit-test diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 7fbb53ed5f..392ed174e6 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -724,7 +724,7 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; : (filter!) ( ... quot: ( ... elt -- ... ? ) store scan seq -- ... ) 2dup length < [ [ move-unsafe ] 3keep - [ nth-unsafe pick call [ 1 + ] when ] 2keep + [ nth-unsafe -rot [ [ call ] keep ] dip rot [ 1 + ] when ] 2keep [ 1 + ] dip (filter!) ] [ nip set-length drop ] if ; inline recursive