]> gitweb.factorcode.org Git - factor.git/commitdiff
Fixing require-when
authorDaniel Ehrenberg <littledan@pool-224-36.res.carleton.edu>
Sun, 18 Apr 2010 19:08:21 +0000 (14:08 -0500)
committerDaniel Ehrenberg <littledan@pool-224-36.res.carleton.edu>
Sun, 18 Apr 2010 19:08:21 +0000 (14:08 -0500)
core/vocabs/loader/loader.factor
core/vocabs/vocabs.factor

index 4e811d89146cd73b57e8a4f20b9b2cfc2fa33e16..b09ba8c2bc4b383db0d2c284b2136d7d96b7a132 100644 (file)
@@ -66,18 +66,19 @@ DEFER: require
 
 <PRIVATE
 
-: transfer-conditionals ( vocab-name record -- )
-    {
-        [ unloaded>> delete ]
-        [ loaded>> adjoin ]
-        [ swap partly-required get adjoin-at ]
-        [ unloaded>> null? swap '[ _ require ] when ]
-    } 2cleave ;
-
-: load-conditional-requires ( vocab-name -- )
-    conditional-requires get
-    [ dupd at members [ transfer-conditionals ] with each ] 
-    [ delete-at ] 2bi ;
+SYMBOL: require-when-vocabs
+require-when-vocabs [ HS{ } clone ] initialize
+
+SYMBOL: require-when-table
+require-when-table [ V{ } clone ] initialize
+
+: load-conditional-requires ( vocab -- )
+    vocab-name require-when-vocabs get in? [
+        require-when-table get [
+            [ [ vocab ] all? ] dip
+            '[ _ require ] when
+        ] assoc-each
+    ] when ;
 
 : load-source ( vocab -- )
     dup check-vocab-hook get call( vocab -- )
@@ -87,7 +88,7 @@ DEFER: require
         [ +parsing+ >>source-loaded? ] dip
         [ % ] [ call( -- ) ] if-bootstrapping
         +done+ >>source-loaded?
-        vocab-name load-conditional-requires
+        load-conditional-requires
     ] [ ] [ f >>source-loaded? ] cleanup ;
 
 : load-docs ( vocab -- )
@@ -104,22 +105,13 @@ PRIVATE>
 : require ( vocab -- )
     load-vocab drop ;
 
-<PRIVATE
-
-: adjoin-each-at ( elt seq assoc -- )
-    [ swap ] dip '[ _ swap _ adjoin-at ] each ;
-
-: record-require-when ( then loaded unloaded -- )
-    [ [ fast-set ] bi@ <require-when-record> ] 2keep
-    [ conditional-requires get adjoin-each-at ]
-    [ partly-required get adjoin-each-at ]
-    bi-curry* bi ;
-
-PRIVATE>
-
 : require-when ( if then -- )
-    swap [ vocab ] partition
-    [ drop require ] [ record-require-when ] if-empty ;
+    over [ vocab ] all? [
+        require drop
+    ] [
+        [ drop [ require-when-vocabs get adjoin ] each ]
+        [ 2array require-when-table get push ] 2bi
+    ] if ;
 
 : reload ( name -- )
     dup vocab
index db28c9981ba9c4e96ca0c9bf9d5d869044076b0f..38881673e9877986398c0ca50684a627bca83a78 100644 (file)
@@ -83,25 +83,6 @@ ERROR: bad-vocab-name name ;
 : check-vocab-name ( name -- name )
     dup string? [ bad-vocab-name ] unless ;
 
-TUPLE: require-when-record
-    vocab loaded unloaded ;
-
-! These are identified by their vocab
-M: require-when-record equal?
-    over require-when-record?
-    [ [ vocab>> ] bi@ = ] [ 2drop f ] if ;
-
-M: require-when-record hashcode*
-    vocab>> hashcode* ;
-
-C: <require-when-record> require-when-record
-
-SYMBOL: conditional-requires
-conditional-requires [ H{ } clone ] initialize
-
-SYMBOL: partly-required
-partly-required [ H{ } clone ] initialize
-
 : create-vocab ( name -- vocab )
     check-vocab-name
     dictionary get [ <vocab> ] cache
@@ -136,26 +117,9 @@ M: vocab-spec >vocab-link ;
 
 M: string >vocab-link dup vocab [ ] [ <vocab-link> ] ?if ;
 
-<PRIVATE
-
-: untransfer-conditionals ( vocab-name record -- )
-    {
-        [ loaded>> delete ]
-        [ unloaded>> adjoin ]
-        [ swap conditional-requires get adjoin-at ]
-    } 2cleave ;
-
-: unload-conditional-requires ( vocab-name -- )
-    partly-required get
-    [ dupd at members [ untransfer-conditionals ] with each ] 
-    [ delete-at ] 2bi ;
-
-PRIVATE>
-
 : forget-vocab ( vocab -- )
     [ words forget-all ]
-    [ vocab-name dictionary get delete-at ]
-    [ unload-conditional-requires ] tri
+    [ vocab-name dictionary get delete-at ] bi
     notify-vocab-observers ;
 
 M: vocab-spec forget* forget-vocab ;