From ff25e303794ff1efa63487b84dae59e2dc50ee56 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 12 Jan 2022 14:44:14 -0800 Subject: [PATCH] vocabs: change from errorlist to requiring list This fixes an issue with restarts in docs #2310. For example, if you edit ui/tools/inspector/inspector-docs.factor: IN: ui.tools.inspector+lol \ inspector drop And then refresh, then the restart would cascade. --- core/vocabs/loader/loader.factor | 45 ++++++++------------------------ core/vocabs/vocabs.factor | 40 ++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 45 deletions(-) diff --git a/core/vocabs/loader/loader.factor b/core/vocabs/loader/loader.factor index d413a46e71..5c24341c45 100644 --- a/core/vocabs/loader/loader.factor +++ b/core/vocabs/loader/loader.factor @@ -144,10 +144,9 @@ PRIVATE> ] if ; : reload ( name -- ) - dup lookup-vocab - [ [ load-source ] [ load-docs ] bi ] - [ require ] - ?if ; + dup lookup-vocab [ + f >>source-loaded? f >>docs-loaded? drop + ] when* require ; : run ( vocab -- ) dup load-vocab vocab-main [ @@ -158,30 +157,15 @@ PRIVATE> "To define one, refer to \\ MAIN: help" print ] ?if ; -SYMBOL: errorlist - > +parsing+ eq? [ drop ] [ - dup source-loaded?>> [ dup load-source ] unless - dup docs-loaded?>> [ dup load-docs ] unless - drop - ] if - ] [ - remove-from-errorlist - ] bi - ] [ [ swap add-to-errorlist ] keep rethrow ] recover ; + dup source-loaded?>> +parsing+ eq? [ + dup source-loaded?>> [ dup load-source ] unless + dup docs-loaded?>> [ dup load-docs ] unless + ] unless drop ; M: vocab-link (require) vocab-name (require) ; @@ -192,18 +176,11 @@ M: string (require) PRIVATE> -: require-all ( vocabs -- ) - V{ } clone errorlist [ [ require ] each ] with-variable ; - [ - dup vocab-name errorlist get at* - [ rethrow ] - [ - drop dup find-vocab-root - [ (require) ] - [ dup lookup-vocab [ drop ] [ no-vocab ] if ] - if - ] if + dup find-vocab-root + [ (require) ] + [ dup lookup-vocab [ drop ] [ no-vocab ] if ] + if ] require-hook set-global M: vocab-spec where vocab-source-path dup [ 1 2array ] when ; diff --git a/core/vocabs/vocabs.factor b/core/vocabs/vocabs.factor index 87ca67325a..a03ae103d9 100644 --- a/core/vocabs/vocabs.factor +++ b/core/vocabs/vocabs.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007, 2009 Eduardo Cavazos, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs definitions kernel namespaces -sequences sorting splitting strings ; +USING: accessors arrays assocs definitions kernel namespaces +sequences sets sorting splitting strings ; IN: vocabs SYMBOL: dictionary @@ -11,10 +11,8 @@ name words main help source-loaded? docs-loaded? ; -! sources-loaded? slot is one of these three -SYMBOL: +parsing+ -SYMBOL: +running+ -SYMBOL: +done+ +! sources-loaded? and docs-loaded? slots could be +SYMBOLS: +parsing+ +done+ ; : ( name -- vocab ) vocab new @@ -33,6 +31,8 @@ C: vocab-link UNION: vocab-spec vocab vocab-link ; +INSTANCE: vocab-spec definition-mixin + GENERIC: vocab-name ( vocab-spec -- name ) M: vocab vocab-name name>> ; @@ -76,6 +76,9 @@ M: object vocab-main lookup-vocab vocab-main ; M: f vocab-main ; +PREDICATE: runnable-vocab < vocab + vocab-main >boolean ; + SYMBOL: vocab-observers GENERIC: vocab-changed ( vocab obj -- ) @@ -150,10 +153,18 @@ M: vocab-spec forget* forget-vocab ; SYMBOL: require-hook -PREDICATE: runnable-vocab < vocab - vocab-main >boolean ; + GENERIC: require ( object -- ) @@ -167,8 +178,15 @@ M: vocab-link require name>> require ; ! that contain primitives, and loading the public vocabs would ! cause circularity issues. M: string require - [ ".private" ?tail ] keep swap [ lookup-vocab not ] when - [ require-hook get call( name -- ) ] [ drop ] if ; + [ ".private" ?tail ] keep swap [ lookup-vocab not ] when [ + [ + dup requiring get ?adjoin + [ require-hook get call( name -- ) ] [ drop ] if + ] with-requiring + ] [ drop ] if ; + +: require-all ( vocabs -- ) + [ [ require ] each ] with-requiring ; : load-vocab ( name -- vocab ) [ require ] [ lookup-vocab ] bi ; -- 2.34.1