diff --git a/contrib/aim/load.factor b/contrib/aim/load.factor index 7262b9021c..50149bfe4a 100644 --- a/contrib/aim/load.factor +++ b/contrib/aim/load.factor @@ -1,7 +1,6 @@ IN: scratchpad USING: kernel parser sequences words compiler ; -{ - "net-bytes" - "aim" -} [ "/contrib/aim/" swap ".factor" append3 run-resource ] each +REQUIRE: crypto ; + +PROVIDE: aim { "net-bytes.factor" "aim.factor" } ; diff --git a/contrib/all.factor b/contrib/all.factor new file mode 100644 index 0000000000..6c0d15155d --- /dev/null +++ b/contrib/all.factor @@ -0,0 +1,10 @@ +USING: modules words ; + +REQUIRE: aim cairo concurrency coroutines crypto dlists +gap-buffer httpd math postgresql process random-tester +splay-trees sqlite units ; + +"x11" vocab [ + "factory" require + "x11" require +] diff --git a/contrib/cairo/load.factor b/contrib/cairo/load.factor index 9c353e4284..384c9ab30f 100644 --- a/contrib/cairo/load.factor +++ b/contrib/cairo/load.factor @@ -3,6 +3,6 @@ USING: alien kernel parser compiler words sequences ; "cairo" "libcairo" add-simple-library -"/contrib/cairo/cairo.factor" run-resource +PROVIDE: cairo { "/contrib/cairo/cairo.factor" } ; { "cairo" } compile-vocabs diff --git a/contrib/concurrency/load.factor b/contrib/concurrency/load.factor index 4ef8059611..acbc482235 100644 --- a/contrib/concurrency/load.factor +++ b/contrib/concurrency/load.factor @@ -1,6 +1,7 @@ -IN: scratchpad -USING: kernel parser compiler words sequences ; +USING: modules ; -"/contrib/concurrency/concurrency.factor" run-resource -"/contrib/concurrency/concurrency-examples.factor" run-resource -"/contrib/concurrency/concurrency-tests.factor" run-resource +REQUIRE: dlists ; + +PROVIDE: concurrency +{ "concurrency.factor" } +{ "concurrency-examples.factor" "concurrency-tests.factor" } ; diff --git a/contrib/coroutines.factor b/contrib/coroutines.factor index 54256d4995..a790eab461 100644 --- a/contrib/coroutines.factor +++ b/contrib/coroutines.factor @@ -69,3 +69,5 @@ test2 f swap coresume . f swap coresume . f swap coresume . drop test3 f swap coresume . f swap coresume . f swap coresume . drop +PROVIDE: coroutines ; + diff --git a/contrib/crypto/load.factor b/contrib/crypto/load.factor index 86057af025..ba482802c0 100644 --- a/contrib/crypto/load.factor +++ b/contrib/crypto/load.factor @@ -1,26 +1,28 @@ IN: scratchpad USING: kernel parser sequences words compiler ; -{ - "common" - "base64" - "barrett" - "montgomery" - "random" - "miller-rabin" +REQUIRE: math ; + +PROVIDE: crypto { + "common.factor" + "base64.factor" + "barrett.factor" + "montgomery.factor" + "random.factor" + "miller-rabin.factor" ! Rngs - "blum-blum-shub" + "blum-blum-shub.factor" ! Hash - "crc32" - "md5" - "sha1" + "crc32.factor" + "md5.factor" + "sha1.factor" ! Block ciphers - "rc4" + "rc4.factor" ! Public key - "rsa" + "rsa.factor" -} [ "/contrib/crypto/" swap ".factor" append3 run-resource ] each +} ; diff --git a/contrib/dlists.factor b/contrib/dlists.factor index 7a125b16ee..951f354eec 100644 --- a/contrib/dlists.factor +++ b/contrib/dlists.factor @@ -1,6 +1,7 @@ ! Copyright (C) 2005 Mackenzie Straight. ! See http://factor.sf.net/license.txt for BSD license. -IN: dlists USING: generic kernel math ; +IN: dlists +USING: generic kernel math modules ; ! Double-linked lists. @@ -60,3 +61,5 @@ C: dlist-node : dlist-length ( dlist -- length ) 0 swap [ drop 1 + ] dlist-each ; + +PROVIDE: dlists ; diff --git a/contrib/factory/load.factor b/contrib/factory/load.factor new file mode 100644 index 0000000000..f641964e6c --- /dev/null +++ b/contrib/factory/load.factor @@ -0,0 +1,5 @@ +USING: modules ; + +REQUIRE: process concurrency x11 ; + +PROVIDE: factory { "factory.factor" } ; diff --git a/contrib/gap-buffer/load.factor b/contrib/gap-buffer/load.factor index 0fadd0ae90..d5bfbf3c69 100644 --- a/contrib/gap-buffer/load.factor +++ b/contrib/gap-buffer/load.factor @@ -1,13 +1,5 @@ USING: kernel sequences parser words compiler ; -[ "circular" "gap-buffer" ] - -! load -dup [ "contrib/gap-buffer/" swap append ".factor" append run-file ] each - -! compile -dup [ words [ try-compile ] each ] each - -! test -[ "contrib/gap-buffer/" swap append "-tests.factor" append run-file ] each - +PROVIDE: gap-buffer +{ "circular.factor" "gap-buffer.factor" } +{ "circular-tests.factor" "gap-buffer-tests.factor" } ; diff --git a/contrib/httpd/load.factor b/contrib/httpd/load.factor index e8eef0cab1..f8f46729cc 100644 --- a/contrib/httpd/load.factor +++ b/contrib/httpd/load.factor @@ -1,30 +1,30 @@ IN: scratchpad USING: words kernel parser sequences io compiler ; -{ - "mime" - "xml" - "http-common" - "html-tags" - "responder" - "httpd" - "cont-responder" - "callback-responder" - "prototype-js" - "html" - "embedded" - "file-responder" - "help-responder" - "inspect-responder" - "browser-responder" - "default-responders" - "http-client" +PROVIDE: httpd { + "mime.factor" + "xml.factor" + "http-common.factor" + "html-tags.factor" + "responder.factor" + "httpd.factor" + "cont-responder.factor" + "callback-responder.factor" + "prototype-js.factor" + "html.factor" + "embedded.factor" + "file-responder.factor" + "help-responder.factor" + "inspect-responder.factor" + "browser-responder.factor" + "default-responders.factor" + "http-client.factor" - "test/html" - "test/http-client" - "test/httpd" - "test/url-encoding" -} [ "/contrib/httpd/" swap ".factor" append3 run-resource ] each + "test/html.factor" + "test/http-client.factor" + "test/httpd.factor" + "test/url-encoding.factor" +} ; "To start the HTTP server, issue the following command in the listener:" print " USE: httpd" print diff --git a/contrib/load.factor b/contrib/load.factor deleted file mode 100644 index e7689476b3..0000000000 --- a/contrib/load.factor +++ /dev/null @@ -1,21 +0,0 @@ -USING: kernel parser sequences ; -{ - "coroutines" - "dlists" - "process" - "splay-trees" -} [ "/contrib/" swap ".factor" append3 run-resource ] each - -{ - "cairo" - "concurrency" - "math" - "crypto" - "aim" - "gap-buffer" - "httpd" - "units" - "sqlite" - "postgresql" - "random-tester" -} [ "/contrib/" swap "/load.factor" append3 run-resource ] each diff --git a/contrib/math/load.factor b/contrib/math/load.factor index f068373e47..760f9219a8 100644 --- a/contrib/math/load.factor +++ b/contrib/math/load.factor @@ -1,13 +1,13 @@ IN: scratchpad -USING: kernel parser sequences words compiler ; +USING: modules ; -{ - "utils" - "combinatorics" - "analysis" - "polynomials" - "quaternions" - "matrices" - "statistics" - "numerical-integration" -} [ "/contrib/math/" swap ".factor" append3 run-resource ] each +PROVIDE: math { + "utils.factor" + "combinatorics.factor" + "analysis.factor" + "polynomials.factor" + "quaternions.factor" + "matrices.factor" + "statistics.factor" + "numerical-integration.factor" +} ; diff --git a/contrib/postgresql/load.factor b/contrib/postgresql/load.factor index 0dd9674626..0cd0acde1c 100644 --- a/contrib/postgresql/load.factor +++ b/contrib/postgresql/load.factor @@ -1,11 +1,7 @@ -IN: scratchpad -USING: alien compiler kernel parser sequences words ; +USING: alien modules ; "postgresql" "libpq" add-simple-library -{ - "libpq" - "postgresql" - "postgresql-test" - ! "private" ! Put your password in this file -} [ "/contrib/postgresql/" swap ".factor" append3 run-resource ] each +PROVIDE: postgresql +{ "libpq" "postgresql" } +{ "postgresql-test" } ; diff --git a/contrib/process.factor b/contrib/process.factor index b896a96d63..f27e10adea 100644 --- a/contrib/process.factor +++ b/contrib/process.factor @@ -9,3 +9,5 @@ FUNCTION: void* popen ( char* command, char* type ) ; compiled popen dup ; : !" parse-string system drop ; parsing + +PROVIDE: process ; diff --git a/contrib/random-tester/load.factor b/contrib/random-tester/load.factor index 06583c7cb6..349d6882c4 100644 --- a/contrib/random-tester/load.factor +++ b/contrib/random-tester/load.factor @@ -1,8 +1,5 @@ -USING: kernel parser sequences words compiler ; -IN: scratchpad - -{ - "utils" - "random" - "random-tester" -} [ "/contrib/random-tester/" swap ".factor" append3 run-resource ] each +PROVIDE: random-tester { + "utils.factor" + "random.factor" + "random-tester.factor" +} ; diff --git a/contrib/splay-trees.factor b/contrib/splay-trees.factor index 7f8b7e20b8..245f55ac91 100644 --- a/contrib/splay-trees.factor +++ b/contrib/splay-trees.factor @@ -113,3 +113,5 @@ USING: namespaces words ; "foo" set all-words [ dup word-name "foo" get set-splay ] each all-words [ dup word-name "foo" get get-splay drop ] each + +PROVIDE: splay-trees ; diff --git a/contrib/sqlite/load.factor b/contrib/sqlite/load.factor index ecfc9fd126..2e5fc3920e 100644 --- a/contrib/sqlite/load.factor +++ b/contrib/sqlite/load.factor @@ -1,9 +1,7 @@ -IN: scratchpad -USING: kernel alien parser compiler words sequences ; +USING: alien ; "sqlite" "libsqlite3" add-simple-library -{ - "sqlite" - "tuple-db" -} [ "/contrib/sqlite/" swap ".factor" append3 run-resource ] each +PROVIDE: sqlite +{ "sqlite.factor" "tuple-db.factor" } +{ "tuple-db-tests.factor" } ; diff --git a/contrib/units/load.factor b/contrib/units/load.factor index c1b7f04c1a..ffd3d2ef11 100644 --- a/contrib/units/load.factor +++ b/contrib/units/load.factor @@ -1,8 +1,2 @@ -IN: scratchpad -USING: kernel parser sequences words compiler ; - -{ - "dimensioned" - "si-units" - "constants" -} [ "/contrib/units/" swap ".factor" append3 run-resource ] each +PROVIDE: units +{ "dimensioned.factor" "si-units.factor" "constants.factor" } ; diff --git a/contrib/x11/load.factor b/contrib/x11/load.factor index aa73f2e3ec..459c21b1ad 100644 --- a/contrib/x11/load.factor +++ b/contrib/x11/load.factor @@ -1,6 +1,5 @@ -USING: kernel parser words compiler sequences ; +REQUIRE: concurrency ; -! contrib/x11 depends on contrib/concurrency - -{ "rectangle" "x" "draw-string" "concurrent-widgets" "gl" } -[ "/contrib/x11/" swap ".factor" append3 run-resource ] each \ No newline at end of file +PROVIDE: x11 { + "rectangle.factor" "x.factor" "draw-string.factor" "concurrent-widgets.factor" "gl.factor" +} ; \ No newline at end of file diff --git a/library/bootstrap/boot-stage1.factor b/library/bootstrap/boot-stage1.factor index 22909e9316..6da03f9141 100644 --- a/library/bootstrap/boot-stage1.factor +++ b/library/bootstrap/boot-stage1.factor @@ -117,6 +117,7 @@ vectors words ; "/library/test/test.factor" + "/library/modules.factor" "/library/threads.factor" "/library/io/server.factor" diff --git a/library/modules.factor b/library/modules.factor new file mode 100644 index 0000000000..2e58c7287c --- /dev/null +++ b/library/modules.factor @@ -0,0 +1,49 @@ +! Copyright (C) 2006 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +IN: modules +USING: hashtables io kernel namespaces parser sequences words ; + +TUPLE: module name files tests ; + +: module-path ( name -- path ) + "/contrib/" swap append ; + +: module-paths ( name seq -- seq ) + >r module-path r> [ "/" 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 + [ set-module-name ] keep ; + +: module-def ( name -- path ) + module-path dup ".factor" append dup resource-path exists? + [ nip ] [ drop "/load.factor" append ] if ; + +SYMBOL: modules + +H{ } clone modules set-global + +: module modules get hash ; + +: require ( name -- ) + dup module [ + drop + ] [ + "Loading module " write dup write "..." print + module-def run-resource + ] if ; + +: run-resources ( seq -- ) + bootstrapping? get + [ parse-resource % ] [ run-resource ] ? each ; + +: load-module ( module -- ) module-files run-resources ; + +: provide ( name files tests -- ) + dup load-module + dup module-name modules get set-hash ; + +: reload-module ( name -- ) module load-module ; + +: test-module ( name -- ) module module-tests run-resources ; diff --git a/library/syntax/parse-syntax.factor b/library/syntax/parse-syntax.factor index f241502ac1..8d9c7fd235 100644 --- a/library/syntax/parse-syntax.factor +++ b/library/syntax/parse-syntax.factor @@ -4,7 +4,7 @@ ! Bootstrapping trick; see doc/bootstrap.txt. IN: !syntax USING: alien arrays errors generic hashtables kernel math -namespaces parser sequences strings syntax vectors words ; +modules namespaces parser sequences strings syntax vectors words ; : ( CHAR: ) column [ @@ -69,3 +69,10 @@ DEFER: PRIMITIVE: parsing [ define-constructor ] f ; parsing : FORGET: scan use get hash-stack [ forget ] when* ; parsing + +: PROVIDE: + scan [ { { } { } } append first2 provide ] f ; parsing + +: REQUIRE: + string-mode on + [ string-mode off [ require ] each ] f ; parsing