From 6d147943f7166557d30f19cc54daa74fd1ce3529 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 22 Jun 2022 15:43:42 -0500 Subject: [PATCH] stack-as-data: fix everything. don't develop with disable-optimizer turned on stack-filter still has a problem with macros: https://github.com/factor/factor/issues/2618 --- .../stack-as-data/stack-as-data-tests.factor | 22 +++++++++---------- extra/stack-as-data/stack-as-data.factor | 16 +++++++------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/extra/stack-as-data/stack-as-data-tests.factor b/extra/stack-as-data/stack-as-data-tests.factor index b8bb3a7c98..d11af28aef 100644 --- a/extra/stack-as-data/stack-as-data-tests.factor +++ b/extra/stack-as-data/stack-as-data-tests.factor @@ -3,21 +3,19 @@ USING: math stack-as-data tools.test ; IN: stack-as-data.tests -{ V{ 6 8 } } -[ - 5 6 7 8 - 4 [ even? ] stack-filter -] unit-test +{ 10 20 30 50 40 } [ 10 20 30 40 50 0 1 stack-exchange ] unit-test +{ 20 10 30 40 50 } [ 10 20 30 40 50 4 3 stack-exchange ] unit-test +{ 20 10 30 40 50 } [ 10 20 30 40 50 3 4 stack-exchange ] unit-test +{ 10 20 30 40 50 } [ 10 20 30 40 50 0 0 stack-exchange ] unit-test +! { V{ 6 8 } } +! [ +! 5 6 7 8 +! 4 [ even? ] stack-filter +! ] unit-test { 25 36 49 64 } [ 5 6 7 8 4 [ sq ] stack-map -] unit-test - - -{ 10 20 30 50 40 } [ 10 20 30 40 50 0 1 stack-exchange ] unit-test -{ 20 10 30 40 50 } [ 10 20 30 40 50 4 3 stack-exchange ] unit-test -{ 20 10 30 40 50 } [ 10 20 30 40 50 3 4 stack-exchange ] unit-test -{ 10 20 30 40 50 } [ 10 20 30 40 50 0 0 stack-exchange ] unit-test \ No newline at end of file +] unit-test \ No newline at end of file diff --git a/extra/stack-as-data/stack-as-data.factor b/extra/stack-as-data/stack-as-data.factor index c933c51b63..17cbc53feb 100644 --- a/extra/stack-as-data/stack-as-data.factor +++ b/extra/stack-as-data/stack-as-data.factor @@ -8,16 +8,16 @@ MACRO: stack-nth ( n -- quot ) [ 1 + '[ _ nrot ] ] bi '[ @ @ ] ; -: stack-set-nth ( obj n -- quot ) - [ '[ drop _ ] ] dip ndip ; inline +MACRO: stack-set-nth ( obj n -- quot ) + '[ [ drop _ ] _ ndip ] ; -: stack-exchange ( m n -- quot ) +MACRO: stack-exchange ( m n -- quot ) [ [ stack-nth ] [ '[ _ stack-nth ] dip ] bi* ] 2keep swapd - [ stack-set-nth ] 2dip stack-set-nth ; + '[ _ _ stack-set-nth _ _ stack-set-nth ] ; -: stack-filter ( n quot: ( obj -- ? ) -- quot' ) - selector [ '[ _ ] replicate spread ] dip ; inline +! MACRO: stack-filter ( n quot: ( obj -- ? ) -- quot' ) +! selector [ '[ _ ] replicate spread ] dip ; -: stack-map ( n quot: ( obj -- obj' ) -- quot' ) - '[ _ ] replicate spread ; inline +MACRO: stack-map ( n quot: ( obj -- obj' ) -- quot' ) + '[ _ ] replicate '[ _ spread ] ; -- 2.34.1