1 ! Copyright (C) 2006 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: hashtables io kernel namespaces parser sequences
5 words strings arrays math help errors ;
9 TUPLE: module name loc directory files tests help main ;
11 : module-def ( name -- path )
12 "resource:" over "/load.factor" 3append
13 dup ?resource-path exists? [
16 drop "resource:" swap ".factor" 3append
19 : module modules get [ module-name = ] find-with nip ;
21 : process-files ( name seq -- newseq )
22 [ dup string? [ [ t ] 2array ] when ] map
23 [ second call ] subset
25 [ path+ "resource:" swap append ] map-with ;
27 : module-files* ( module -- seq )
28 dup module-directory swap module-files process-files ;
30 : loading-module ( name -- )
34 "Loading module " write print flush
37 : load-module ( name -- )
40 [ dup module-def run-file ] assert-depth drop
43 : reload-module ( module -- )
44 dup module-name module-def source-modified? [
45 module-name load-module
47 module-files* [ source-modified? ] subset run-files
50 : reload-modules ( -- )
51 modules get [ reload-module ] each do-parse-hook ;
54 dup module [ drop ] [ load-module ] if do-parse-hook ;
56 : remove-module ( name -- )
57 module [ modules get delete ] when* ;
59 : alist>module ( name loc hash -- module )
61 +directory+ get [ over ] unless*
67 : module>alist ( module -- hash )
69 +directory+ over module-directory 2array ,
70 +files+ over module-files 2array ,
71 +tests+ over module-tests 2array ,
72 +help+ swap module-help 2array ,
75 : provide ( name loc hash -- )
78 [ module-files* run-files ] keep