Modules are now stored in an assoc, not a hash, to preserve order
parent
e90adcfb43
commit
ebfbc586fe
|
|
@ -61,7 +61,6 @@ $terpri
|
||||||
{ $code "\"concurrency\" require" }
|
{ $code "\"concurrency\" require" }
|
||||||
"The " { $link require } " word will load all dependencies and source files of the " { $snippet "concurrency" } " module."
|
"The " { $link require } " word will load all dependencies and source files of the " { $snippet "concurrency" } " module."
|
||||||
{ $subsection require }
|
{ $subsection require }
|
||||||
{ $subsection (require) }
|
|
||||||
"To define a new module named " { $snippet "frob" } ", create one of the following two files:"
|
"To define a new module named " { $snippet "frob" } ", create one of the following two files:"
|
||||||
{ $code "contrib/frob.factor" "contrib/frob/load.factor" }
|
{ $code "contrib/frob.factor" "contrib/frob/load.factor" }
|
||||||
"The module definition file should first list all required modules:"
|
"The module definition file should first list all required modules:"
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ H{ } clone c-types set
|
||||||
|
|
||||||
H{ } clone vocabularies set
|
H{ } clone vocabularies set
|
||||||
H{ } clone class<map set
|
H{ } clone class<map set
|
||||||
H{ } clone modules set
|
V{ } clone modules set
|
||||||
|
|
||||||
vocabularies get [ "syntax" set ] bind
|
vocabularies get [ "syntax" set ] bind
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,15 +26,15 @@ TUPLE: module name files tests modified ;
|
||||||
dupd module-modified hash
|
dupd module-modified hash
|
||||||
swap resource-path file-modified number= not ;
|
swap resource-path file-modified number= not ;
|
||||||
|
|
||||||
: module-paths ( name seq -- newseq )
|
: prefix-paths ( name seq -- newseq )
|
||||||
[ "/" swap append3 ] map-with ;
|
[ "/" swap append3 ] map-with ;
|
||||||
|
|
||||||
C: module ( name files tests -- module )
|
C: module ( name files tests -- module )
|
||||||
[ >r >r over r> module-paths r> set-module-tests ] keep
|
[ >r >r over r> prefix-paths r> set-module-tests ] keep
|
||||||
[ >r dupd module-paths r> set-module-files ] keep
|
[ >r dupd prefix-paths r> set-module-files ] keep
|
||||||
[ set-module-name ] keep ;
|
[ set-module-name ] keep ;
|
||||||
|
|
||||||
: module modules get hash ;
|
: module modules get assoc ;
|
||||||
|
|
||||||
: load-module ( name -- )
|
: load-module ( name -- )
|
||||||
[
|
[
|
||||||
|
|
@ -56,19 +56,25 @@ C: module ( name files tests -- module )
|
||||||
[ second call ] subset
|
[ second call ] subset
|
||||||
[ first ] map ;
|
[ first ] map ;
|
||||||
|
|
||||||
|
: add-module ( module -- )
|
||||||
|
dup module-name swap 2array modules get push ;
|
||||||
|
|
||||||
: provide ( name files tests -- )
|
: provide ( name files tests -- )
|
||||||
[ process-files ] 2apply <module> dup record-modified
|
[ process-files ] 2apply <module> dup record-modified
|
||||||
[ module-files run-resources ] keep
|
[ module-files run-resources ] keep
|
||||||
dup module-name modules get set-hash ;
|
add-module ;
|
||||||
|
|
||||||
: test-module ( name -- ) module module-tests run-tests ;
|
: 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 ( -- )
|
: test-modules ( -- )
|
||||||
modules get hash-values
|
all-modules [ module-tests ] map concat run-tests ;
|
||||||
[ module-tests ] map concat run-tests ;
|
|
||||||
|
|
||||||
: modules. ( -- )
|
: modules. ( -- )
|
||||||
modules get hash-keys natural-sort [ print ] each ;
|
all-module-names natural-sort [ print ] each ;
|
||||||
|
|
||||||
: reload-module ( module -- )
|
: reload-module ( module -- )
|
||||||
dup module-name module-def over modified? [
|
dup module-name module-def over modified? [
|
||||||
|
|
@ -80,5 +86,4 @@ C: module ( name files tests -- module )
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: reload-modules ( -- )
|
: reload-modules ( -- )
|
||||||
modules get hash-values [ reload-module ] each
|
all-modules [ reload-module ] each do-parse-hook ;
|
||||||
do-parse-hook ;
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
IN: modules
|
IN: modules
|
||||||
USING: help io ;
|
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" } }
|
{ $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" } "." } ;
|
{ $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
|
HELP: load-module
|
||||||
{ $values { "name" "a module name string" } }
|
{ $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." }
|
{ $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." } ;
|
{ $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."
|
|
||||||
$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: require
|
HELP: require
|
||||||
{ $values { "name" "a module name string" } }
|
{ $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
|
HELP: run-resources
|
||||||
{ $values { "seq" "a sequence of strings" } }
|
{ $values { "seq" "a sequence of strings" } }
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,7 @@ $terpri
|
||||||
HELP: REQUIRES:
|
HELP: REQUIRES:
|
||||||
{ $syntax "REQUIRES: modules... ;" }
|
{ $syntax "REQUIRES: modules... ;" }
|
||||||
{ $values { "modules" "module name strings" } }
|
{ $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:
|
HELP: PROVIDE:
|
||||||
{ $syntax "PROVIDE: name files tests ;" }
|
{ $syntax "PROVIDE: name files tests ;" }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue