Modules are now stored in an assoc, not a hash, to preserve order

slava 2006-09-07 00:02:13 +00:00
parent e90adcfb43
commit ebfbc586fe
5 changed files with 23 additions and 23 deletions

View File

@ -61,7 +61,6 @@ $terpri
{ $code "\"concurrency\" require" }
"The " { $link require } " word will load all dependencies and source files of the " { $snippet "concurrency" } " module."
{ $subsection require }
{ $subsection (require) }
"To define a new module named " { $snippet "frob" } ", create one of the following two files:"
{ $code "contrib/frob.factor" "contrib/frob/load.factor" }
"The module definition file should first list all required modules:"

View File

@ -18,7 +18,7 @@ H{ } clone c-types set
H{ } clone vocabularies set
H{ } clone class<map set
H{ } clone modules set
V{ } clone modules set
vocabularies get [ "syntax" set ] bind

View File

@ -26,15 +26,15 @@ TUPLE: module name files tests modified ;
dupd module-modified hash
swap resource-path file-modified number= not ;
: module-paths ( name seq -- newseq )
: prefix-paths ( name seq -- newseq )
[ "/" swap append3 ] map-with ;
C: module ( name files tests -- module )
[ >r >r over r> module-paths r> set-module-tests ] keep
[ >r dupd module-paths r> set-module-files ] keep
[ >r >r over r> prefix-paths r> set-module-tests ] keep
[ >r dupd prefix-paths r> set-module-files ] keep
[ set-module-name ] keep ;
: module modules get hash ;
: module modules get assoc ;
: load-module ( name -- )
[
@ -56,19 +56,25 @@ C: module ( name files tests -- module )
[ second call ] subset
[ first ] map ;
: add-module ( module -- )
dup module-name swap 2array modules get push ;
: provide ( name files tests -- )
[ process-files ] 2apply <module> dup record-modified
[ module-files run-resources ] keep
dup module-name modules get set-hash ;
add-module ;
: test-module ( name -- ) module module-tests run-tests ;
: all-modules ( -- seq ) modules get [ second ] map ;
: all-module-names ( -- seq ) modules get [ first ] map ;
: test-modules ( -- )
modules get hash-values
[ module-tests ] map concat run-tests ;
all-modules [ module-tests ] map concat run-tests ;
: modules. ( -- )
modules get hash-keys natural-sort [ print ] each ;
all-module-names natural-sort [ print ] each ;
: reload-module ( module -- )
dup module-name module-def over modified? [
@ -80,5 +86,4 @@ C: module ( name files tests -- module )
] if ;
: reload-modules ( -- )
modules get hash-values [ reload-module ] each
do-parse-hook ;
all-modules [ reload-module ] each do-parse-hook ;

View File

@ -1,7 +1,7 @@
IN: modules
USING: help io ;
HELP: module-paths
HELP: prefix-paths
{ $values { "name" "a module name string" } { "seq" "a sequence of strings" } { "newseq" "a new sequence of path name strings" } }
{ $description "Prepend the location of the module named " { $snippet "name" } " to every file name in " { $snippet "seq" } "." } ;
@ -22,18 +22,14 @@ HELP: modules
HELP: load-module
{ $values { "name" "a module name string" } }
{ $description "Runs the module definition file given by " { $link module-def } ", which loads the module's dependencies and source files." }
{ $notes "Unless you want to explicitly reload the sources of a module (for example, after making changes), you should use " { $link (require) } " or " { $link require } " instead." } ;
HELP: (require)
{ $values { "name" "a module name string" } }
{ $description "Ensures that a module has been loaded, along with all its dependencies."
$terpri
"If this module is already listed in the " { $link modules } " hashtable, this word does nothing. Otherwise, it calls " { $link load-module } "." }
{ $notes "Module definitions should use the " { $link POSTPONE: REQUIRES: } " parsing word instead. In the listener, the " { $link require } " word might be more useful since it recompiles new words after loading the module." } ;
{ $notes "Calling this word directly is rarely necessary. Usually, " { $link require } " is used to load modules and " { $link reload-modules } " is used to reload changed files." } ;
HELP: require
{ $values { "name" "a module name string" } }
{ $description "Ensures that a module has been loaded, along with all its dependencies, and recompiles all new words. This word is only for interactive use in the listener; to avoid recompiling words multiple times, any user code which needs to load modules should call " { $link (require) } " instead." } ;
{ $description "Ensures that a module has been loaded, along with all its dependencies, and compiles all new words."
$terpri
"If this module is already listed in the " { $link modules } " hashtable, this word does nothing. Otherwise, it calls " { $link load-module } "." }
{ $notes "Module definitions should use the " { $link POSTPONE: REQUIRES: } " parsing word instead. In the listener, the " { $link require } " word might be more useful since it recompiles new words after loading the module." } ;
HELP: run-resources
{ $values { "seq" "a sequence of strings" } }

View File

@ -272,7 +272,7 @@ $terpri
HELP: REQUIRES:
{ $syntax "REQUIRES: modules... ;" }
{ $values { "modules" "module name strings" } }
{ $description "Loads a list of modules by calling " { $link (require) } " on each one." } ;
{ $description "Loads a list of modules by calling " { $link require } " on each one." } ;
HELP: PROVIDE:
{ $syntax "PROVIDE: name files tests ;" }