From: John Benediktsson Date: Tue, 4 Apr 2023 20:52:56 +0000 (-0700) Subject: memoize: fix memoization of no-arg words X-Git-Tag: 0.99~442 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=c641a62755b95d60078ead5b22bb1d736bbb0048 memoize: fix memoization of no-arg words --- diff --git a/core/memoize/memoize-tests.factor b/core/memoize/memoize-tests.factor index f67c7ac284..8125f1237c 100644 --- a/core/memoize/memoize-tests.factor +++ b/core/memoize/memoize-tests.factor @@ -25,7 +25,6 @@ MEMO: see-test ( a -- b ) reverse ; { "USING: sequences ;\nIN: memoize.tests\nMEMO: see-test ( a -- b ) reverse ;\n" } [ [ \ see-test see ] with-string-writer ] unit-test - { } [ "IN: memoize.tests : fib ( -- ) ;" eval( -- ) ] unit-test { "IN: memoize.tests\n: fib ( -- ) ;\n" } [ [ \ fib see ] with-string-writer ] unit-test @@ -33,3 +32,18 @@ unit-test [ sq ] ( a -- b ) memoize-quot "q" set { 9 } [ 3 "q" get call ] unit-test + +SYMBOL: foo-counter +0 foo-counter set-global + +MEMO: foo ( -- ) foo-counter counter drop ; + +[ 0 1 1 1 ] [ + foo-counter get-global + foo + foo-counter get-global + foo + foo-counter get-global + foo + foo-counter get-global +] unit-test diff --git a/core/memoize/memoize.factor b/core/memoize/memoize.factor index d5a09e3ab8..96e5952ca9 100644 --- a/core/memoize/memoize.factor +++ b/core/memoize/memoize.factor @@ -23,7 +23,7 @@ IN: memoize : packer ( seq -- quot ) length dup 4 <= - [ { [ f ] [ ] [ 2array ] [ 3array ] [ 4array ] } nth ] + [ { [ t ] [ ] [ 2array ] [ 3array ] [ 4array ] } nth ] [ { } [nsequence] ] if ; : unpacker ( seq -- quot )