]> gitweb.factorcode.org Git - factor.git/commitdiff
Do not create an extra scope in "if-amb"
authorSamuel Tardieu <sam@rfc1149.net>
Sun, 24 May 2009 13:42:57 +0000 (15:42 +0200)
committerSamuel Tardieu <sam@rfc1149.net>
Sun, 24 May 2009 14:02:59 +0000 (16:02 +0200)
extra/backtrack/backtrack.factor

index 9bef16d609c6871a73e779403835719d945a9cc2..48bae976990a4e399c930309d7115d35fe841bbe 100755 (executable)
@@ -29,6 +29,10 @@ MACRO: checkpoint ( quot -- quot' )
 \r
 <PRIVATE\r
 \r
+: preserve ( quot var -- ) [ get [ call ] dip ] keep set ; inline\r
+\r
+: amb-preserve ( quot -- ) failure preserve ; inline\r
+\r
 : unsafe-number-from-to ( to from -- to from+n )\r
     2dup = [ [ 1 + unsafe-number-from-to ] checkpoint ] unless ;\r
 \r
@@ -57,13 +61,13 @@ MACRO: amb-execute ( seq -- quot )
     [ length 1 - ] [ <enum> [ 1quotation ] assoc-map ] bi\r
     '[ _ 0 unsafe-number-from-to nip _ case ] ;\r
 \r
-: if-amb ( true false -- )\r
+: if-amb ( true false -- )\r
     [\r
         [ { t f } amb ]\r
         [ '[ @ require t ] ]\r
         [ '[ @ f ] ]\r
         tri* if\r
-    ] with-scope ; inline\r
+    ] amb-preserve ; inline\r
 \r
 : cut-amb ( -- )\r
     f failure set ;\r