]> gitweb.factorcode.org Git - factor.git/commitdiff
stack-as-data: fix everything.
authorDoug Coleman <doug.coleman@gmail.com>
Wed, 22 Jun 2022 20:43:42 +0000 (15:43 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Wed, 22 Jun 2022 20:43:42 +0000 (15:43 -0500)
don't develop with disable-optimizer turned on

stack-filter still has a problem with macros:
  https://github.com/factor/factor/issues/2618

extra/stack-as-data/stack-as-data-tests.factor
extra/stack-as-data/stack-as-data.factor

index b8bb3a7c987523b6429bf696555d13c6f53fa0b8..d11af28aef1f30b08d93f7cbb80ae60c29c13d45 100644 (file)
@@ -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
index c933c51b63ba18f2003d02ad04706186262acca9..17cbc53feb8781aa56af3b96266ef0ddd91ce74c 100644 (file)
@@ -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 ] ;