From 6ccf4ddb24c8a793bb579843eb013a3e75faceff Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 8 Nov 2007 01:57:56 -0500 Subject: [PATCH] refresh-all bug fix --- core/vocabs/loader/loader.factor | 26 +++++++++++++++++--------- extra/tools/test/test.factor | 3 ++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/core/vocabs/loader/loader.factor b/core/vocabs/loader/loader.factor index 48ff041b6c..e9dc4f3e55 100644 --- a/core/vocabs/loader/loader.factor +++ b/core/vocabs/loader/loader.factor @@ -119,9 +119,10 @@ SYMBOL: load-help? "To define one, refer to \\ MAIN: help" print ] ?if ; -: modified ( assoc -- seq ) - [ nip dup [ source-modified? ] when ] assoc-subset - keys ; +: modified ( seq quot -- seq ) + [ dup ] swap compose { } map>assoc + [ nip ] assoc-subset + [ nip source-modified? ] assoc-subset keys ; inline : vocab-path+ ( vocab path -- newpath ) swap vocab-root dup [ swap path+ ] [ 2drop f ] if ; @@ -136,19 +137,26 @@ SYMBOL: load-help? dup vocab-docs vocab-path+ ; : modified-sources ( vocabs -- seq ) - [ dup vocab-source-path ] { } map>assoc modified ; + [ vocab-source-path ] modified ; : modified-docs ( vocabs -- seq ) - [ dup vocab-docs-path ] { } map>assoc modified ; + [ vocab-docs-path ] modified ; -: (refresh) ( prefix -- seq ) +: update-roots ( vocabs -- ) + [ dup find-vocab-root swap vocab set-vocab-root ] each ; + +: to-refresh ( prefix -- seq ) child-vocabs - dup modified-sources swap modified-docs 2dup + dup update-roots + dup modified-sources swap modified-docs ; + +: do-refresh ( modified-sources modified-docs -- ) + 2dup [ f swap set-vocab-docs-loaded? ] each [ f swap set-vocab-source-loaded? ] each - append prune dup [ [ require ] each ] no-parse-hook ; + append prune [ [ require ] each ] no-parse-hook ; -: refresh ( prefix -- ) (refresh) drop ; +: refresh ( prefix -- ) to-refresh do-refresh ; : refresh-all ( -- ) "" refresh ; diff --git a/extra/tools/test/test.factor b/extra/tools/test/test.factor index bc9dd0ffeb..88f94a7fd6 100644 --- a/extra/tools/test/test.factor +++ b/extra/tools/test/test.factor @@ -76,4 +76,5 @@ TUPLE: expected-error ; : test-all ( -- ) "" test ; -: test-changes ( -- ) "" (refresh) run-vocab-tests ; +: test-changes ( -- ) + "" to-refresh dupd do-refresh run-vocab-tests ;