]> gitweb.factorcode.org Git - factor.git/commitdiff
vocabs: change from errorlist to requiring list
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 12 Jan 2022 22:44:14 +0000 (14:44 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 12 Jan 2022 22:44:14 +0000 (14:44 -0800)
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
core/vocabs/vocabs.factor

index d413a46e716aec656cd24295a81f3454e3d48498..5c24341c45a2c0b35f890b6d8908e89a9548910e 100644 (file)
@@ -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
-
 <PRIVATE
 
-: add-to-errorlist ( error vocab -- )
-    vocab-name errorlist get [ set-at ] [ 2drop ] if* ;
-
-: remove-from-errorlist ( vocab -- )
-    vocab-name errorlist get [ delete-at ] [ drop ] if* ;
-
 GENERIC: (require) ( name -- )
 
 M: vocab (require)
-    [
-        [
-            dup source-loaded?>> +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 ;
index 87ca67325a83708b649b37efb5e5fe65cc6fe4ab..a03ae103d918b4a158d066cd9bc6a2b5e2009c01 100644 (file)
@@ -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+ ;
 
 : <vocab> ( name -- vocab )
     vocab new
@@ -33,6 +31,8 @@ C: <vocab-link> 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 ;
+<PRIVATE
 
-INSTANCE: vocab-spec definition-mixin
+SYMBOL: requiring
+
+: with-requiring ( quot -- )
+    requiring get [
+        call
+    ] [
+        HS{ } clone requiring [ call ] with-variable
+    ] if ; inline
+
+PRIVATE>
 
 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 ;