]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'master' of git://factorcode.org/git/factor
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Mon, 19 Apr 2010 19:07:47 +0000 (14:07 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Mon, 19 Apr 2010 19:07:47 +0000 (14:07 -0500)
32 files changed:
basis/bit-sets/bit-sets-tests.factor
basis/bootstrap/compiler/compiler.factor
basis/bootstrap/handbook/handbook.factor
basis/bootstrap/threads/threads.factor
basis/bootstrap/ui/tools/tools.factor
basis/classes/struct/struct.factor
basis/http/client/client.factor
basis/locals/locals.factor
basis/math/rectangles/rectangles.factor
basis/math/vectors/simd/simd.factor
basis/peg/peg.factor
basis/regexp/regexp.factor
basis/specialized-arrays/specialized-arrays.factor
basis/stack-checker/errors/errors.factor
basis/typed/typed.factor
basis/ui/gadgets/gadgets.factor
basis/unix/unix.factor
basis/urls/urls.factor
basis/windows/com/syntax/syntax.factor
basis/x11/x11.factor
basis/xml/syntax/syntax.factor
core/hash-sets/hash-sets-tests.factor
core/hash-sets/hash-sets.factor
core/sets/sets-docs.factor
core/sets/sets-tests.factor
core/sets/sets.factor
core/vocabs/loader/loader-docs.factor
core/vocabs/loader/loader.factor
core/vocabs/loader/test/m/m.factor
core/vocabs/vocabs.factor
extra/game/loop/loop.factor
extra/gpu/shaders/shaders.factor

index 4e97e703d0017fa939a617c53ad3df071cfb23bb..0d4543f8f2fa3685873e6470dc70888ca291f8d3 100644 (file)
@@ -11,6 +11,9 @@ IN: bit-sets.tests
     T{ bit-set f ?{ f f t f t f } } intersect
 ] unit-test
 
+[ f ] [ T{ bit-set f ?{ t f f f t f } } null? ] unit-test
+[ t ] [ T{ bit-set f ?{ f f f f f f } } null? ] unit-test
+
 [ T{ bit-set f ?{ t f t f f f } } ] [
     T{ bit-set f ?{ t t t f f f } }
     T{ bit-set f ?{ f t f f t t } } diff
index 9cb9c125abf291312b9e742ba94f1af2a16105e4..56109e2de6f6591b315d8306d71822eb39640e4b 100644 (file)
@@ -20,8 +20,8 @@ IN: bootstrap.compiler
     "alien.remote-control" require
 ] unless
 
-"prettyprint" "alien.prettyprint" require-when
-"debugger" "alien.debugger" require-when
+{ "boostrap.compiler" "prettyprint" } "alien.prettyprint" require-when
+{ "boostrap.compiler" "debugger" } "alien.debugger" require-when
 
 "cpu." cpu name>> append require
 
index 11f7349b7962d320429563cdb54068a72aad90f1..ef7a456b7bc045e7ec9893e4dc7fb81292b19859 100644 (file)
@@ -1,4 +1,4 @@
 USING: vocabs.loader vocabs kernel ;\r
 IN: bootstrap.handbook\r
 \r
-"bootstrap.help" "help.handbook" require-when\r
+{ "boostrap.handbook" "bootstrap.help" } "help.handbook" require-when\r
index 3a8fe98cf408ba39610365bec70fb32c67678e1e..2bc8d612b699fb916bdf986819ab7f99bc61b802 100644 (file)
@@ -4,6 +4,6 @@ USING: vocabs.loader kernel io.thread threads
 compiler.utilities namespaces ;
 IN: bootstrap.threads
 
-"debugger" "debugger.threads" require-when
+{ "bootstrap.threads" "debugger" } "debugger.threads" require-when
 
 [ yield ] yield-hook set-global
index 7db69ce9c12e560b4192bfe8403a57023fff599e..3efd15698301969c7343453d93bf4a5983c599ce 100644 (file)
@@ -4,7 +4,7 @@ USING: kernel vocabs vocabs.loader sequences system ;
 [ "bootstrap." prepend vocab ] all? [
     "ui.tools" require
 
-    "ui.backend.cocoa" "ui.backend.cocoa.tools" require-when
+    { "ui.backend.cocoa" } "ui.backend.cocoa.tools" require-when
 
     "ui.tools.walker" require
 ] when
index ffde2337486cfb5182c32f0e7658aae6c2c954b4..605ee573f5a4eb236538f98295d1156623367006 100644 (file)
@@ -404,4 +404,4 @@ FUNCTOR-SYNTAX: STRUCT:
 
 USING: vocabs vocabs.loader ;
 
-"prettyprint" "classes.struct.prettyprint" require-when
+{ "classes.struct" "prettyprint" } "classes.struct.prettyprint" require-when
index 1221ee39f35ae8165694c90096dd047ce61e294e..aa2fc8962b85e87f9adaf3360ab3da2fc28654d3 100644 (file)
@@ -194,6 +194,6 @@ ERROR: download-failed response ;
 : http-delete ( url -- response data )
     <delete-request> http-request ;
 
-USING: vocabs vocabs.loader ;
+USE: vocabs.loader
 
-"debugger" "http.client.debugger" require-when
+{ "http.client" "debugger" } "http.client.debugger" require-when
index 7d67881c47624227ddc86ddad7886c24812d3cae..5fd12e2fb3fe611fb6383e9bc8e07b63a6917f27 100644 (file)
@@ -26,5 +26,5 @@ SYNTAX: MEMO:: (::) define-memoized ;
     "locals.fry"
 } [ require ] each
 
-"prettyprint" "locals.definitions" require-when
-"prettyprint" "locals.prettyprint" require-when
+{ "locals" "prettyprint" } "locals.definitions" require-when
+{ "locals" "prettyprint" } "locals.prettyprint" require-when
index 78ac5457bcce14f59a18427935717d98449ec58a..15f4d5376db846961b8b99d1b3368d45841bdb66 100644 (file)
@@ -64,4 +64,4 @@ M: rect contains-point?
 
 USE: vocabs.loader
 
-"prettyprint" "math.rectangles.prettyprint" require-when
+{ "math.rectangles" "prettyprint" } "math.rectangles.prettyprint" require-when
index 65d6e113bfed1e5591cc05f12213dcfa68bdff6e..c845a4df6356eb41ff250d9c4986644cc633d6c2 100644 (file)
@@ -339,4 +339,4 @@ M: short-8 v*hs+
 M: int-4 v*hs+
     int-4-rep [ (simd-v*hs+) ] [ call-next-method ] vv->v-op longlong-2-cast ; inline
 
-"mirrors" "math.vectors.simd.mirrors" require-when
+{ "math.vectors.simd" "mirrors" } "math.vectors.simd.mirrors" require-when
index ca7d28bb97a18d9f29a7a1995631813c95d4ec6d..e50c1d8d950bd90bc9d8125a1acc1acba1a71609 100644 (file)
@@ -628,6 +628,6 @@ SYNTAX: PEG:
         ] append!
     ] ;
 
-USING: vocabs vocabs.loader ;
+USE: vocabs.loader
 
-"debugger" "peg.debugger" require-when
+{ "debugger" "peg" } "peg.debugger" require-when
index eea0a26ea5fa4aebe59a692b04befae601d427d2..bbfe44096749edda70412c5235c722e3997da19a 100644 (file)
@@ -216,6 +216,6 @@ SYNTAX: R` CHAR: ` parsing-regexp ;
 SYNTAX: R{ CHAR: } parsing-regexp ;
 SYNTAX: R| CHAR: | parsing-regexp ;
 
-USING: vocabs vocabs.loader ;
+USE: vocabs.loader
 
-"prettyprint" "regexp.prettyprint" require-when
+{ "prettyprint" "regexp" } "regexp.prettyprint" require-when
index c82ebd78c80f71560c5f277eb4ef3da90a37b29c..38f97303ba45c31c31bdf669536ef08f130d5e01 100644 (file)
@@ -173,6 +173,6 @@ SYNTAX: SPECIALIZED-ARRAYS:
 SYNTAX: SPECIALIZED-ARRAY:
     scan-c-type define-array-vocab use-vocab ;
 
-"prettyprint" "specialized-arrays.prettyprint" require-when
+{ "specialized-arrays" "prettyprint" } "specialized-arrays.prettyprint" require-when
 
-"mirrors" "specialized-arrays.mirrors" require-when
+{ "specialized-arrays" "mirrors" } "specialized-arrays.mirrors" require-when
index 5eca37ffbef4ebc690b64159a3dd19085ebf7944..f3aeb7bb648e2cc0b9892e2af3b9285a6a1f5f17 100644 (file)
@@ -35,4 +35,4 @@ ERROR: bad-declaration-error < inference-error declaration ;
 
 ERROR: unbalanced-branches-error < inference-error word quots declareds actuals ;
 
-"debugger" "stack-checker.errors.prettyprint" require-when
+{ "stack-checker.errors" "debugger" } "stack-checker.errors.prettyprint" require-when
index df46303b796df3a2ad46324eb06324fdd8686861..65b21fcc38236e7b32a6acfc2450a48c97b31a7f 100644 (file)
@@ -164,6 +164,6 @@ SYNTAX: TYPED:
 SYNTAX: TYPED::
     (::) define-typed ;
 
-USING: vocabs vocabs.loader ;
+USE: vocabs.loader
 
-"prettyprint" "typed.prettyprint" require-when
+{ "typed" "prettyprint" } "typed.prettyprint" require-when
index dca340cd3b26fb8525d4da66d451d1067e29d9e2..3c1ece1f5ee20ae4d40569b260eff7ac5be9837e 100644 (file)
@@ -395,4 +395,4 @@ M: f request-focus-on 2drop ;
 
 USE: vocabs.loader
 
-"prettyprint" "ui.gadgets.prettyprint" require-when
+{ "ui.gadgets" "prettyprint" } "ui.gadgets.prettyprint" require-when
index dbbfbcce6e2ba5488fa5c69d292752f350f9a74c..d860bf490ea403edc6095d15dfc3c9acf5bfaba9 100644 (file)
@@ -72,6 +72,6 @@ M: unix open-file [ open ] unix-system-call ;
 
 <<
 
-"debugger" "unix.debugger" require-when
+{ "unix" "debugger" } "unix.debugger" require-when
 
 >>
index cd470a451ab346f715ed166f750b9b8d0450d8ae..0f89ba0d9f062f5d478b953664217285906cf3bf 100644 (file)
@@ -185,4 +185,4 @@ SYNTAX: URL" lexer get skip-blank parse-string >url suffix! ;
 
 USE: vocabs.loader
 
-"prettyprint" "urls.prettyprint" require-when
+{ "urls" "prettyprint" } "urls.prettyprint" require-when
index 9d74ac49f894cb7cad0d1dae932e82e4db71be83..dc6a0604fbc0341425d23550a98bf07f5a2496d9 100644 (file)
@@ -96,4 +96,4 @@ SYNTAX: GUID: scan string>guid suffix! ;
 
 USE: vocabs.loader
 
-"prettyprint" "windows.com.prettyprint" require-when
+{ "windows.com" "prettyprint" } "windows.com.prettyprint" require-when
index e91c6a690973a63cf0d98833faab0cc6c3271f1b..67c94c88ead6b3777a2e388eed7cdf6de1a562ff 100644 (file)
@@ -33,4 +33,4 @@ SYMBOL: root
 : with-x ( display-string quot -- )
     [ init-x ] dip [ close-x ] [ ] cleanup ; inline
 
-"io.backend.unix" "x11.io.unix" require-when
+{ "x11" "io.backend.unix" } "x11.io.unix" require-when
index a58526faa36c7cfbff04b2abc68d6e204cf7ad80..e7e8714b294a050e6f7374b21eecac95c3bd2f65 100644 (file)
@@ -177,4 +177,4 @@ SYNTAX: [XML
 
 USE: vocabs.loader
 
-"inverse" "xml.syntax.inverse" require-when
+{ "xml.syntax" "inverse" } "xml.syntax.inverse" require-when
index 5b7ffafc8b9500fc4b5973fad873a727eb10080c..ca995a38e62fa69a522afde89b43a7112a2712b0 100644 (file)
@@ -31,3 +31,6 @@ IN: hash-sets.tests
 [ f ] [ HS{ 1 2 3 } HS{ 2 3 } set= ] unit-test
 
 [ HS{ 1 2 } HS{ 1 2 3 } ] [ HS{ 1 2 } clone dup clone [ 3 swap adjoin ] keep ] unit-test
+
+[ t ] [ HS{ } null? ] unit-test
+[ f ] [ HS{ 1 } null? ] unit-test
index 3ca2cce93ca195dc5cf1019a8ee03c6897a8bad8..ac198a2ca2023a3ce4813a991fc125b3c7f9e12d 100644 (file)
@@ -18,6 +18,7 @@ M: hash-set delete table>> delete-at ; inline
 M: hash-set members table>> keys ; inline
 M: hash-set set-like drop dup hash-set? [ members <hash-set> ] unless ;
 M: hash-set clone table>> clone hash-set boa ;
+M: hash-set null? table>> assoc-empty? ;
 
 M: sequence fast-set <hash-set> ;
 M: f fast-set drop H{ } clone hash-set boa ;
index 5bde8a1febce4e5a09f3e661ba22fce2f3e0b217..5ae96417349cea718d5660ad704efa89e6eba197 100644 (file)
@@ -23,6 +23,8 @@ ARTICLE: "set-operations" "Operations on sets"
     adjoin
     delete
 }
+"To test if a set is the empty set:"
+{ $subsections null? }
 "Basic mathematical operations, which any type of set may override for efficiency:"
 { $subsections
     diff
@@ -178,3 +180,7 @@ HELP: within
 HELP: without
 { $values { "seq" sequence } { "set" set } { "subseq" sequence } }
 { $description "Returns the subsequence of the given sequence consisting of things that are not members of the set. This may contain duplicates, if the sequence has duplicates." } ;
+
+HELP: null?
+{ $values { "set" set } { "?" "a boolean" } }
+{ $description "Tests whether the given set is empty. This outputs " { $snippet "t" } " when given a null set of any type." } ;
index e4bc762512285ec1572ffb0d410b0918da89f411..9a48acc4cfc0ef64bb85720f2e3d98a69fc2288a 100644 (file)
@@ -61,3 +61,6 @@ IN: sets.tests
 [ f ] [ HS{ 1 2 3 1 2 1 } duplicates ] unit-test
 
 [ H{ { 3 HS{ 1 2 } } } ] [ H{ } clone 1 3 pick adjoin-at 2 3 pick adjoin-at ] unit-test
+
+[ t ] [ f null? ] unit-test
+[ f ] [ { 4 } null? ] unit-test
index d279f036d4fcc8afc3719d0ab95a2fd609f21237..9c1870aa2e57634feee580262f0813bf65771b93 100644 (file)
@@ -21,10 +21,13 @@ GENERIC: subset? ( set1 set2 -- ? )
 GENERIC: set= ( set1 set2 -- ? )
 GENERIC: duplicates ( set -- seq )
 GENERIC: all-unique? ( set -- ? )
+GENERIC: null? ( set -- ? )
 
 ! Defaults for some methods.
 ! Override them for efficiency
 
+M: set null? members null? ; inline
+
 M: set set-like drop ; inline
 
 M: set union
@@ -91,6 +94,9 @@ M: sequence set-like
 
 M: sequence members
     [ pruned ] keep like ;
+  
+M: sequence null?
+    empty? ; inline
 
 : combine ( sets -- set )
     [ f ]
index d5a6be53359b0867660beca3966508fb226d763b..423abbc277b4d6159497fdea711aba54f888eaaa 100755 (executable)
@@ -114,10 +114,10 @@ HELP: require
 { $notes "To unconditionally reload a vocabulary, use " { $link reload } ". To reload changed source files only, use the words in " { $link "vocabs.refresh" } "." } ;
 
 HELP: require-when
-{ $values { "if" "a vocabulary specifier" } { "then" "a vocabulary specifier" } }
-{ $description "Loads the " { $snippet "then" } " vocabulary if it is not loaded and the " { $snippet "if" } " vocabulary is. If the " { $snippet "if" } " vocabulary is not loaded now, but it is later, then the " { $snippet "then" } " vocabulary will be loaded along with it at that time." }
-{ $notes "This is used to express a joint dependency of vocabularies. If vocabularies " { $snippet "a" } " and " { $snippet "b" } " use code in vocabulary " { $snippet "c" } " to interact, then the following line can be placed in " { $snippet "a" } " in order express the dependency."
-{ $code "\"b\" \"c\" require-when" } } ;
+{ $values { "if" "a sequence of vocabulary specifiers" } { "then" "a vocabulary specifier" } }
+{ $description "Loads the " { $snippet "then" } " vocabulary if it is not loaded and all of the " { $snippet "if" } " vocabulary is. If some of the " { $snippet "if" } " vocabularies are not loaded now, but they are later, then the " { $snippet "then" } " vocabulary will be loaded along with the final one." }
+{ $notes "This is used to express a joint dependency of vocabularies. If vocabularies " { $snippet "a" } " and " { $snippet "b" } " use code in vocabulary " { $snippet "c" } " to interact, then the following line, which can be placed in " { $snippet "a" } " or " { $snippet "b" } ", expresses the dependency."
+{ $code "{ \"a\" \"b\" } \"c\" require-when" } } ;
 
 HELP: run
 { $values { "vocab" "a vocabulary specifier" } }
index 59fe06e6fd2b1a6bd27cd6082350f1cd8f12ef74..2945736f3cf7033ddedabe3e5f0ef3bff8dcfe9f 100644 (file)
@@ -66,10 +66,19 @@ DEFER: require
 
 <PRIVATE
 
-: load-conditional-requires ( vocab-name -- )
-    conditional-requires get
-    [ at [ require ] 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 ] curry when
+        ] assoc-each
+    ] when ;
 
 : load-source ( vocab -- )
     dup check-vocab-hook get call( vocab -- )
@@ -79,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 -- )
@@ -97,10 +106,12 @@ PRIVATE>
     load-vocab drop ;
 
 : require-when ( if then -- )
-    over vocab
-    [ nip require ]
-    [ swap conditional-requires get [ swap suffix ] change-at ]
-    if ;
+    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 d6d3bd8a7a7fee84928aede34f8c4f604231f62f..cd35d83e4f2f04faf6afad11f304fbafc7ded364 100644 (file)
@@ -1,4 +1,5 @@
 USE: vocabs.loader
 IN: vocabs.loader.test.m
 
-"vocabs.loader.test.o" "vocabs.loader.test.n" require-when
+{ "vocabs.loader.test.o" "vocabs.loader.test.m" }
+"vocabs.loader.test.n" require-when
index e48d6c3031317965d7c24f9dd80acd5d0c680604..38881673e9877986398c0ca50684a627bca83a78 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007, 2009 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors assocs strings kernel sorting namespaces
-sequences definitions sets ;
+sequences definitions sets combinators ;
 IN: vocabs
 
 SYMBOL: dictionary
@@ -83,9 +83,6 @@ ERROR: bad-vocab-name name ;
 : check-vocab-name ( name -- name )
     dup string? [ bad-vocab-name ] unless ;
 
-SYMBOL: conditional-requires
-conditional-requires [ H{ } clone ] initialize
-
 : create-vocab ( name -- vocab )
     check-vocab-name
     dictionary get [ <vocab> ] cache
index ffe5acd879cf600c2430001f822f29a2d0ae840c..312d7dbd1c965c562d307252bc8dad0307585401 100644 (file)
@@ -112,6 +112,6 @@ PRIVATE>
 M: game-loop dispose
     stop-loop ;
 
-USING: vocabs vocabs.loader ;
+USE: vocabs.loader
 
-"prettyprint" "game.loop.prettyprint" require-when
+{ "game.loop" "prettyprint" } "game.loop.prettyprint" require-when
index 974f2f8070e2e17dbd88bc89055247bf4b391aae..8a2931e4316e559a9d10bff25b01504ff9760d43 100755 (executable)
@@ -632,4 +632,4 @@ M: program-instance dispose
     [ world>> ] [ program>> instances>> ] [ ] tri ?delete-at
     reset-memos ;
 
-"prettyprint" "gpu.shaders.prettyprint" require-when
+{ "gpu.shaders" "prettyprint" } "gpu.shaders.prettyprint" require-when