From 46ad6b63e694d9d7c34d8a19a33e969742248363 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Tue, 8 Jun 2010 18:05:28 -0500 Subject: [PATCH 01/40] Add start-game word, make foo-attributes words when GAME: foo is defined, don't lose the loop object after the game is over --- extra/game/worlds/worlds.factor | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/extra/game/worlds/worlds.factor b/extra/game/worlds/worlds.factor index f8b3ae8587..8e51563b62 100644 --- a/extra/game/worlds/worlds.factor +++ b/extra/game/worlds/worlds.factor @@ -1,7 +1,8 @@ ! (c)2009 Joe Groff bsd license -USING: accessors combinators fry game.input game.loop generic kernel math -parser sequences ui ui.gadgets ui.gadgets.worlds ui.gestures threads -words audio.engine destructors ; +USING: accessors audio.engine combinators destructors fry +game.input game.loop generic kernel math parser sequences +threads ui ui.gadgets ui.gadgets.worlds ui.gestures words +words.constant ; IN: game.worlds TUPLE: game-world < world @@ -48,7 +49,7 @@ M: game-world begin-world [ >>game-loop begin-game-world ] keep start-loop ; M: game-world end-world - [ [ stop-loop ] when* f ] change-game-loop + dup game-loop>> [ stop-loop ] when* [ end-game-world ] [ audio-engine>> [ dispose ] when* ] [ use-game-input?>> [ close-game-input ] when ] tri ; @@ -70,8 +71,15 @@ M: game-world apply-world-attributes [ call-next-method ] } cleave ; +: start-game ( attributes -- game-world ) + f swap open-window* ; + +: define-attributes-word ( word tuple -- ) + [ name>> "-attributes" append create-in ] dip define-constant ; + SYNTAX: GAME: CREATE game-attributes parse-main-window-attributes + 2dup define-attributes-word parse-definition define-main-window ; From 445b43d924030dfc685b60112573a9e1ec3b5c85 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Tue, 8 Jun 2010 18:08:43 -0500 Subject: [PATCH 02/40] Use benchmark.struct vocab to record tick/draw timings in game loop --- extra/game/loop/loop-docs.factor | 13 ++---- extra/game/loop/loop.factor | 71 +++++++++++++++++++------------- extra/terrain/terrain.factor | 4 +- 3 files changed, 48 insertions(+), 40 deletions(-) diff --git a/extra/game/loop/loop-docs.factor b/extra/game/loop/loop-docs.factor index 1605c45284..6dbef30442 100644 --- a/extra/game/loop/loop-docs.factor +++ b/extra/game/loop/loop-docs.factor @@ -31,16 +31,16 @@ HELP: benchmark-frames-per-second { "loop" game-loop } { "n" float } } -{ $description "Returns the average number of times per second the game loop has called " { $link draw* } " on its delegate since the game loop was started with " { $link start-loop } " or since the benchmark counters have been reset with " { $link reset-loop-benchmark } "." } ; +{ $description "Returns the average number of times per second the game loop has called " { $link draw* } " on its delegate since the game loop was started with " { $link start-loop } "." } ; HELP: benchmark-ticks-per-second { $values { "loop" game-loop } { "n" float } } -{ $description "Returns the average number of times per second the game loop has called " { $link tick* } " on its tick delegate since the game loop was started with " { $link start-loop } " or since the benchmark counters have been reset with " { $link reset-loop-benchmark } "." } ; +{ $description "Returns the average number of times per second the game loop has called " { $link tick* } " on its tick delegate since the game loop was started." } ; -{ reset-loop-benchmark benchmark-frames-per-second benchmark-ticks-per-second } related-words +{ benchmark-frames-per-second benchmark-ticks-per-second } related-words HELP: draw* { $values @@ -59,12 +59,6 @@ HELP: game-loop-error } { $description "If an uncaught error is thrown from inside a game loop delegate's " { $link tick* } " or " { $link draw* } ", the game loop will catch the error, stop the game loop, and rethrow an error of this class." } ; -HELP: reset-loop-benchmark -{ $values - { "loop" game-loop } -} -{ $description "Resets the benchmark counters on a " { $link game-loop } ". Subsequent calls to " { $link benchmark-frames-per-second } " and " { $link benchmark-ticks-per-second } " will measure their values from the point " { $snippet "reset-loop-benchmark" } " was called." } ; - HELP: start-loop { $values { "loop" game-loop } @@ -111,7 +105,6 @@ ARTICLE: "game.loop" "Game loops" } "The game loop maintains performance counters:" { $subsections - reset-loop-benchmark benchmark-frames-per-second benchmark-ticks-per-second } diff --git a/extra/game/loop/loop.factor b/extra/game/loop/loop.factor index c4c190355b..a26a52226e 100644 --- a/extra/game/loop/loop.factor +++ b/extra/game/loop/loop.factor @@ -1,6 +1,9 @@ ! (c)2009 Joe Groff bsd license -USING: accessors alarms calendar continuations destructors fry -kernel math math.order namespaces system ui ui.gadgets.worlds ; +USING: accessors alarms alien.c-types calendar classes.struct +continuations destructors fry kernel math math.order memory +namespaces sequences specialized-vectors system +tools.memory ui ui.gadgets.worlds vm vocabs.loader arrays +benchmark.struct ; IN: game.loop TUPLE: game-loop @@ -9,12 +12,23 @@ TUPLE: game-loop draw-delegate { last-tick integer } { running? boolean } - { tick-number integer } - { frame-number integer } - { benchmark-time integer } - { benchmark-tick-number integer } - { benchmark-frame-number integer } - alarm ; + { tick# integer } + { frame# integer } + alarm + benchmark-data ; + +STRUCT: game-loop-benchmark + { benchmark-data-pair benchmark-data-pair } + { tick# ulonglong } + { frame# ulonglong } ; + +SPECIALIZED-VECTOR: game-loop-benchmark + +: <game-loop-benchmark> ( benchmark-data-pair tick frame -- obj ) + \ game-loop-benchmark <struct> + swap >>frame# + swap >>tick# + swap >>benchmark-data-pair ; inline GENERIC: tick* ( delegate -- ) GENERIC: draw* ( tick-slice delegate -- ) @@ -44,16 +58,25 @@ TUPLE: game-loop-error game-loop error ; <PRIVATE +: record-benchmarking ( benchark-data-pair loop -- ) + [ tick#>> ] + [ frame#>> <game-loop-benchmark> ] + [ benchmark-data>> ] tri push ; + : redraw ( loop -- ) - [ 1 + ] change-frame-number - [ tick-slice ] [ draw-delegate>> ] bi draw* ; + [ 1 + ] change-frame# + [ + [ tick-slice ] [ draw-delegate>> ] bi [ draw* ] with-benchmarking + ] keep record-benchmarking ; : tick ( loop -- ) - tick-delegate>> tick* ; + [ + [ tick-delegate>> tick* ] with-benchmarking + ] keep record-benchmarking ; : increment-tick ( loop -- ) - [ 1 + ] change-tick-number - dup tick-interval-nanos>> [ + ] curry change-last-tick + [ 1 + ] change-tick# + dup tick-interval-nanos>> '[ _ + ] change-last-tick drop ; : ?tick ( loop count -- ) @@ -63,20 +86,13 @@ TUPLE: game-loop-error game-loop error ; [ 2drop ] if ] if-zero ; -: benchmark-nanos ( loop -- nanos ) - nano-count swap benchmark-time>> - ; - PRIVATE> -: reset-loop-benchmark ( loop -- loop ) - nano-count >>benchmark-time - dup tick-number>> >>benchmark-tick-number - dup frame-number>> >>benchmark-frame-number ; +! : benchmark-ticks-per-second ( loop -- n ) + ! [ tick#>> ] [ benchmark-tick#>> - ] [ benchmark-nanos ] tri /f ; -: benchmark-ticks-per-second ( loop -- n ) - [ tick-number>> ] [ benchmark-tick-number>> - ] [ benchmark-nanos ] tri /f ; -: benchmark-frames-per-second ( loop -- n ) - [ frame-number>> ] [ benchmark-frame-number>> - ] [ benchmark-nanos ] tri /f ; +! : benchmark-frames-per-second ( loop -- n ) + ! [ frame#>> ] [ benchmark-frame#>> - ] [ benchmark-nanos ] tri /f ; : (game-tick) ( loop -- ) dup running?>> @@ -91,7 +107,6 @@ PRIVATE> : start-loop ( loop -- ) nano-count >>last-tick t >>running? - reset-loop-benchmark [ [ '[ _ game-tick ] f ] [ tick-interval-nanos>> nanoseconds ] bi @@ -103,7 +118,8 @@ PRIVATE> alarm>> stop-alarm ; : <game-loop*> ( tick-interval-nanos tick-delegate draw-delegate -- loop ) - nano-count f 0 0 nano-count 0 0 f + nano-count f 0 0 f + game-loop-benchmark-vector{ } clone game-loop boa ; : <game-loop> ( tick-interval-nanos delegate -- loop ) @@ -112,6 +128,5 @@ PRIVATE> M: game-loop dispose stop-loop ; -USE: vocabs.loader - { "game.loop" "prettyprint" } "game.loop.prettyprint" require-when + diff --git a/extra/terrain/terrain.factor b/extra/terrain/terrain.factor index e1051cf21b..5a65851037 100644 --- a/extra/terrain/terrain.factor +++ b/extra/terrain/terrain.factor @@ -229,9 +229,9 @@ M: terrain-world tick-game-world GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP_TO_EDGE glTexParameteri ; : sky-gradient ( world -- t ) - game-loop>> tick-number>> SKY-PERIOD mod SKY-PERIOD /f ; + game-loop>> tick#>> SKY-PERIOD mod SKY-PERIOD /f ; : sky-theta ( world -- theta ) - game-loop>> tick-number>> SKY-SPEED * ; + game-loop>> tick#>> SKY-SPEED * ; M: terrain-world begin-game-world "2.0" { "GL_ARB_vertex_buffer_object" "GL_ARB_shader_objects" } From 6d63be4168672342eee67b6b919cabbb7dc5525c Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Thu, 10 Jun 2010 15:37:53 -0500 Subject: [PATCH 03/40] Check in benchmark.struct vocab --- extra/benchmark/struct/authors.txt | 1 + extra/benchmark/struct/struct.factor | 31 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 extra/benchmark/struct/authors.txt create mode 100644 extra/benchmark/struct/struct.factor diff --git a/extra/benchmark/struct/authors.txt b/extra/benchmark/struct/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/benchmark/struct/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/benchmark/struct/struct.factor b/extra/benchmark/struct/struct.factor new file mode 100644 index 0000000000..addc40ddba --- /dev/null +++ b/extra/benchmark/struct/struct.factor @@ -0,0 +1,31 @@ +! Copyright (C) 2010 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors alien.c-types classes.struct kernel memory +system vm ; +IN: benchmark.struct + +STRUCT: benchmark-data + { time ulonglong } + { data-room data-heap-room } + { code-room mark-sweep-sizes } ; + +STRUCT: benchmark-data-pair + { start benchmark-data } + { stop benchmark-data } ; + +: <benchmark-data> ( -- benchmark-data ) + \ benchmark-data <struct> + nano-count >>time + code-room >>code-room + data-room >>data-room ; inline + +: <benchmark-data-pair> ( start stop -- benchmark-data-pair ) + \ benchmark-data-pair <struct> + swap >>stop + swap >>start ; inline + +: with-benchmarking ( ... quot -- ... benchmark-data-pair ) + <benchmark-data> + [ call ] dip + <benchmark-data> <benchmark-data-pair> ; inline + From 2e867e49a544ad82e0cbc0d3be4a249b4b7960d3 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Thu, 10 Jun 2010 16:06:38 -0500 Subject: [PATCH 04/40] Add a remove-wm-handler word to windows ui backend --- basis/ui/backend/windows/windows.factor | 3 +++ 1 file changed, 3 insertions(+) diff --git a/basis/ui/backend/windows/windows.factor b/basis/ui/backend/windows/windows.factor index 0e0de67440..06ea870196 100755 --- a/basis/ui/backend/windows/windows.factor +++ b/basis/ui/backend/windows/windows.factor @@ -569,6 +569,9 @@ H{ } clone wm-handlers set-global [ [ execute( -- wm ) add-wm-handler ] with each ] [ wm-handlers get-global set-at ] if ; +: remove-wm-handler ( wm -- ) + wm-handlers get-global delete-at ; + [ handle-wm-close 0 ] WM_CLOSE add-wm-handler [ 4dup handle-wm-paint DefWindowProc ] WM_PAINT add-wm-handler From a6f0abb9a2c7d380a8ce2abc7d9fc56d2c4f3ac7 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Thu, 10 Jun 2010 16:39:13 -0500 Subject: [PATCH 05/40] Rename alarms -> timers --- basis/alarms/alarms-docs.factor | 74 ----------- basis/alarms/alarms.factor | 118 +---------------- basis/alarms/authors.txt | 0 basis/alarms/summary.txt | 1 - .../concurrency/conditions/conditions.factor | 8 +- basis/furnace/alloy/alloy.factor | 2 +- basis/furnace/sessions/sessions.factor | 2 +- basis/io/timeouts/timeouts.factor | 6 +- basis/logging/insomniac/insomniac.factor | 2 +- basis/models/delay/delay.factor | 10 +- basis/timers/authors.txt | 1 + basis/timers/summary.txt | 1 + basis/timers/timers-docs.factor | 74 +++++++++++ .../timers-tests.factor} | 22 ++-- basis/timers/timers.factor | 119 ++++++++++++++++++ basis/tools/deploy/config/config-docs.factor | 2 +- basis/tools/deploy/shaker/shaker.factor | 2 +- basis/tools/scaffold/scaffold.factor | 4 +- basis/ui/gadgets/editors/editors.factor | 14 +-- basis/ui/gestures/gestures.factor | 8 +- extra/audio/engine/engine.factor | 10 +- extra/audio/engine/test/test.factor | 6 +- .../input/demos/joysticks/joysticks.factor | 10 +- .../game/input/demos/key-caps/key-caps.factor | 8 +- extra/game/loop/loop.factor | 10 +- extra/irc/gitbot/gitbot.factor | 2 +- extra/key-logger/key-logger.factor | 4 +- extra/site-watcher/site-watcher.factor | 4 +- extra/tetris/tetris.factor | 11 +- extra/webapps/planet/planet.factor | 2 +- 30 files changed, 273 insertions(+), 264 deletions(-) delete mode 100644 basis/alarms/alarms-docs.factor mode change 100755 => 100644 basis/alarms/authors.txt delete mode 100644 basis/alarms/summary.txt create mode 100755 basis/timers/authors.txt create mode 100644 basis/timers/summary.txt create mode 100644 basis/timers/timers-docs.factor rename basis/{alarms/alarms-tests.factor => timers/timers-tests.factor} (66%) create mode 100644 basis/timers/timers.factor diff --git a/basis/alarms/alarms-docs.factor b/basis/alarms/alarms-docs.factor deleted file mode 100644 index 3b70b43a28..0000000000 --- a/basis/alarms/alarms-docs.factor +++ /dev/null @@ -1,74 +0,0 @@ -USING: help.markup help.syntax calendar quotations system ; -IN: alarms - -HELP: alarm -{ $class-description "An alarm. Can be passed to " { $link stop-alarm } "." } ; - -HELP: start-alarm -{ $values { "alarm" alarm } } -{ $description "Starts an alarm." } ; - -HELP: restart-alarm -{ $values { "alarm" alarm } } -{ $description "Starts or restarts an alarm. Restarting an alarm causes the a sleep of initial delay nanoseconds before looping. An alarm's parameters may be modified and restarted with this word." } ; - -HELP: stop-alarm -{ $values { "alarm" alarm } } -{ $description "Prevents an alarm from calling its quotation again. Has no effect on alarms that are not currently running." } ; - -HELP: every -{ $values - { "quot" quotation } { "interval-duration" duration } - { "alarm" alarm } } -{ $description "Creates an alarm that calls the quotation repeatedly, using " { $snippet "duration" } " as the frequency. The first call of " { $snippet "quot" } " will happen immediately. If the quotation throws an exception, the alarm will stop." } -{ $examples - { $unchecked-example - "USING: alarms io calendar ;" - """[ "Hi Buddy." print flush ] 10 seconds every drop""" - "" - } -} ; - -HELP: later -{ $values { "quot" quotation } { "delay-duration" duration } { "alarm" alarm } } -{ $description "Sleeps for " { $snippet "duration" } " and then calls a " { $snippet "quot" } ". The user may cancel the alarm before " { $snippet "quot" } " runs. This alarm is not repeated." } -{ $examples - { $unchecked-example - "USING: alarms io calendar ;" - """[ "Break's over!" print flush ] 15 minutes later drop""" - "" - } -} ; - -HELP: delayed-every -{ $values - { "quot" quotation } { "duration" duration } - { "alarm" alarm } } -{ $description "Creates an alarm that calls " { $snippet "quot" } " repeatedly, waiting " { $snippet "duration" } " before calling " { $snippet "quot" } " the first time and then waiting " { $snippet "duration" } " between further calls. If the quotation throws an exception, the alarm will stop." } -{ $examples - { $unchecked-example - "USING: alarms io calendar ;" - """[ "Hi Buddy." print flush ] 10 seconds every drop""" - "" - } -} ; - -ARTICLE: "alarms" "Alarms" -"The " { $vocab-link "alarms" } " vocabulary provides a lightweight way to schedule one-time and recurring tasks. Alarms run in a single green thread per alarm and consist of a quotation, a delay duration, and an interval duration. After starting an alarm, the alarm thread sleeps for the delay duration and calls the quotation. Then it waits out the interval duration and calls the quotation again until something stops the alarm. If a recurring alarm's quotation would be scheduled to run again before the previous quotation has finished processing, the alarm will be run again immediately afterwards. This may result in the alarm falling behind indefinitely, in which case the it will run as often as possible while still allowing other green threads to run. Recurring alarms that execute 'on time' or 'catch up' will always be scheduled for an exact multiple of the interval from the original starting time to prevent the alarm from drifting over time. Alarms use " { $link nano-count } " as the timing primitive, so they will continue to work across system clock changes." $nl -"The alarm class:" -{ $subsections alarm } -"Create an alarm before starting it:" -{ $subsections <alarm> } -"Starting an alarm:" -{ $subsections start-alarm restart-alarm } -"Stopping an alarm:" -{ $subsections stop-alarm } - -"A recurring alarm without an initial delay:" -{ $subsections every } -"A one-time alarm with an initial delay:" -{ $subsections later } -"A recurring alarm with an initial delay:" -{ $subsections delayed-every } ; - -ABOUT: "alarms" diff --git a/basis/alarms/alarms.factor b/basis/alarms/alarms.factor index 92035a19c8..ddca921c78 100644 --- a/basis/alarms/alarms.factor +++ b/basis/alarms/alarms.factor @@ -1,119 +1,5 @@ -! Copyright (C) 2005, 2008 Slava Pestov, Doug Coleman. +! Copyright (C) 2010 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs calendar combinators.short-circuit fry -heaps init kernel math math.functions math.parser namespaces -quotations sequences system threads ; +USING: ; IN: alarms -TUPLE: alarm - { quot callable initial: [ ] } - start-nanos - delay-nanos - interval-nanos - iteration-start-nanos - quotation-running? - restart? - thread ; - -<PRIVATE - -GENERIC: >nanoseconds ( obj -- duration/f ) -M: f >nanoseconds ; -M: real >nanoseconds >integer ; -M: duration >nanoseconds duration>nanoseconds >integer ; - -: set-next-alarm-time ( alarm -- alarm ) - ! start + delay + ceiling((now - (start + delay)) / interval) * interval - nano-count - over start-nanos>> - - over delay-nanos>> [ - ] when* - over interval-nanos>> / ceiling - over interval-nanos>> * - over start-nanos>> + - over delay-nanos>> [ + ] when* - >>iteration-start-nanos ; - -: stop-alarm? ( alarm -- ? ) - { [ thread>> self eq? not ] [ restart?>> ] } 1|| ; - -DEFER: call-alarm-loop - -: loop-alarm ( alarm -- ) - nano-count over - [ iteration-start-nanos>> - ] [ interval-nanos>> ] bi < - [ set-next-alarm-time ] dip - [ dup iteration-start-nanos>> ] [ 0 ] if - 0 or sleep-until call-alarm-loop ; - -: maybe-loop-alarm ( alarm -- ) - dup { [ stop-alarm? ] [ interval-nanos>> not ] } 1|| - [ drop ] [ loop-alarm ] if ; - -: call-alarm-loop ( alarm -- ) - dup stop-alarm? [ - drop - ] [ - [ - [ t >>quotation-running? drop ] - [ quot>> call( -- ) ] - [ f >>quotation-running? drop ] tri - ] keep - maybe-loop-alarm - ] if ; - -: sleep-delay ( alarm -- ) - dup stop-alarm? [ - drop - ] [ - nano-count >>start-nanos - delay-nanos>> [ sleep ] when* - ] if ; - -: alarm-loop ( alarm -- ) - [ sleep-delay ] - [ nano-count >>iteration-start-nanos call-alarm-loop ] - [ dup restart?>> [ f >>restart? alarm-loop ] [ drop ] if ] tri ; - -PRIVATE> - -: <alarm> ( quot delay-duration/f interval-duration/f -- alarm ) - alarm new - swap >nanoseconds >>interval-nanos - swap >nanoseconds >>delay-nanos - swap >>quot ; inline - -: start-alarm ( alarm -- ) - [ - '[ _ alarm-loop ] "Alarm execution" spawn - ] keep thread<< ; - -: stop-alarm ( alarm -- ) - dup quotation-running?>> [ - f >>thread drop - ] [ - [ [ interrupt ] when* f ] change-thread drop - ] if ; - -: restart-alarm ( alarm -- ) - t >>restart? - dup quotation-running?>> [ - drop - ] [ - dup thread>> [ nip interrupt ] [ start-alarm ] if* - ] if ; - -<PRIVATE - -: (start-alarm) ( quot start-duration interval-duration -- alarm ) - <alarm> [ start-alarm ] keep ; - -PRIVATE> - -: every ( quot interval-duration -- alarm ) - [ f ] dip (start-alarm) ; - -: later ( quot delay-duration -- alarm ) - f (start-alarm) ; - -: delayed-every ( quot duration -- alarm ) - dup (start-alarm) ; diff --git a/basis/alarms/authors.txt b/basis/alarms/authors.txt old mode 100755 new mode 100644 diff --git a/basis/alarms/summary.txt b/basis/alarms/summary.txt deleted file mode 100644 index f6e12238fa..0000000000 --- a/basis/alarms/summary.txt +++ /dev/null @@ -1 +0,0 @@ -One-time and recurring events diff --git a/basis/concurrency/conditions/conditions.factor b/basis/concurrency/conditions/conditions.factor index 9353317f0b..7bd72ec826 100644 --- a/basis/concurrency/conditions/conditions.factor +++ b/basis/concurrency/conditions/conditions.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: deques threads kernel arrays sequences alarms fry ; +USING: deques threads kernel arrays sequences timers fry ; IN: concurrency.conditions : notify-1 ( deque -- ) @@ -9,8 +9,8 @@ IN: concurrency.conditions : notify-all ( deque -- ) [ resume-now ] slurp-deque ; inline -: queue-timeout ( queue timeout -- alarm ) - #! Add an alarm which removes the current thread from the +: queue-timeout ( queue timeout -- timer ) + #! Add an timer which removes the current thread from the #! queue, and resumes it, passing it a value of t. [ [ self swap push-front* ] keep '[ @@ -28,7 +28,7 @@ ERROR: wait-timeout ; : wait ( queue timeout status -- ) over [ [ queue-timeout ] dip suspend - [ wait-timeout ] [ stop-alarm ] if + [ wait-timeout ] [ stop-timer ] if ] [ [ drop queue ] dip suspend drop ] if ; inline diff --git a/basis/furnace/alloy/alloy.factor b/basis/furnace/alloy/alloy.factor index dc280c1e44..ef4270221f 100644 --- a/basis/furnace/alloy/alloy.factor +++ b/basis/furnace/alloy/alloy.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel sequences db.tuples alarms calendar db fry +USING: kernel sequences db.tuples timers calendar db fry furnace.db furnace.cache furnace.asides diff --git a/basis/furnace/sessions/sessions.factor b/basis/furnace/sessions/sessions.factor index 3eb7a11215..33de393d90 100644 --- a/basis/furnace/sessions/sessions.factor +++ b/basis/furnace/sessions/sessions.factor @@ -3,7 +3,7 @@ USING: assocs kernel math.intervals math.parser namespaces strings random accessors quotations hashtables sequences continuations fry calendar combinators combinators.short-circuit -destructors alarms io.sockets db db.tuples db.types +destructors io.sockets db db.tuples db.types http http.server http.server.dispatchers http.server.filters furnace.cache furnace.scopes furnace.utilities ; IN: furnace.sessions diff --git a/basis/io/timeouts/timeouts.factor b/basis/io/timeouts/timeouts.factor index 957ba30193..68110ded15 100644 --- a/basis/io/timeouts/timeouts.factor +++ b/basis/io/timeouts/timeouts.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Slava Pestov, Doug Coleman ! See http://factorcode.org/license.txt for BSD license. -USING: kernel calendar alarms io io.encodings accessors +USING: kernel calendar timers io io.encodings accessors namespaces fry io.streams.null ; IN: io.timeouts @@ -13,11 +13,11 @@ M: encoder set-timeout stream>> set-timeout ; GENERIC: cancel-operation ( obj -- ) -: queue-timeout ( obj timeout -- alarm ) +: queue-timeout ( obj timeout -- timer ) [ '[ _ cancel-operation ] ] dip later ; : with-timeout* ( obj timeout quot -- ) - 3dup drop queue-timeout [ nip call ] dip stop-alarm ; + 3dup drop queue-timeout [ nip call ] dip stop-timer ; inline : with-timeout ( obj quot -- ) diff --git a/basis/logging/insomniac/insomniac.factor b/basis/logging/insomniac/insomniac.factor index 72e37ef8af..2a0be6aa79 100644 --- a/basis/logging/insomniac/insomniac.factor +++ b/basis/logging/insomniac/insomniac.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: logging.analysis logging.server logging smtp kernel -io.files io.streams.string namespaces make alarms assocs +io.files io.streams.string namespaces make timers assocs io.encodings.utf8 accessors calendar sequences ; QUALIFIED: io.sockets IN: logging.insomniac diff --git a/basis/models/delay/delay.factor b/basis/models/delay/delay.factor index 8292bb9c04..d194d76e6d 100644 --- a/basis/models/delay/delay.factor +++ b/basis/models/delay/delay.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alarms fry kernel models ; +USING: accessors timers fry kernel models ; IN: models.delay -TUPLE: delay < model model timeout alarm ; +TUPLE: delay < model model timeout timer ; : update-delay-model ( delay -- ) [ model>> value>> ] keep set-model ; @@ -15,13 +15,13 @@ TUPLE: delay < model model timeout alarm ; [ add-dependency ] keep ; : stop-delay ( delay -- ) - alarm>> [ stop-alarm ] when* ; + timer>> [ stop-timer ] when* ; : start-delay ( delay -- ) dup - [ '[ _ f >>alarm update-delay-model ] ] [ timeout>> ] bi + [ '[ _ f >>timer update-delay-model ] ] [ timeout>> ] bi later - >>alarm drop ; + >>timer drop ; M: delay model-changed nip dup stop-delay start-delay ; diff --git a/basis/timers/authors.txt b/basis/timers/authors.txt new file mode 100755 index 0000000000..7c1b2f2279 --- /dev/null +++ b/basis/timers/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/basis/timers/summary.txt b/basis/timers/summary.txt new file mode 100644 index 0000000000..56260b6be3 --- /dev/null +++ b/basis/timers/summary.txt @@ -0,0 +1 @@ +One-time and recurring timers for relative time offsets diff --git a/basis/timers/timers-docs.factor b/basis/timers/timers-docs.factor new file mode 100644 index 0000000000..fb07c8a4cc --- /dev/null +++ b/basis/timers/timers-docs.factor @@ -0,0 +1,74 @@ +USING: help.markup help.syntax calendar quotations system ; +IN: timers + +HELP: timer +{ $class-description "A timer. Can be passed to " { $link stop-timer } "." } ; + +HELP: start-timer +{ $values { "timer" timer } } +{ $description "Starts a timer." } ; + +HELP: restart-timer +{ $values { "timer" timer } } +{ $description "Starts or restarts a timer. Restarting a timer causes the a sleep of initial delay nanoseconds before looping. An timer's parameters may be modified and restarted with this word." } ; + +HELP: stop-timer +{ $values { "timer" timer } } +{ $description "Prevents a timer from calling its quotation again. Has no effect on timers that are not currently running." } ; + +HELP: every +{ $values + { "quot" quotation } { "interval-duration" duration } + { "timer" timer } } +{ $description "Creates a timer that calls the quotation repeatedly, using " { $snippet "duration" } " as the frequency. The first call of " { $snippet "quot" } " will happen immediately. If the quotation throws an exception, the timer will stop." } +{ $examples + { $unchecked-example + "USING: timers io calendar ;" + """[ "Hi Buddy." print flush ] 10 seconds every drop""" + "" + } +} ; + +HELP: later +{ $values { "quot" quotation } { "delay-duration" duration } { "timer" timer } } +{ $description "Sleeps for " { $snippet "duration" } " and then calls a " { $snippet "quot" } ". The user may cancel the timer before " { $snippet "quot" } " runs. This timer is not repeated." } +{ $examples + { $unchecked-example + "USING: timers io calendar ;" + """[ "Break's over!" print flush ] 15 minutes later drop""" + "" + } +} ; + +HELP: delayed-every +{ $values + { "quot" quotation } { "duration" duration } + { "timer" timer } } +{ $description "Creates a timer that calls " { $snippet "quot" } " repeatedly, waiting " { $snippet "duration" } " before calling " { $snippet "quot" } " the first time and then waiting " { $snippet "duration" } " between further calls. If the quotation throws an exception, the timer will stop." } +{ $examples + { $unchecked-example + "USING: timers io calendar ;" + """[ "Hi Buddy." print flush ] 10 seconds every drop""" + "" + } +} ; + +ARTICLE: "timers" "Alarms" +"The " { $vocab-link "timers" } " vocabulary provides a lightweight way to schedule one-time and recurring tasks. Alarms run in a single green thread per timer and consist of a quotation, a delay duration, and an interval duration. After starting a timer, the timer thread sleeps for the delay duration and calls the quotation. Then it waits out the interval duration and calls the quotation again until something stops the timer. If a recurring timer's quotation would be scheduled to run again before the previous quotation has finished processing, the timer will be run again immediately afterwards. This may result in the timer falling behind indefinitely, in which case the it will run as often as possible while still allowing other green threads to run. Recurring timers that execute 'on time' or 'catch up' will always be scheduled for an exact multiple of the interval from the original starting time to prevent the timer from drifting over time. Alarms use " { $link nano-count } " as the timing primitive, so they will continue to work across system clock changes." $nl +"The timer class:" +{ $subsections timer } +"Create a timer before starting it:" +{ $subsections <timer> } +"Starting a timer:" +{ $subsections start-timer restart-timer } +"Stopping a timer:" +{ $subsections stop-timer } + +"A recurring timer without an initial delay:" +{ $subsections every } +"A one-time timer with an initial delay:" +{ $subsections later } +"A recurring timer with an initial delay:" +{ $subsections delayed-every } ; + +ABOUT: "timers" diff --git a/basis/alarms/alarms-tests.factor b/basis/timers/timers-tests.factor similarity index 66% rename from basis/alarms/alarms-tests.factor rename to basis/timers/timers-tests.factor index ed1ab632ae..82274aff45 100644 --- a/basis/alarms/alarms-tests.factor +++ b/basis/timers/timers-tests.factor @@ -1,12 +1,12 @@ -USING: alarms alarms.private calendar concurrency.count-downs +USING: timers timers.private calendar concurrency.count-downs concurrency.promises fry kernel math math.order sequences threads tools.test tools.time ; -IN: alarms.tests +IN: timers.tests [ ] [ 1 <count-down> { f } clone 2dup - [ first stop-alarm count-down ] 2curry 1 seconds later + [ first stop-timer count-down ] 2curry 1 seconds later swap set-first await ] unit-test @@ -28,20 +28,20 @@ IN: alarms.tests { 3 } dup '[ 4 _ set-first ] 2 seconds later 1/2 seconds sleep - stop-alarm + stop-timer ] unit-test [ { 1 } ] [ { 0 } dup '[ 0 _ [ 1 + ] change-nth ] 3 seconds later - [ stop-alarm ] [ start-alarm ] bi + [ stop-timer ] [ start-timer ] bi 4 seconds sleep ] unit-test [ { 0 } ] [ { 0 } dup '[ 3 seconds sleep 1 _ set-first ] 1 seconds later - 2 seconds sleep stop-alarm + 2 seconds sleep stop-timer 1/2 seconds sleep ] unit-test @@ -49,19 +49,19 @@ IN: alarms.tests { 0 } dup '[ 1 _ set-first ] 300 milliseconds later 150 milliseconds sleep - [ restart-alarm ] [ 200 milliseconds sleep stop-alarm ] bi + [ restart-timer ] [ 200 milliseconds sleep stop-timer ] bi ] unit-test [ { 1 } ] [ { 0 } dup '[ 0 _ [ 1 + ] change-nth ] 200 milliseconds later - 100 milliseconds sleep restart-alarm 300 milliseconds sleep + 100 milliseconds sleep restart-timer 300 milliseconds sleep ] unit-test [ { 4 } ] [ { 0 } dup '[ 0 _ [ 1 + ] change-nth ] 300 milliseconds 300 milliseconds - <alarm> dup start-alarm - 700 milliseconds sleep dup restart-alarm - 700 milliseconds sleep stop-alarm 500 milliseconds sleep + <timer> dup start-timer + 700 milliseconds sleep dup restart-timer + 700 milliseconds sleep stop-timer 500 milliseconds sleep ] unit-test diff --git a/basis/timers/timers.factor b/basis/timers/timers.factor new file mode 100644 index 0000000000..ab6b4d63fb --- /dev/null +++ b/basis/timers/timers.factor @@ -0,0 +1,119 @@ +! Copyright (C) 2005, 2008 Slava Pestov, Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors assocs calendar combinators.short-circuit fry +heaps init kernel math math.functions math.parser namespaces +quotations sequences system threads ; +IN: timers + +TUPLE: timer + { quot callable initial: [ ] } + start-nanos + delay-nanos + interval-nanos + iteration-start-nanos + quotation-running? + restart? + thread ; + +<PRIVATE + +GENERIC: >nanoseconds ( obj -- duration/f ) +M: f >nanoseconds ; +M: real >nanoseconds >integer ; +M: duration >nanoseconds duration>nanoseconds >integer ; + +: set-next-timer-time ( timer -- timer ) + ! start + delay + ceiling((now - (start + delay)) / interval) * interval + nano-count + over start-nanos>> - + over delay-nanos>> [ - ] when* + over interval-nanos>> / ceiling + over interval-nanos>> * + over start-nanos>> + + over delay-nanos>> [ + ] when* + >>iteration-start-nanos ; + +: stop-timer? ( timer -- ? ) + { [ thread>> self eq? not ] [ restart?>> ] } 1|| ; + +DEFER: call-timer-loop + +: loop-timer ( timer -- ) + nano-count over + [ iteration-start-nanos>> - ] [ interval-nanos>> ] bi < + [ set-next-timer-time ] dip + [ dup iteration-start-nanos>> ] [ 0 ] if + 0 or sleep-until call-timer-loop ; + +: maybe-loop-timer ( timer -- ) + dup { [ stop-timer? ] [ interval-nanos>> not ] } 1|| + [ drop ] [ loop-timer ] if ; + +: call-timer-loop ( timer -- ) + dup stop-timer? [ + drop + ] [ + [ + [ t >>quotation-running? drop ] + [ quot>> call( -- ) ] + [ f >>quotation-running? drop ] tri + ] keep + maybe-loop-timer + ] if ; + +: sleep-delay ( timer -- ) + dup stop-timer? [ + drop + ] [ + nano-count >>start-nanos + delay-nanos>> [ sleep ] when* + ] if ; + +: timer-loop ( timer -- ) + [ sleep-delay ] + [ nano-count >>iteration-start-nanos call-timer-loop ] + [ dup restart?>> [ f >>restart? timer-loop ] [ drop ] if ] tri ; + +PRIVATE> + +: <timer> ( quot delay-duration/f interval-duration/f -- timer ) + timer new + swap >nanoseconds >>interval-nanos + swap >nanoseconds >>delay-nanos + swap >>quot ; inline + +: start-timer ( timer -- ) + [ + '[ _ timer-loop ] "Alarm execution" spawn + ] keep thread<< ; + +: stop-timer ( timer -- ) + dup quotation-running?>> [ + f >>thread drop + ] [ + [ [ interrupt ] when* f ] change-thread drop + ] if ; + +: restart-timer ( timer -- ) + t >>restart? + dup quotation-running?>> [ + drop + ] [ + dup thread>> [ nip interrupt ] [ start-timer ] if* + ] if ; + +<PRIVATE + +: (start-timer) ( quot start-duration interval-duration -- timer ) + <timer> [ start-timer ] keep ; + +PRIVATE> + +: every ( quot interval-duration -- timer ) + [ f ] dip (start-timer) ; + +: later ( quot delay-duration -- timer ) + f (start-timer) ; + +: delayed-every ( quot duration -- timer ) + dup (start-timer) ; diff --git a/basis/tools/deploy/config/config-docs.factor b/basis/tools/deploy/config/config-docs.factor index 740abb0feb..4ee9869f76 100644 --- a/basis/tools/deploy/config/config-docs.factor +++ b/basis/tools/deploy/config/config-docs.factor @@ -64,7 +64,7 @@ $nl HELP: deploy-threads? { $description "Deploy flag. If set, thread support will be included in the final image." $nl -"On by default. Most programs depend on libraries which use threads even if they don't use threads directly; for example, alarms, non-blocking I/O, and the UI are built on top of threads. If after testing your program still works without threads, you can disable this feature to save some space." } ; +"On by default. Most programs depend on libraries which use threads even if they don't use threads directly; for example, timers, non-blocking I/O, and the UI are built on top of threads. If after testing your program still works without threads, you can disable this feature to save some space." } ; HELP: deploy-ui? { $description "Deploy flag. If set, the Factor UI will be included in the deployed image." diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index 44291a96cc..b435f5c8e7 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -317,7 +317,7 @@ IN: tools.deploy.shaker strip-io? [ io-backend , ] when { } { - "alarms" + "timers" "tools" "io.launcher" "random" diff --git a/basis/tools/scaffold/scaffold.factor b/basis/tools/scaffold/scaffold.factor index 8fd3e53e19..e995876f26 100644 --- a/basis/tools/scaffold/scaffold.factor +++ b/basis/tools/scaffold/scaffold.factor @@ -5,7 +5,7 @@ io.encodings.utf8 hashtables kernel namespaces sequences vocabs.loader vocabs.metadata io combinators calendar accessors math.parser io.streams.string ui.tools.operations quotations strings arrays prettyprint words vocabs sorting sets classes -math alien urls splitting ascii combinators.short-circuit alarms +math alien urls splitting ascii combinators.short-circuit timers words.symbol system summary ; IN: tools.scaffold @@ -128,7 +128,7 @@ M: bad-developer-name summary { "ch" "a character" } { "word" word } { "array" array } - { "alarm" alarm } + { "timers" timer } { "duration" duration } { "path" "a pathname string" } { "vocab" "a vocabulary specifier" } diff --git a/basis/ui/gadgets/editors/editors.factor b/basis/ui/gadgets/editors/editors.factor index 4777e42abc..d50405809f 100644 --- a/basis/ui/gadgets/editors/editors.factor +++ b/basis/ui/gadgets/editors/editors.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2006, 2009 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alarms arrays assocs calendar colors.constants +USING: accessors timers arrays assocs calendar colors.constants combinators combinators.short-circuit documents documents.elements fry grouping kernel locals make math math.functions math.order math.ranges math.rectangles @@ -15,7 +15,7 @@ IN: ui.gadgets.editors TUPLE: editor < line-gadget caret-color caret mark -focused? blink blink-alarm ; +focused? blink blink-timer ; <PRIVATE @@ -60,11 +60,11 @@ SYMBOL: blink-interval 750 milliseconds blink-interval set-global : stop-blinking ( editor -- ) - blink-alarm>> [ stop-alarm ] when* ; + blink-timer>> [ stop-timer ] when* ; : start-blinking ( editor -- ) t >>blink - blink-alarm>> [ restart-alarm ] when* ; + blink-timer>> [ restart-timer ] when* ; : restart-blinking ( editor -- ) dup focused?>> [ @@ -80,12 +80,12 @@ M: editor graft* [ dup mark>> activate-editor-model ] [ [ - '[ _ blink-caret ] blink-interval get dup <alarm> - ] keep blink-alarm<< + '[ _ blink-caret ] blink-interval get dup <timer> + ] keep blink-timer<< ] tri ; M: editor ungraft* - [ [ stop-blinking ] [ f >>blink-alarm drop ] bi ] + [ [ stop-blinking ] [ f >>blink-timer drop ] bi ] [ dup caret>> deactivate-editor-model ] [ dup mark>> deactivate-editor-model ] tri ; diff --git a/basis/ui/gestures/gestures.factor b/basis/ui/gestures/gestures.factor index 41b7f69cbe..658e179301 100644 --- a/basis/ui/gestures/gestures.factor +++ b/basis/ui/gestures/gestures.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays assocs kernel math math.order models namespaces make sequences words strings system hashtables math.parser -math.vectors classes.tuple classes boxes calendar alarms combinators +math.vectors classes.tuple classes boxes calendar timers combinators sets columns fry deques ui.gadgets ui.gadgets.private ascii combinators.short-circuit ; FROM: namespaces => set ; @@ -188,15 +188,15 @@ SYMBOL: drag-timer [ drag-gesture ] 300 milliseconds 100 milliseconds - <alarm> + <timer> [ drag-timer get-global >box ] - [ start-alarm ] bi + [ start-timer ] bi ] when ; : stop-drag-timer ( -- ) hand-buttons get-global empty? [ drag-timer get-global ?box - [ stop-alarm ] [ drop ] if + [ stop-timer ] [ drop ] if ] when ; : fire-motion ( -- ) diff --git a/extra/audio/engine/engine.factor b/extra/audio/engine/engine.factor index a188df853b..d7079c4aaa 100644 --- a/extra/audio/engine/engine.factor +++ b/extra/audio/engine/engine.factor @@ -1,5 +1,5 @@ ! (c)2009 Joe Groff bsd license -USING: accessors alien audio classes.struct fry calendar alarms +USING: accessors alien audio classes.struct fry calendar timers combinators combinators.short-circuit destructors generalizations kernel literals locals math openal sequences sequences.generalizations specialized-arrays strings ; @@ -70,7 +70,7 @@ TUPLE: audio-engine < disposable listener { next-source integer } clips - update-alarm ; + update-timer ; TUPLE: audio-clip < disposable { audio-engine audio-engine } @@ -226,20 +226,20 @@ DEFER: update-audio : start-audio ( audio-engine -- ) dup start-audio* - dup '[ _ update-audio ] 20 milliseconds every >>update-alarm + dup '[ _ update-audio ] 20 milliseconds every >>update-timer drop ; : stop-audio ( audio-engine -- ) dup al-sources>> [ { [ make-engine-current ] - [ update-alarm>> [ stop-alarm ] when* ] + [ update-timer>> [ stop-timer ] when* ] [ clips>> clone [ dispose ] each ] [ al-sources>> free-sources ] [ f >>al-sources f >>clips - f >>update-alarm + f >>update-timer drop ] [ al-context>> alcSuspendContext ] diff --git a/extra/audio/engine/test/test.factor b/extra/audio/engine/test/test.factor index 0791a226d4..419f31d73b 100644 --- a/extra/audio/engine/test/test.factor +++ b/extra/audio/engine/test/test.factor @@ -1,5 +1,5 @@ ! (c)2009 Joe Groff bsd license -USING: accessors alarms audio audio.engine audio.loader calendar +USING: accessors timers audio audio.engine audio.loader calendar destructors io kernel locals math math.functions math.ranges specialized-arrays sequences random math.vectors ; FROM: alien.c-types => short ; @@ -41,10 +41,10 @@ M: noise-generator dispose ] when engine update-audio - ] 20 milliseconds every :> alarm + ] 20 milliseconds every :> timer "Press Enter to stop the test." print readln drop - alarm stop-alarm + timer stop-timer engine dispose ; MAIN: audio-engine-test diff --git a/extra/game/input/demos/joysticks/joysticks.factor b/extra/game/input/demos/joysticks/joysticks.factor index ab65369ea1..3f909c7781 100644 --- a/extra/game/input/demos/joysticks/joysticks.factor +++ b/extra/game/input/demos/joysticks/joysticks.factor @@ -1,7 +1,7 @@ USING: ui ui.gadgets sequences kernel arrays math colors colors.constants ui.render ui.pens.polygon ui.pens.solid math.vectors accessors fry ui.gadgets.packs game.input ui.gadgets.labels -ui.gadgets.borders alarms calendar locals strings ui.gadgets.buttons +ui.gadgets.borders timers calendar locals strings ui.gadgets.buttons combinators math.parser assocs threads ; IN: game.input.demos.joysticks @@ -73,7 +73,7 @@ CONSTANT: pov-polygons COLOR: red <indicator-gadget> [ >>indicator ] [ add-gadget ] bi dup [ 0.0 0.0 0.0 move-axis ] [ f move-pov ] bi ; -TUPLE: joystick-demo-gadget < pack axis raxis controller buttons alarm ; +TUPLE: joystick-demo-gadget < pack axis raxis controller buttons timer ; : add-gadget-with-border ( parent child -- parent ) { 2 2 } <border> COLOR: gray <solid> >>boundary add-gadget ; @@ -108,7 +108,7 @@ TUPLE: joystick-demo-gadget < pack axis raxis controller buttons alarm ; : kill-update-axes ( gadget -- ) COLOR: gray <solid> >>interior - [ [ stop-alarm ] when* f ] change-alarm + [ [ stop-timer ] when* f ] change-timer relayout-1 ; : (update-axes) ( gadget controller-state -- ) @@ -125,11 +125,11 @@ TUPLE: joystick-demo-gadget < pack axis raxis controller buttons alarm ; [ (update-axes) ] [ kill-update-axes ] if* ; M: joystick-demo-gadget graft* - dup '[ _ update-axes ] FREQUENCY every >>alarm + dup '[ _ update-axes ] FREQUENCY every >>timer drop ; M: joystick-demo-gadget ungraft* - alarm>> [ stop-alarm ] when* ; + timer>> [ stop-timer ] when* ; : joystick-window ( controller -- ) [ <joystick-demo-gadget> ] [ product-string ] bi diff --git a/extra/game/input/demos/key-caps/key-caps.factor b/extra/game/input/demos/key-caps/key-caps.factor index 363c7c801c..c8d8e0bc53 100644 --- a/extra/game/input/demos/key-caps/key-caps.factor +++ b/extra/game/input/demos/key-caps/key-caps.factor @@ -1,6 +1,6 @@ USING: game.input game.input.scancodes kernel ui.gadgets ui.gadgets.buttons sequences accessors -words arrays assocs math calendar fry alarms ui +words arrays assocs math calendar fry timers ui ui.gadgets.borders ui.gestures literals ; IN: game.input.demos.key-caps @@ -134,7 +134,7 @@ CONSTANT: key-locations H{ CONSTANT: KEYBOARD-SIZE { 230 65 } CONSTANT: FREQUENCY $[ 1/30 seconds ] -TUPLE: key-caps-gadget < gadget keys alarm ; +TUPLE: key-caps-gadget < gadget keys timer ; : make-key-gadget ( scancode dim array -- ) [ @@ -163,11 +163,11 @@ M: key-caps-gadget pref-dim* drop KEYBOARD-SIZE ; M: key-caps-gadget graft* open-game-input - dup '[ _ update-key-caps-state ] FREQUENCY every >>alarm + dup '[ _ update-key-caps-state ] FREQUENCY every >>timer drop ; M: key-caps-gadget ungraft* - alarm>> [ stop-alarm ] when* + timer>> [ stop-timer ] when* close-game-input ; M: key-caps-gadget handle-gesture diff --git a/extra/game/loop/loop.factor b/extra/game/loop/loop.factor index a26a52226e..48f9ca83ea 100644 --- a/extra/game/loop/loop.factor +++ b/extra/game/loop/loop.factor @@ -1,5 +1,5 @@ ! (c)2009 Joe Groff bsd license -USING: accessors alarms alien.c-types calendar classes.struct +USING: accessors timers alien.c-types calendar classes.struct continuations destructors fry kernel math math.order memory namespaces sequences specialized-vectors system tools.memory ui ui.gadgets.worlds vm vocabs.loader arrays @@ -14,7 +14,7 @@ TUPLE: game-loop { running? boolean } { tick# integer } { frame# integer } - alarm + timer benchmark-data ; STRUCT: game-loop-benchmark @@ -110,12 +110,12 @@ PRIVATE> [ [ '[ _ game-tick ] f ] [ tick-interval-nanos>> nanoseconds ] bi - <alarm> - ] keep [ alarm<< ] [ drop start-alarm ] 2bi ; + <timer> + ] keep [ timer<< ] [ drop start-timer ] 2bi ; : stop-loop ( loop -- ) f >>running? - alarm>> stop-alarm ; + timer>> stop-timer ; : <game-loop*> ( tick-interval-nanos tick-delegate draw-delegate -- loop ) nano-count f 0 0 f diff --git a/extra/irc/gitbot/gitbot.factor b/extra/irc/gitbot/gitbot.factor index 950b34a8d7..02337276e6 100644 --- a/extra/irc/gitbot/gitbot.factor +++ b/extra/irc/gitbot/gitbot.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: fry irc.client irc.client.chats kernel namespaces sequences threads io.launcher io splitting -make mason.common mason.updates calendar math alarms +make mason.common mason.updates calendar math timers io.encodings.8-bit.latin1 debugger ; IN: irc.gitbot diff --git a/extra/key-logger/key-logger.factor b/extra/key-logger/key-logger.factor index 471c86cbfd..fd04d3a15d 100644 --- a/extra/key-logger/key-logger.factor +++ b/extra/key-logger/key-logger.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2010 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alarms bit-arrays calendar game.input io +USING: accessors timers bit-arrays calendar game.input io io.binary io.encodings.binary io.files kernel literals math namespaces system threads ; IN: key-logger @@ -28,7 +28,7 @@ SYMBOL: key-logger ] unless ; : stop-key-logger ( -- ) - key-logger get-global [ stop-alarm ] when* + key-logger get-global [ stop-timer ] when* f key-logger set-global close-game-input ; diff --git a/extra/site-watcher/site-watcher.factor b/extra/site-watcher/site-watcher.factor index 5d97284551..f0e086343e 100644 --- a/extra/site-watcher/site-watcher.factor +++ b/extra/site-watcher/site-watcher.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2009 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alarms arrays calendar combinators +USING: accessors timers arrays calendar combinators combinators.smart continuations debugger http.client fry init io.streams.string kernel locals math math.parser db namespaces sequences site-watcher.db site-watcher.email ; @@ -48,4 +48,4 @@ PRIVATE> ] unless ; : stop-site-watcher ( -- ) - running-site-watcher get [ stop-alarm ] when* ; + running-site-watcher get [ stop-timer ] when* ; diff --git a/extra/tetris/tetris.factor b/extra/tetris/tetris.factor index 839d9690c2..25802a2411 100644 --- a/extra/tetris/tetris.factor +++ b/extra/tetris/tetris.factor @@ -1,10 +1,13 @@ ! Copyright (C) 2006, 2007, 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alarms arrays calendar kernel make math math.rectangles math.parser namespaces sequences system tetris.game tetris.gl ui.gadgets ui.gadgets.labels ui.gadgets.worlds ui.gadgets.status-bar ui.gestures ui.render ui ; +USING: accessors timers arrays calendar kernel make math math.rectangles +math.parser namespaces sequences system tetris.game tetris.gl ui.gadgets +ui.gadgets.labels ui.gadgets.worlds ui.gadgets.status-bar ui.gestures +ui.render ui ; FROM: tetris.game => level>> ; IN: tetris -TUPLE: tetris-gadget < gadget { tetris tetris } { alarm } ; +TUPLE: tetris-gadget < gadget { tetris tetris } { timer } ; : <tetris-gadget> ( tetris -- gadget ) tetris-gadget new swap >>tetris ; @@ -52,10 +55,10 @@ tetris-gadget H{ [ tetris>> ?update ] [ relayout-1 ] bi ; M: tetris-gadget graft* ( gadget -- ) - [ [ tick ] curry 100 milliseconds every ] keep alarm<< ; + [ [ tick ] curry 100 milliseconds every ] keep timer<< ; M: tetris-gadget ungraft* ( gadget -- ) - [ stop-alarm f ] change-alarm drop ; + [ stop-timer f ] change-timer drop ; : tetris-window ( -- ) [ diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index a003c8b618..a2beb513ab 100644 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel accessors sequences sorting math math.order -calendar alarms logging concurrency.combinators namespaces +calendar timers logging concurrency.combinators namespaces db.types db.tuples db fry locals hashtables syndication urls xml.writer validators html.forms From 1636821eecb9806c63c8245ab9f3306987a79e4f Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Thu, 10 Jun 2010 16:39:48 -0700 Subject: [PATCH 06/40] io.encodings.detect: fill in USING: list for tests --- extra/io/encodings/detect/detect-tests.factor | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extra/io/encodings/detect/detect-tests.factor b/extra/io/encodings/detect/detect-tests.factor index 570f84d1b9..5dbebd9001 100644 --- a/extra/io/encodings/detect/detect-tests.factor +++ b/extra/io/encodings/detect/detect-tests.factor @@ -1,5 +1,8 @@ ! (c)2010 Joe Groff bsd license -USING: byte-arrays.hex io.encodings.8-bit.koi8-r io.encodings.detect tools.test ; +USING: byte-arrays byte-arrays.hex io.encodings.8-bit.koi8-r +io.encodings.8-bit.latin1 io.encodings.binary +io.encodings.detect io.encodings.utf16 io.encodings.utf32 +io.encodings.utf8 namespaces tools.test ; IN: io.encodings.detect.tests ! UTF encodings with BOMs From 950f9873225164dc04646e40a2d5f76576e8bb6b Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Thu, 10 Jun 2010 16:49:59 -0700 Subject: [PATCH 07/40] classes.struct: fix some bugs in binary-zero?, add unit tests --- basis/classes/struct/struct-tests.factor | 30 +++++++++++++++++++ basis/classes/struct/struct.factor | 11 ++++--- .../specialized-arrays.factor | 10 ++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index 4ed7d9b446..ab354bb569 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -9,6 +9,7 @@ system tools.test parser lexer eval layouts generic.single classes vocabs ; FROM: math => float ; FROM: specialized-arrays.private => specialized-array-vocab ; +FROM: classes.struct.private => binary-zero? ; QUALIFIED-WITH: alien.c-types c SPECIALIZED-ARRAY: char SPECIALIZED-ARRAY: int @@ -474,3 +475,32 @@ CONSULT: struct-test-delegate struct-test-delegator del>> ; 7 >>a 8 >>b ] unit-test + +SPECIALIZED-ARRAY: struct-test-foo + +[ t ] [ 0 binary-zero? ] unit-test +[ f ] [ 1 binary-zero? ] unit-test +[ f ] [ -1 binary-zero? ] unit-test +[ t ] [ 0.0 binary-zero? ] unit-test +[ f ] [ 1.0 binary-zero? ] unit-test +[ f ] [ -0.0 binary-zero? ] unit-test +[ t ] [ C{ 0.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ 1.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ -0.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ 0.0 1.0 } binary-zero? ] unit-test +[ f ] [ C{ 0.0 -0.0 } binary-zero? ] unit-test +[ t ] [ f binary-zero? ] unit-test +[ t ] [ 0 <alien> binary-zero? ] unit-test +[ f ] [ 1 <alien> binary-zero? ] unit-test +[ f ] [ B{ } binary-zero? ] unit-test +[ t ] [ S{ struct-test-foo f 0 0 f } binary-zero? ] unit-test +[ f ] [ S{ struct-test-foo f 1 0 f } binary-zero? ] unit-test +[ f ] [ S{ struct-test-foo f 0 1 f } binary-zero? ] unit-test +[ f ] [ S{ struct-test-foo f 0 0 t } binary-zero? ] unit-test +[ t t f ] [ + struct-test-foo-array{ + S{ struct-test-foo f 0 0 f } + S{ struct-test-foo f 0 0 f } + S{ struct-test-foo f 1 0 f } + } [ first binary-zero? ] [ second binary-zero? ] [ third binary-zero? ] tri +] unit-test diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index b0f315b335..43578ba2a5 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -11,6 +11,7 @@ namespaces assocs vocabs.parser math.functions classes.struct.bit-accessors bit-arrays stack-checker.dependencies system layouts ; FROM: delegate.private => group-words slot-group-words ; +FROM: math => float ; QUALIFIED: math IN: classes.struct @@ -237,10 +238,12 @@ M: struct byte-length class "struct-size" word-prop ; foldable <PRIVATE GENERIC: binary-zero? ( value -- ? ) -M: object binary-zero? drop f ; -M: f binary-zero? drop t ; -M: number binary-zero? 0 = ; -M: struct binary-zero? >c-ptr [ 0 = ] all? ; +M: object binary-zero? drop f ; inline +M: f binary-zero? drop t ; inline +M: integer binary-zero? zero? ; inline +M: float binary-zero? double>bits zero? ; inline +M: complex binary-zero? >rect [ binary-zero? ] both? ; inline +M: struct binary-zero? binary-object <direct-uchar-array> [ 0 = ] all? ; inline : struct-needs-prototype? ( class -- ? ) struct-slots [ initial>> binary-zero? ] all? not ; diff --git a/basis/specialized-arrays/specialized-arrays.factor b/basis/specialized-arrays/specialized-arrays.factor index 5fa88e39a2..9754fd2abc 100644 --- a/basis/specialized-arrays/specialized-arrays.factor +++ b/basis/specialized-arrays/specialized-arrays.factor @@ -137,14 +137,16 @@ M: pointer underlying-type bi ] "" make ; -PRIVATE> - -: direct-slice ( from to seq -- seq' ) - check-slice +: direct-slice-unsafe ( from to seq -- seq' ) [ nip nth-c-ptr ] [ drop swap - ] [ 2nip ] 3tri direct-like ; inline +PRIVATE> + +: direct-slice ( from to seq -- seq' ) + check-slice direct-slice-unsafe ; inline + : direct-head ( seq n -- seq' ) (head) direct-slice ; inline : direct-tail ( seq n -- seq' ) (tail) direct-slice ; inline : direct-head* ( seq n -- seq' ) from-end direct-head ; inline From 0add13c50ca8472dda5e6c2ec3c07c0971d2acd6 Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Thu, 10 Jun 2010 17:05:43 -0700 Subject: [PATCH 08/40] alien.data: make binary-zero? public and move it from classes.struct.private --- basis/alien/data/data-tests.factor | 35 ++++++++++++++++++++++++ basis/alien/data/data.factor | 14 ++++++++-- basis/classes/struct/struct-tests.factor | 29 -------------------- basis/classes/struct/struct.factor | 11 +------- 4 files changed, 48 insertions(+), 41 deletions(-) create mode 100644 basis/alien/data/data-tests.factor diff --git a/basis/alien/data/data-tests.factor b/basis/alien/data/data-tests.factor new file mode 100644 index 0000000000..d17675e98c --- /dev/null +++ b/basis/alien/data/data-tests.factor @@ -0,0 +1,35 @@ +USING: alien alien.c-types alien.data alien.syntax +classes.struct kernel sequences specialized-arrays +tools.test ; +IN: alien.data.tests + +STRUCT: foo { a int } { b void* } { c bool } ; + +SPECIALIZED-ARRAY: foo + +[ t ] [ 0 binary-zero? ] unit-test +[ f ] [ 1 binary-zero? ] unit-test +[ f ] [ -1 binary-zero? ] unit-test +[ t ] [ 0.0 binary-zero? ] unit-test +[ f ] [ 1.0 binary-zero? ] unit-test +[ f ] [ -0.0 binary-zero? ] unit-test +[ t ] [ C{ 0.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ 1.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ -0.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ 0.0 1.0 } binary-zero? ] unit-test +[ f ] [ C{ 0.0 -0.0 } binary-zero? ] unit-test +[ t ] [ f binary-zero? ] unit-test +[ t ] [ 0 <alien> binary-zero? ] unit-test +[ f ] [ 1 <alien> binary-zero? ] unit-test +[ f ] [ B{ } binary-zero? ] unit-test +[ t ] [ S{ foo f 0 f f } binary-zero? ] unit-test +[ f ] [ S{ foo f 1 f f } binary-zero? ] unit-test +[ f ] [ S{ foo f 0 ALIEN: 8 f } binary-zero? ] unit-test +[ f ] [ S{ foo f 0 f t } binary-zero? ] unit-test +[ t t f ] [ + foo-array{ + S{ foo f 0 f f } + S{ foo f 0 f f } + S{ foo f 1 f f } + } [ first binary-zero? ] [ second binary-zero? ] [ third binary-zero? ] tri +] unit-test diff --git a/basis/alien/data/data.factor b/basis/alien/data/data.factor index 81b53a1b39..2f5e4b72c6 100644 --- a/basis/alien/data/data.factor +++ b/basis/alien/data/data.factor @@ -1,8 +1,9 @@ ! (c)2009, 2010 Slava Pestov, Joe Groff bsd license USING: accessors alien alien.c-types alien.arrays alien.strings arrays byte-arrays cpu.architecture fry io io.encodings.binary -io.files io.streams.memory kernel libc math sequences words -macros combinators generalizations ; +io.files io.streams.memory kernel libc math math.functions +sequences words macros combinators generalizations ; +QUALIFIED: math IN: alien.data GENERIC: require-c-array ( c-type -- ) @@ -106,3 +107,12 @@ PRIVATE> : with-out-parameters ( c-types quot finish -- values ) [ [ drop (local-allots) ] [ swap out-parameters ] 2bi ] dip call (cleanup-allot) ; inline + +GENERIC: binary-zero? ( value -- ? ) + +M: object binary-zero? drop f ; inline +M: f binary-zero? drop t ; inline +M: integer binary-zero? zero? ; inline +M: math:float binary-zero? double>bits zero? ; inline +M: complex binary-zero? >rect [ binary-zero? ] both? ; inline + diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index ab354bb569..8bdfb8dd57 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -9,7 +9,6 @@ system tools.test parser lexer eval layouts generic.single classes vocabs ; FROM: math => float ; FROM: specialized-arrays.private => specialized-array-vocab ; -FROM: classes.struct.private => binary-zero? ; QUALIFIED-WITH: alien.c-types c SPECIALIZED-ARRAY: char SPECIALIZED-ARRAY: int @@ -476,31 +475,3 @@ CONSULT: struct-test-delegate struct-test-delegator del>> ; 8 >>b ] unit-test -SPECIALIZED-ARRAY: struct-test-foo - -[ t ] [ 0 binary-zero? ] unit-test -[ f ] [ 1 binary-zero? ] unit-test -[ f ] [ -1 binary-zero? ] unit-test -[ t ] [ 0.0 binary-zero? ] unit-test -[ f ] [ 1.0 binary-zero? ] unit-test -[ f ] [ -0.0 binary-zero? ] unit-test -[ t ] [ C{ 0.0 0.0 } binary-zero? ] unit-test -[ f ] [ C{ 1.0 0.0 } binary-zero? ] unit-test -[ f ] [ C{ -0.0 0.0 } binary-zero? ] unit-test -[ f ] [ C{ 0.0 1.0 } binary-zero? ] unit-test -[ f ] [ C{ 0.0 -0.0 } binary-zero? ] unit-test -[ t ] [ f binary-zero? ] unit-test -[ t ] [ 0 <alien> binary-zero? ] unit-test -[ f ] [ 1 <alien> binary-zero? ] unit-test -[ f ] [ B{ } binary-zero? ] unit-test -[ t ] [ S{ struct-test-foo f 0 0 f } binary-zero? ] unit-test -[ f ] [ S{ struct-test-foo f 1 0 f } binary-zero? ] unit-test -[ f ] [ S{ struct-test-foo f 0 1 f } binary-zero? ] unit-test -[ f ] [ S{ struct-test-foo f 0 0 t } binary-zero? ] unit-test -[ t t f ] [ - struct-test-foo-array{ - S{ struct-test-foo f 0 0 f } - S{ struct-test-foo f 0 0 f } - S{ struct-test-foo f 1 0 f } - } [ first binary-zero? ] [ second binary-zero? ] [ third binary-zero? ] tri -] unit-test diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index 43578ba2a5..c15e21f651 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -11,7 +11,6 @@ namespaces assocs vocabs.parser math.functions classes.struct.bit-accessors bit-arrays stack-checker.dependencies system layouts ; FROM: delegate.private => group-words slot-group-words ; -FROM: math => float ; QUALIFIED: math IN: classes.struct @@ -232,19 +231,11 @@ M: struct-bit-slot-spec compute-slot-offset PRIVATE> M: struct byte-length class "struct-size" word-prop ; foldable +M: struct binary-zero? binary-object <direct-uchar-array> [ 0 = ] all? ; inline ! class definition <PRIVATE -GENERIC: binary-zero? ( value -- ? ) - -M: object binary-zero? drop f ; inline -M: f binary-zero? drop t ; inline -M: integer binary-zero? zero? ; inline -M: float binary-zero? double>bits zero? ; inline -M: complex binary-zero? >rect [ binary-zero? ] both? ; inline -M: struct binary-zero? binary-object <direct-uchar-array> [ 0 = ] all? ; inline - : struct-needs-prototype? ( class -- ? ) struct-slots [ initial>> binary-zero? ] all? not ; From 6c1bf4e0ebcef8935890c77c7940efc47920b424 Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Thu, 10 Jun 2010 17:32:56 -0700 Subject: [PATCH 09/40] io.encodings.detect: detect empty files as utf8 rather than raise a sequence error --- extra/io/encodings/detect/detect-tests.factor | 2 ++ extra/io/encodings/detect/detect.factor | 1 + 2 files changed, 3 insertions(+) diff --git a/extra/io/encodings/detect/detect-tests.factor b/extra/io/encodings/detect/detect-tests.factor index 5dbebd9001..c0d560a2e1 100644 --- a/extra/io/encodings/detect/detect-tests.factor +++ b/extra/io/encodings/detect/detect-tests.factor @@ -30,6 +30,7 @@ unit-test unit-test ! Default to utf8 if decoding succeeds and there are no nulls +[ utf8 ] [ HEX{ } detect-byte-array ] unit-test [ utf8 ] [ HEX{ 31 32 33 } detect-byte-array ] unit-test [ utf8 ] [ HEX{ 31 32 C2 A0 33 } detect-byte-array ] unit-test [ latin1 ] [ HEX{ 31 32 A0 33 } detect-byte-array ] unit-test @@ -41,3 +42,4 @@ unit-test [ binary ] [ HEX{ 31 32 33 C2 A0 00 } detect-byte-array ] unit-test [ binary ] [ HEX{ 31 32 33 C2 A0 00 30 } detect-byte-array ] unit-test + diff --git a/extra/io/encodings/detect/detect.factor b/extra/io/encodings/detect/detect.factor index a803c54c53..c8b01757f8 100644 --- a/extra/io/encodings/detect/detect.factor +++ b/extra/io/encodings/detect/detect.factor @@ -38,6 +38,7 @@ PRIVATE> { [ dup HEX{ EF BB BF } head? ] [ drop utf8 ] } { [ dup $[ "<?xml" >byte-array ] head? ] [ detect-xml-prolog ] } { [ 0 over member? ] [ drop binary ] } + { [ dup empty? ] [ drop utf8 ] } { [ dup valid-utf8? ] [ drop utf8 ] } [ drop default-8bit-encoding get ] } cond ; From 608eab493a67c5b2bdd1e2bf9405b1f6f06fddc5 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Fri, 11 Jun 2010 15:38:57 -0400 Subject: [PATCH 10/40] alien.data: fix unit test failure --- basis/alien/data/data-tests.factor | 76 ++++++++++++++++-------------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/basis/alien/data/data-tests.factor b/basis/alien/data/data-tests.factor index d17675e98c..20a6c26b84 100644 --- a/basis/alien/data/data-tests.factor +++ b/basis/alien/data/data-tests.factor @@ -1,35 +1,41 @@ -USING: alien alien.c-types alien.data alien.syntax -classes.struct kernel sequences specialized-arrays -tools.test ; -IN: alien.data.tests - -STRUCT: foo { a int } { b void* } { c bool } ; - -SPECIALIZED-ARRAY: foo - -[ t ] [ 0 binary-zero? ] unit-test -[ f ] [ 1 binary-zero? ] unit-test -[ f ] [ -1 binary-zero? ] unit-test -[ t ] [ 0.0 binary-zero? ] unit-test -[ f ] [ 1.0 binary-zero? ] unit-test -[ f ] [ -0.0 binary-zero? ] unit-test -[ t ] [ C{ 0.0 0.0 } binary-zero? ] unit-test -[ f ] [ C{ 1.0 0.0 } binary-zero? ] unit-test -[ f ] [ C{ -0.0 0.0 } binary-zero? ] unit-test -[ f ] [ C{ 0.0 1.0 } binary-zero? ] unit-test -[ f ] [ C{ 0.0 -0.0 } binary-zero? ] unit-test -[ t ] [ f binary-zero? ] unit-test -[ t ] [ 0 <alien> binary-zero? ] unit-test -[ f ] [ 1 <alien> binary-zero? ] unit-test -[ f ] [ B{ } binary-zero? ] unit-test -[ t ] [ S{ foo f 0 f f } binary-zero? ] unit-test -[ f ] [ S{ foo f 1 f f } binary-zero? ] unit-test -[ f ] [ S{ foo f 0 ALIEN: 8 f } binary-zero? ] unit-test -[ f ] [ S{ foo f 0 f t } binary-zero? ] unit-test -[ t t f ] [ - foo-array{ - S{ foo f 0 f f } - S{ foo f 0 f f } - S{ foo f 1 f f } - } [ first binary-zero? ] [ second binary-zero? ] [ third binary-zero? ] tri -] unit-test +USING: alien alien.c-types alien.data alien.syntax +classes.struct kernel sequences specialized-arrays +specialized-arrays.private tools.test compiler.units vocabs ; +IN: alien.data.tests + +STRUCT: foo { a int } { b void* } { c bool } ; + +SPECIALIZED-ARRAY: foo + +[ t ] [ 0 binary-zero? ] unit-test +[ f ] [ 1 binary-zero? ] unit-test +[ f ] [ -1 binary-zero? ] unit-test +[ t ] [ 0.0 binary-zero? ] unit-test +[ f ] [ 1.0 binary-zero? ] unit-test +[ f ] [ -0.0 binary-zero? ] unit-test +[ t ] [ C{ 0.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ 1.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ -0.0 0.0 } binary-zero? ] unit-test +[ f ] [ C{ 0.0 1.0 } binary-zero? ] unit-test +[ f ] [ C{ 0.0 -0.0 } binary-zero? ] unit-test +[ t ] [ f binary-zero? ] unit-test +[ t ] [ 0 <alien> binary-zero? ] unit-test +[ f ] [ 1 <alien> binary-zero? ] unit-test +[ f ] [ B{ } binary-zero? ] unit-test +[ t ] [ S{ foo f 0 f f } binary-zero? ] unit-test +[ f ] [ S{ foo f 1 f f } binary-zero? ] unit-test +[ f ] [ S{ foo f 0 ALIEN: 8 f } binary-zero? ] unit-test +[ f ] [ S{ foo f 0 f t } binary-zero? ] unit-test +[ t t f ] [ + foo-array{ + S{ foo f 0 f f } + S{ foo f 0 f f } + S{ foo f 1 f f } + } [ first binary-zero? ] [ second binary-zero? ] [ third binary-zero? ] tri +] unit-test + +[ ] [ + [ + foo specialized-array-vocab forget-vocab + ] with-compilation-unit +] unit-test From 9840e5e1479f013bf472bb9a0b87a3ca7085f145 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Fri, 11 Jun 2010 16:54:30 -0500 Subject: [PATCH 11/40] Add a combinator to make a unique directory, set that to the current and temp directories, and then delete the directory when done. Useful when working with apps that need to write intermediate files to the current directory --- basis/io/files/unique/unique.factor | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/basis/io/files/unique/unique.factor b/basis/io/files/unique/unique.factor index 5bf89b9520..7652bfcfd0 100644 --- a/basis/io/files/unique/unique.factor +++ b/basis/io/files/unique/unique.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays combinators continuations fry io io.backend io.directories io.directories.hierarchy io.files io.pathnames -kernel math math.bitwise math.parser namespaces random +kernel locals math math.bitwise math.parser namespaces random sequences system vocabs.loader ; IN: io.files.unique @@ -78,9 +78,10 @@ PRIVATE> : temporary-file ( -- path ) "" unique-file ; -: with-working-directory ( path quot -- ) - over make-directories - dupd '[ _ _ with-temporary-directory ] with-directory ; inline +:: cleanup-unique-working-directory ( quot -- ) + unique-directory :> path + path [ path quot with-temporary-directory ] with-directory + path delete-tree ; inline { { [ os unix? ] [ "io.files.unique.unix" ] } From cf09a138d2f3922698b6ceff70167b4ccb02b762 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Sun, 13 Jun 2010 18:23:41 -0500 Subject: [PATCH 12/40] Delete the .git/index in case it's corrupted. Do a "git reset --hard HEAD" before a git pull. Make sure a build directory cannot collide with another build directory. --- extra/mason/common/common.factor | 1 + extra/mason/updates/updates.factor | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/extra/mason/common/common.factor b/extra/mason/common/common.factor index db68a558e0..5e37a683cf 100644 --- a/extra/mason/common/common.factor +++ b/extra/mason/common/common.factor @@ -57,6 +57,7 @@ M: unix really-delete-tree delete-tree ; [ day>> , ] [ hour>> , ] [ minute>> , ] + [ drop nano-count , ] } cleave ] { } make [ pad-00 ] map "-" join ; diff --git a/extra/mason/updates/updates.factor b/extra/mason/updates/updates.factor index 60a155eae7..57a8c748d2 100644 --- a/extra/mason/updates/updates.factor +++ b/extra/mason/updates/updates.factor @@ -1,9 +1,17 @@ ! Copyright (C) 2008, 2010 Eduardo Cavazos, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel io.launcher bootstrap.image.download -mason.common mason.platform ; +USING: bootstrap.image.download combinators.short-circuit +io.directories io.launcher kernel mason.common mason.platform ; IN: mason.updates +: git-reset-cmd ( -- cmd ) + { + "git" + "reset" + "--hard" + "HEAD" + } ; + : git-pull-cmd ( -- cmd ) { "git" @@ -14,6 +22,8 @@ IN: mason.updates } ; : updates-available? ( -- ? ) + ".git/index" delete-file + git-reset-cmd short-running-process git-id git-pull-cmd short-running-process git-id @@ -23,6 +33,4 @@ IN: mason.updates boot-image-name maybe-download-image ; : new-code-available? ( -- ? ) - updates-available? - new-image-available? - or ; \ No newline at end of file + { [ updates-available? ] [ new-image-available? ] } 0|| ; From e718670997beb56b3455c1616b05c688730f0fe8 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Sun, 13 Jun 2010 18:24:48 -0500 Subject: [PATCH 13/40] Better name for a word in calendar --- basis/calendar/unix/unix.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basis/calendar/unix/unix.factor b/basis/calendar/unix/unix.factor index fdc85c943a..6916129368 100644 --- a/basis/calendar/unix/unix.factor +++ b/basis/calendar/unix/unix.factor @@ -5,11 +5,11 @@ kernel math unix unix.time unix.types namespaces system accessors classes.struct ; IN: calendar.unix -: timeval>seconds ( timeval -- seconds ) +: timeval>duration ( timeval -- duration ) [ sec>> seconds ] [ usec>> microseconds ] bi time+ ; : timeval>unix-time ( timeval -- timestamp ) - timeval>seconds since-1970 ; + timeval>duration since-1970 ; : timespec>seconds ( timespec -- seconds ) [ sec>> seconds ] [ nsec>> nanoseconds ] bi time+ ; From d050ad5906a2e2bc8f8f0357369e1937c0325e0c Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Sun, 13 Jun 2010 18:25:08 -0500 Subject: [PATCH 14/40] Add more time bindings --- basis/unix/time/time.factor | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/basis/unix/time/time.factor b/basis/unix/time/time.factor index 72132bb132..bd3a02fcab 100644 --- a/basis/unix/time/time.factor +++ b/basis/unix/time/time.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel alien.syntax alien.c-types math unix.types -classes.struct accessors ; +USING: accessors alien.c-types alien.syntax calendar +classes.struct kernel math unix.types ; IN: unix.time STRUCT: timeval @@ -24,6 +24,15 @@ STRUCT: timespec swap >>nsec swap >>sec ; +STRUCT: timezone + { tz_minuteswest int } + { tz_dsttime int } ; + +: timestamp>timezone ( timestamp -- timezone ) + gmt-offset>> duration>minutes + 1 + \ timezone <struct-boa> ; inline + STRUCT: tm { sec int } { min int } @@ -40,3 +49,5 @@ STRUCT: tm FUNCTION: time_t time ( time_t* t ) ; FUNCTION: tm* localtime ( time_t* clock ) ; FUNCTION: int gettimeofday ( timespec* TP, void* TZP ) ; +FUNCTION: int settimeofday ( timeval* TP, timezone* TZP ) ; +FUNCTION: int adjtime ( timeval* delta, timeval* olddelta ) ; From c59b71d6aef52766552aef2d776ce97f05cdaca8 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Sun, 13 Jun 2010 18:30:05 -0500 Subject: [PATCH 15/40] Add time vocab that can set system clock time --- extra/time/authors.txt | 1 + extra/time/macosx/authors.txt | 1 + extra/time/macosx/macosx.factor | 15 +++++++++++++++ extra/time/time.factor | 7 +++++++ extra/time/unix/authors.txt | 1 + extra/time/unix/unix.factor | 9 +++++++++ 6 files changed, 34 insertions(+) create mode 100644 extra/time/authors.txt create mode 100644 extra/time/macosx/authors.txt create mode 100644 extra/time/macosx/macosx.factor create mode 100644 extra/time/time.factor create mode 100644 extra/time/unix/authors.txt create mode 100644 extra/time/unix/unix.factor diff --git a/extra/time/authors.txt b/extra/time/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/time/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/time/macosx/authors.txt b/extra/time/macosx/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/time/macosx/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/time/macosx/macosx.factor b/extra/time/macosx/macosx.factor new file mode 100644 index 0000000000..c28b5c9b72 --- /dev/null +++ b/extra/time/macosx/macosx.factor @@ -0,0 +1,15 @@ +! Copyright (C) 2010 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: alien.data calendar calendar.unix classes.struct +io.files.info.unix.private kernel system time unix unix.time ; +IN: time.macosx + +M: macosx adjust-time-monotonic + timestamp>timeval + \ timeval <struct> + [ adjtime io-error ] keep dup binary-zero? [ + drop instant + ] [ + timeval>duration since-1970 now time- + ] if ; + diff --git a/extra/time/time.factor b/extra/time/time.factor new file mode 100644 index 0000000000..45ba3bc141 --- /dev/null +++ b/extra/time/time.factor @@ -0,0 +1,7 @@ +! Copyright (C) 2010 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: system ; +IN: time + +HOOK: set-time os ( timestamp -- ) +HOOK: adjust-time-monotonic os ( timestamp -- seconds ) diff --git a/extra/time/unix/authors.txt b/extra/time/unix/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/time/unix/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/time/unix/unix.factor b/extra/time/unix/unix.factor new file mode 100644 index 0000000000..ba1bc6e3fb --- /dev/null +++ b/extra/time/unix/unix.factor @@ -0,0 +1,9 @@ +! Copyright (C) 2010 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: calendar kernel math system time unix unix.time ; +IN: time.unix + +M: unix set-time + [ unix-1970 time- duration>microseconds >integer make-timeval ] + [ timestamp>timezone ] bi + settimeofday io-error ; From c886ea537ddb7182032d4ff9f051f0ac4f950e36 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Sun, 13 Jun 2010 18:32:46 -0500 Subject: [PATCH 16/40] Check in Joe's codebook vocab with a few tweaks. Requires the kindlegen binary from Amazon's website. --- extra/codebook/authors.txt | 2 + extra/codebook/codebook.factor | 245 +++++++++++++++++++++++++++++++++ extra/codebook/cover.jpg | Bin 0 -> 218046 bytes 3 files changed, 247 insertions(+) create mode 100644 extra/codebook/authors.txt create mode 100644 extra/codebook/codebook.factor create mode 100644 extra/codebook/cover.jpg diff --git a/extra/codebook/authors.txt b/extra/codebook/authors.txt new file mode 100644 index 0000000000..0bc3c5ad4d --- /dev/null +++ b/extra/codebook/authors.txt @@ -0,0 +1,2 @@ +Joe Groff +Doug Coleman diff --git a/extra/codebook/codebook.factor b/extra/codebook/codebook.factor new file mode 100644 index 0000000000..2803169ba8 --- /dev/null +++ b/extra/codebook/codebook.factor @@ -0,0 +1,245 @@ +! (c)2010 Joe Groff bsd license +USING: accessors arrays assocs calendar calendar.format +combinators combinators.short-circuit fry io io.backend +io.directories io.encodings.binary io.encodings.detect +io.encodings.utf8 io.files io.files.info io.files.types +io.files.unique io.launcher io.pathnames kernel locals math +math.parser namespaces sequences sorting strings system +unicode.categories xml.syntax xml.writer xmode.catalog +xmode.marker xmode.tokens ; +IN: codebook + +! Usage: "my/source/tree" codebook +! Writes tree.opf, tree.ncx, and tree.html to a temporary directory +! Writes tree.mobi to resource:codebooks +! Requires kindlegen to compile tree.mobi for Kindle + +CONSTANT: codebook-style + { + { COMMENT1 [ [XML <i><font color="#555555"><-></font></i> XML] ] } + { COMMENT2 [ [XML <i><font color="#555555"><-></font></i> XML] ] } + { COMMENT3 [ [XML <i><font color="#555555"><-></font></i> XML] ] } + { COMMENT4 [ [XML <i><font color="#555555"><-></font></i> XML] ] } + { DIGIT [ [XML <font color="#333333"><-></font> XML] ] } + { FUNCTION [ [XML <b><font color="#111111"><-></font></b> XML] ] } + { KEYWORD1 [ [XML <b><font color="#111111"><-></font></b> XML] ] } + { KEYWORD2 [ [XML <b><font color="#111111"><-></font></b> XML] ] } + { KEYWORD3 [ [XML <b><font color="#111111"><-></font></b> XML] ] } + { KEYWORD4 [ [XML <b><font color="#111111"><-></font></b> XML] ] } + { LABEL [ [XML <b><font color="#333333"><-></font></b> XML] ] } + { LITERAL1 [ [XML <font color="#333333"><-></font> XML] ] } + { LITERAL2 [ [XML <font color="#333333"><-></font> XML] ] } + { LITERAL3 [ [XML <font color="#333333"><-></font> XML] ] } + { LITERAL4 [ [XML <font color="#333333"><-></font> XML] ] } + { MARKUP [ [XML <b><font color="#333333"><-></font></b> XML] ] } + { OPERATOR [ [XML <b><font color="#111111"><-></font></b> XML] ] } + [ drop ] + } + +: first-line ( filename encoding -- line ) + [ readln ] with-file-reader ; + +TUPLE: code-file + name encoding mode ; + +: include-file-name? ( name -- ? ) + { + [ path-components [ "." head? ] any? not ] + [ link-info type>> +regular-file+ = ] + } 1&& ; + +: code-files ( dir -- files ) + '[ + [ include-file-name? ] filter [ + dup detect-file dup binary? + [ f ] [ 2dup dupd first-line find-mode ] if + code-file boa + ] map [ mode>> ] filter [ name>> ] sort-with + ] with-directory-tree-files ; + +: html-name-char ( char -- str ) + { + { [ dup alpha? ] [ 1string ] } + { [ dup digit? ] [ 1string ] } + [ >hex 6 CHAR: 0 pad-head "_" "_" surround ] + } cond ; + +: file-html-name ( name -- name ) + [ html-name-char ] { } map-as concat ".html" append ; + +: toc-list ( files -- list ) + [ name>> ] map natural-sort [ + [ file-html-name ] keep + [XML <li><a href=<->><-></a></li> XML] + ] map ; + +! insert zero-width non-joiner between all characters so words can wrap anywhere +: zwnj ( string -- s|t|r|i|n|g ) + [ CHAR: \u00200c "" 2sequence ] { } map-as concat ; + +! We wrap every line in <tt> because Kindle tends to forget the font when +! moving back pages +: htmlize-tokens ( tokens line# -- html-tokens ) + swap [ + [ str>> zwnj ] [ id>> ] bi codebook-style case + ] map [XML <tt><font size="-2" color="#666666"><-></font> <-></tt> XML] + "\n" 2array ; + +: line#>string ( i line#len -- i-string ) + [ number>string ] [ CHAR: \s pad-head ] bi* ; + +:: code>html ( dir file -- page ) + file name>> :> name + "Generating HTML for " write name write "..." print flush + dir [ file [ name>> ] [ encoding>> ] bi file-lines ] with-directory :> lines + lines length 1 + number>string length :> line#len + file mode>> load-mode :> rules + f lines [| l i | l rules tokenize-line i 1 + line#len line#>string htmlize-tokens ] + map-index concat nip :> html-lines + <XML <html> + <head> + <title><-name-></title> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + </head> + <body> + <h2><-name-></h2> + <pre><-html-lines-></pre> + <mbp:pagebreak xmlns:mbp="http://www.mobipocket.com/mbp" /> + </body> + </html> XML> ; + +:: code>toc-html ( dir name files -- html ) + "Generating HTML table of contents" print flush + + now timestamp>rfc822 :> timestamp + dir absolute-path :> source + dir [ + files toc-list :> toc + + <XML <html> + <head> + <title><-name-></title> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + </head> + <body> + <h1><-name-></h1> + <font size="-2">Generated from<br/> + <b><tt><-source-></tt></b><br/> + at <-timestamp-></font><br/> + <br/> + <ul><-toc-></ul> + <mbp:pagebreak xmlns:mbp="http://www.mobipocket.com/mbp" /> + </body> + </html> XML> + ] with-directory ; + +:: code>ncx ( dir name files -- xml ) + "Generating NCX table of contents" print flush + + files [| file i | + file name>> :> name + name file-html-name :> filename + i 2 + number>string :> istr + + [XML <navPoint class="book" id=<-filename-> playOrder=<-istr->> + <navLabel><text><-name-></text></navLabel> + <content src=<-filename-> /> + </navPoint> XML] + ] map-index :> file-nav-points + + <XML <?xml version="1.0" encoding="UTF-8" ?> + <ncx version="2005-1" xmlns="http://www.daisy.org/z3986/2005/ncx/"> + <navMap> + <navPoint class="book" id="toc" playOrder="1"> + <navLabel><text>Table of Contents</text></navLabel> + <content src="_toc.html" /> + </navPoint> + <-file-nav-points-> + </navMap> + </ncx> XML> ; + +:: code>opf ( dir name files -- xml ) + "Generating OPF manifest" print flush + name ".ncx" append :> ncx-name + + files [ + name>> file-html-name dup + [XML <item id=<-> href=<-> media-type="text/html" /> XML] + ] map :> html-manifest + + files [ name>> file-html-name [XML <itemref idref=<-> /> XML] ] map :> html-spine + + <XML <?xml version="1.0" encoding="UTF-8" ?> + <package + version="2.0" + xmlns="http://www.idpf.org/2007/opf" + unique-identifier=<-name->> + <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> + <dc:title><-name-></dc:title> + <dc:language>en</dc:language> + <meta name="cover" content="my-cover-image" /> + </metadata> + <manifest> + <item href="cover.jpg" id="my-cover-image" media-type="image/jpeg" /> + <item id="html-toc" href="_toc.html" media-type="text/html" /> + <-html-manifest-> + <item id="toc" href=<-ncx-name-> media-type="application/x-dtbncx+xml" /> + </manifest> + <spine toc="toc"> + <itemref idref="html-toc" /> + <-html-spine-> + </spine> + <guide> + <reference type="toc" title="Table of Contents" href="_toc.html" /> + </guide> + </package> XML> ; + +: write-dest-file ( xml dest-dir name ext -- ) + append append-path utf8 [ write-xml ] with-file-writer ; + +SYMBOL: kindlegen-path +kindlegen-path [ "kindlegen" ] initialize + +SYMBOL: codebook-output-path +codebook-output-path [ "resource:codebooks" ] initialize + +: kindlegen ( path -- ) + [ kindlegen-path get "-unicode" ] dip 3array try-process ; + +: kindle-path ( directory name extension -- path ) + [ append-path ] dip append ; + +:: codebook ( src-dir -- ) + codebook-output-path get normalize-path :> dest-dir + + "Generating ebook for " write src-dir write " in " write dest-dir print flush + + dest-dir make-directories + [ + current-temporary-directory get :> temp-dir + src-dir file-name :> name + src-dir code-files :> files + + src-dir name files code>opf + temp-dir name ".opf" write-dest-file + + "vocab:codebook/cover.jpg" temp-dir copy-file-into + + src-dir name files code>ncx + temp-dir name ".ncx" write-dest-file + + src-dir name files code>toc-html + temp-dir "_toc.html" "" write-dest-file + + files [| file | + src-dir file code>html + temp-dir file name>> file-html-name "" write-dest-file + ] each + + temp-dir name ".opf" kindle-path kindlegen + temp-dir name ".mobi" kindle-path dest-dir copy-file-into + + dest-dir name ".mobi" kindle-path :> mobi-path + + "Job's finished: " write mobi-path print flush + ] cleanup-unique-working-directory ; diff --git a/extra/codebook/cover.jpg b/extra/codebook/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..039415d72766df4a71657bb233b05bb7aeed4170 GIT binary patch literal 218046 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%0Afs_Pd%yqDPJV}U~A=0-CUO~&gFA^dWd$XS*cD# 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 b-2F!yAfwu9g6kf$IdD7<2s!dUzQ6z3xS&Jg literal 0 HcmV?d00001 From cc573c0ecc6edd08ed76e789abd308da73f49b3b Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Sun, 13 Jun 2010 22:39:31 -0500 Subject: [PATCH 17/40] Fix mason unit test --- extra/mason/common/common-tests.factor | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extra/mason/common/common-tests.factor b/extra/mason/common/common-tests.factor index 6d7f973296..b8e01d3993 100644 --- a/extra/mason/common/common-tests.factor +++ b/extra/mason/common/common-tests.factor @@ -1,6 +1,7 @@ IN: mason.common.tests USING: prettyprint mason.common mason.config -namespaces calendar tools.test io.files io.files.temp io.encodings.utf8 ; +namespaces calendar tools.test io.files +io.files.temp io.encodings.utf8 sequences ; [ "00:01:02" ] [ 62,000,000,000 nanos>time ] unit-test @@ -11,7 +12,7 @@ namespaces calendar tools.test io.files io.files.temp io.encodings.utf8 ; ] with-scope ] unit-test -[ "/home/bobby/builds/2008-09-11-12-23" ] [ +[ t ] [ [ "/home/bobby/builds" builds-dir set T{ timestamp @@ -23,6 +24,7 @@ namespaces calendar tools.test io.files io.files.temp io.encodings.utf8 ; } datestamp stamp set build-dir ] with-scope + "/home/bobby/builds/2008-09-11-12-23" head? ] unit-test [ ] [ "empty-test" temp-file utf8 [ ] with-file-writer ] unit-test From 62d39d75421584085af151a34aca674f36bfdb86 Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Sun, 13 Jun 2010 20:41:46 -0700 Subject: [PATCH 18/40] sequences.cords: fall back to generic sequence methods when both arguments to binary cord ops aren't cords --- basis/sequences/cords/cords.factor | 71 ++++++++++++++++-------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/basis/sequences/cords/cords.factor b/basis/sequences/cords/cords.factor index 5be500abd4..766fbe87c0 100644 --- a/basis/sequences/cords/cords.factor +++ b/basis/sequences/cords/cords.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2008, 2010 Slava Pestov, Joe Groff. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs sequences sorting binary-search fry math -math.order arrays classes combinators kernel functors math.functions -math.vectors ; +math.order arrays classes combinators kernel functors locals +math.functions math.vectors ; IN: sequences.cords MIXIN: cord @@ -47,57 +47,62 @@ M: T cord-append [ [ head>> ] dip call ] [ [ tail>> ] dip call ] 2bi cord-append ; inline -: cord-2map ( cord cord quot -- cord' ) - [ [ [ head>> ] bi@ ] dip call ] - [ [ [ tail>> ] bi@ ] dip call ] 3bi cord-append ; inline +:: cord-2map ( cord-a cord-b quot fallback -- cord' ) + cord-a cord-b 2dup [ cord? ] both? [ + [ [ head>> ] bi@ quot call ] + [ [ tail>> ] bi@ quot call ] 2bi cord-append + ] [ fallback call ] if ; inline : cord-both ( cord quot -- h t ) [ [ head>> ] [ tail>> ] bi ] dip bi@ ; inline -: cord-2both ( cord cord quot -- h t ) - [ [ [ head>> ] bi@ ] dip call ] - [ [ [ tail>> ] bi@ ] dip call ] 3bi ; inline +:: cord-2both ( cord-a cord-b quot combine fallback -- result ) + cord-a cord-b 2dup [ cord? ] both? [ + [ [ head>> ] bi@ quot call ] + [ [ tail>> ] bi@ quot call ] 2bi combine call + ] [ fallback call ] if ; inline <PRIVATE : split-shuffle ( shuf -- sh uf ) dup length 2 /i cut* ; foldable PRIVATE> -M: cord v+ [ v+ ] cord-2map ; inline -M: cord v- [ v- ] cord-2map ; inline +M: cord v+ [ v+ ] [ call-next-method ] cord-2map ; inline +M: cord v- [ v- ] [ call-next-method ] cord-2map ; inline M: cord vneg [ vneg ] cord-map ; inline -M: cord v+- [ v+- ] cord-2map ; inline -M: cord vs+ [ vs+ ] cord-2map ; inline -M: cord vs- [ vs- ] cord-2map ; inline -M: cord vs* [ vs* ] cord-2map ; inline -M: cord v* [ v* ] cord-2map ; inline -M: cord v/ [ v/ ] cord-2map ; inline -M: cord vmin [ vmin ] cord-2map ; inline -M: cord vmax [ vmax ] cord-2map ; inline -M: cord v. [ v. ] cord-2both + ; inline +M: cord v+- [ v+- ] [ call-next-method ] cord-2map ; inline +M: cord vs+ [ vs+ ] [ call-next-method ] cord-2map ; inline +M: cord vs- [ vs- ] [ call-next-method ] cord-2map ; inline +M: cord vs* [ vs* ] [ call-next-method ] cord-2map ; inline +M: cord v* [ v* ] [ call-next-method ] cord-2map ; inline +M: cord v/ [ v/ ] [ call-next-method ] cord-2map ; inline +M: cord vmin [ vmin ] [ call-next-method ] cord-2map ; inline +M: cord vmax [ vmax ] [ call-next-method ] cord-2map ; inline +M: cord v. + [ v. ] [ + ] [ call-next-method ] cord-2both ; inline M: cord vsqrt [ vsqrt ] cord-map ; inline M: cord sum [ sum ] cord-both + ; inline M: cord vabs [ vabs ] cord-map ; inline -M: cord vbitand [ vbitand ] cord-2map ; inline -M: cord vbitandn [ vbitandn ] cord-2map ; inline -M: cord vbitor [ vbitor ] cord-2map ; inline -M: cord vbitxor [ vbitxor ] cord-2map ; inline +M: cord vbitand [ vbitand ] [ call-next-method ] cord-2map ; inline +M: cord vbitandn [ vbitandn ] [ call-next-method ] cord-2map ; inline +M: cord vbitor [ vbitor ] [ call-next-method ] cord-2map ; inline +M: cord vbitxor [ vbitxor ] [ call-next-method ] cord-2map ; inline M: cord vbitnot [ vbitnot ] cord-map ; inline -M: cord vand [ vand ] cord-2map ; inline -M: cord vandn [ vandn ] cord-2map ; inline -M: cord vor [ vor ] cord-2map ; inline -M: cord vxor [ vxor ] cord-2map ; inline +M: cord vand [ vand ] [ call-next-method ] cord-2map ; inline +M: cord vandn [ vandn ] [ call-next-method ] cord-2map ; inline +M: cord vor [ vor ] [ call-next-method ] cord-2map ; inline +M: cord vxor [ vxor ] [ call-next-method ] cord-2map ; inline M: cord vnot [ vnot ] cord-map ; inline M: cord vlshift '[ _ vlshift ] cord-map ; inline M: cord vrshift '[ _ vrshift ] cord-map ; inline M: cord (vmerge-head) [ head>> ] bi@ (vmerge) cord-append ; inline M: cord (vmerge-tail) [ tail>> ] bi@ (vmerge) cord-append ; inline -M: cord v<= [ v<= ] cord-2map ; inline -M: cord v< [ v< ] cord-2map ; inline -M: cord v= [ v= ] cord-2map ; inline -M: cord v> [ v> ] cord-2map ; inline -M: cord v>= [ v>= ] cord-2map ; inline -M: cord vunordered? [ vunordered? ] cord-2map ; inline +M: cord v<= [ v<= ] [ call-next-method ] cord-2map ; inline +M: cord v< [ v< ] [ call-next-method ] cord-2map ; inline +M: cord v= [ v= ] [ call-next-method ] cord-2map ; inline +M: cord v> [ v> ] [ call-next-method ] cord-2map ; inline +M: cord v>= [ v>= ] [ call-next-method ] cord-2map ; inline +M: cord vunordered? [ vunordered? ] [ call-next-method ] cord-2map ; inline M: cord vany? [ vany? ] cord-both or ; inline M: cord vall? [ vall? ] cord-both and ; inline M: cord vnone? [ vnone? ] cord-both and ; inline From 879e9b268d71b418fce618a8d3fb620673cef13b Mon Sep 17 00:00:00 2001 From: Joe Groff <joe@victoria.(none)> Date: Mon, 14 Jun 2010 14:23:55 -0700 Subject: [PATCH 19/40] typed: include value that raised the error in type-mismatch-errors --- basis/typed/prettyprint/prettyprint.factor | 24 +++++++++++++++++++++- basis/typed/typed-tests.factor | 13 +++++++----- basis/typed/typed.factor | 7 ++----- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/basis/typed/prettyprint/prettyprint.factor b/basis/typed/prettyprint/prettyprint.factor index 8a7ff5b7b2..4bb8814e4c 100644 --- a/basis/typed/prettyprint/prettyprint.factor +++ b/basis/typed/prettyprint/prettyprint.factor @@ -1,4 +1,5 @@ -USING: definitions kernel locals.definitions see see.private typed words ; +USING: definitions kernel locals.definitions see see.private typed words +summary make accessors classes ; IN: typed.prettyprint PREDICATE: typed-lambda-word < lambda-word "typed-word" word-prop ; @@ -9,3 +10,24 @@ M: typed-lambda-word definer drop \ TYPED:: \ ; ; M: typed-word definition "typed-def" word-prop ; M: typed-word declarations. "typed-word" word-prop declarations. ; +M: input-mismatch-error summary + [ + "Typed word “" % + dup word>> name>> % + "” expected input value of type " % + dup expected-type>> name>> % + " but got " % + dup value>> class name>> % + drop + ] "" make ; + +M: output-mismatch-error summary + [ + "Typed word “" % + dup word>> name>> % + "” expected to output value of type " % + dup expected-type>> name>> % + " but gave " % + dup value>> class name>> % + drop + ] "" make ; diff --git a/basis/typed/typed-tests.factor b/basis/typed/typed-tests.factor index bca1136ee6..70edcf2334 100644 --- a/basis/typed/typed-tests.factor +++ b/basis/typed/typed-tests.factor @@ -1,6 +1,6 @@ USING: accessors effects eval kernel layouts math namespaces -quotations tools.test typed words words.symbol -compiler.tree.debugger prettyprint definitions compiler.units ; +quotations tools.test typed words words.symbol combinators.short-circuit +compiler.tree.debugger prettyprint definitions compiler.units sequences ; IN: typed.tests TYPED: f+ ( a: float b: float -- c: float ) @@ -24,14 +24,17 @@ TYPED: dee ( x: tweedle-dee -- y ) TYPED: dum ( x: tweedle-dum -- y ) drop \ tweedle-dum ; -[ \ tweedle-dum new dee ] [ input-mismatch-error? ] must-fail-with -[ \ tweedle-dee new dum ] [ input-mismatch-error? ] must-fail-with +[ \ tweedle-dum new dee ] +[ { [ input-mismatch-error? ] [ expected-type>> tweedle-dee = ] [ value>> tweedle-dum? ] } 1&& ] must-fail-with +[ \ tweedle-dee new dum ] +[ { [ input-mismatch-error? ] [ expected-type>> tweedle-dum = ] [ value>> tweedle-dee? ] } 1&& ] must-fail-with TYPED: dumdum ( x -- y: tweedle-dum ) drop \ tweedle-dee new ; -[ f dumdum ] [ output-mismatch-error? ] must-fail-with +[ f dumdum ] +[ { [ output-mismatch-error? ] [ expected-type>> tweedle-dum = ] [ value>> tweedle-dee? ] } 1&& ] must-fail-with TYPED:: f+locals ( a: float b: float -- c: float ) a b + ; diff --git a/basis/typed/typed.factor b/basis/typed/typed.factor index 50da7b1bad..fe2ba41722 100644 --- a/basis/typed/typed.factor +++ b/basis/typed/typed.factor @@ -7,7 +7,7 @@ locals.parser macros stack-checker.dependencies ; FROM: classes.tuple.private => tuple-layout ; IN: typed -ERROR: type-mismatch-error word expected-types ; +ERROR: type-mismatch-error value expected-type word expected-types ; ERROR: input-mismatch-error < type-mismatch-error ; ERROR: output-mismatch-error < type-mismatch-error ; @@ -28,9 +28,6 @@ PREDICATE: typed-word < word "typed-word" word-prop >boolean ; : typed-stack-effect? ( effect -- ? ) [ object = ] all? not ; -: input-mismatch-quot ( word types -- quot ) - [ input-mismatch-error ] 2curry ; - : depends-on-unboxing ( class -- ) [ dup tuple-layout depends-on-tuple-layout ] [ depends-on-final ] @@ -47,7 +44,7 @@ PREDICATE: typed-word < word "typed-word" word-prop >boolean ; :: unboxer ( error-quot word types type -- quot ) type "coercer" word-prop [ ] or - [ dup type instance? [ word types error-quot call ] unless ] + type type word types error-quot '[ dup _ instance? [ _ _ _ @ ] unless ] type (unboxer) compose compose ; From cdea2fa081b7f73019f8dd05e09c1144666f9c7d Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Mon, 14 Jun 2010 16:12:48 -0700 Subject: [PATCH 20/40] prettyprint.backend: add 1 to nesting-limit while pprinting hashtables 'cause H{ ~array~ ~array~ } is kind of useless --- basis/prettyprint/backend/backend.factor | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/basis/prettyprint/backend/backend.factor b/basis/prettyprint/backend/backend.factor index 7d0cb40576..201a1c28d2 100644 --- a/basis/prettyprint/backend/backend.factor +++ b/basis/prettyprint/backend/backend.factor @@ -226,7 +226,9 @@ M: object pprint-object ( obj -- ) M: object pprint* pprint-object ; M: vector pprint* pprint-object ; M: byte-vector pprint* pprint-object ; -M: hashtable pprint* pprint-object ; +M: hashtable pprint* + nesting-limit inc + [ pprint-object ] [ nesting-limit dec ] [ ] cleanup ; M: curry pprint* pprint-object ; M: compose pprint* pprint-object ; M: hash-set pprint* pprint-object ; From b4fcaab607fc4aabcac9fa1034f17cad5b2cda38 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Sun, 13 Jun 2010 17:36:08 -0400 Subject: [PATCH 21/40] Add GC maps to ##box, ##box-long-long, ##alien-invoke, ##alien-indirect and ##call-gc; remove ##gc-map instruction --- basis/compiler/cfg/builder/alien/alien.factor | 4 +- .../cfg/builder/alien/boxing/boxing.factor | 6 +-- .../cfg/finalization/finalization.factor | 10 ++-- basis/compiler/cfg/gc-checks/gc-checks.factor | 38 +++------------ .../cfg/instructions/instructions.factor | 33 +++++++++---- .../linear-scan/assignment/assignment.factor | 6 ++- basis/compiler/cfg/liveness/liveness.factor | 29 +++++++++--- .../stacks/uninitialized/uninitialized.factor | 30 ++++++------ basis/compiler/codegen/codegen.factor | 1 - .../compiler/codegen/fixup/fixup-tests.factor | 15 ++++-- basis/compiler/codegen/fixup/fixup.factor | 46 +++++++++++-------- basis/cpu/architecture/architecture.factor | 15 +++--- basis/cpu/x86/32/32.factor | 27 +++++------ basis/cpu/x86/64/64.factor | 23 +++++----- basis/cpu/x86/x86.factor | 11 ++--- vm/collector.hpp | 2 + vm/contexts.cpp | 10 ++++ vm/slot_visitor.hpp | 8 ++++ 18 files changed, 176 insertions(+), 138 deletions(-) diff --git a/basis/compiler/cfg/builder/alien/alien.factor b/basis/compiler/cfg/builder/alien/alien.factor index 7bf45e959a..04ac2bf496 100644 --- a/basis/compiler/cfg/builder/alien/alien.factor +++ b/basis/compiler/cfg/builder/alien/alien.factor @@ -102,7 +102,7 @@ M: #alien-invoke emit-node [ { [ caller-parameters ] - [ ##prepare-var-args alien-invoke-dlsym ##alien-invoke ] + [ ##prepare-var-args alien-invoke-dlsym <gc-map> ##alien-invoke ] [ emit-stack-frame ] [ box-return* ] } cleave @@ -111,7 +111,7 @@ M: #alien-invoke emit-node M:: #alien-indirect emit-node ( node -- ) node [ D 0 ^^peek -1 ##inc-d ^^unbox-any-c-ptr :> src - [ caller-parameters src ##alien-indirect ] + [ caller-parameters src <gc-map> ##alien-indirect ] [ emit-stack-frame ] [ box-return* ] tri diff --git a/basis/compiler/cfg/builder/alien/boxing/boxing.factor b/basis/compiler/cfg/builder/alien/boxing/boxing.factor index 6f5f46b9c1..1992d7539a 100644 --- a/basis/compiler/cfg/builder/alien/boxing/boxing.factor +++ b/basis/compiler/cfg/builder/alien/boxing/boxing.factor @@ -105,13 +105,13 @@ M: struct-c-type flatten-parameter-type frob-struct flatten-c-type ; GENERIC: box ( vregs reps c-type -- dst ) M: c-type box - [ first ] [ drop ] [ [ boxer>> ] [ rep>> ] bi ] tri* ^^box ; + [ first ] [ drop ] [ [ boxer>> ] [ rep>> ] bi ] tri* <gc-map> ^^box ; M: long-long-type box - [ first2 ] [ drop ] [ boxer>> ] tri* ^^box-long-long ; + [ first2 ] [ drop ] [ boxer>> ] tri* <gc-map> ^^box-long-long ; M: struct-c-type box - '[ _ heap-size ^^allot-byte-array dup ^^unbox-byte-array ] 2dip + '[ _ heap-size <gc-map> ^^allot-byte-array dup ^^unbox-byte-array ] 2dip implode-struct ; GENERIC: box-parameter ( vregs reps c-type -- dst ) diff --git a/basis/compiler/cfg/finalization/finalization.factor b/basis/compiler/cfg/finalization/finalization.factor index 5440ba6eef..83bcc0b0b1 100644 --- a/basis/compiler/cfg/finalization/finalization.factor +++ b/basis/compiler/cfg/finalization/finalization.factor @@ -1,15 +1,17 @@ ! Copyright (C) 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: compiler.cfg.gc-checks compiler.cfg.representations -compiler.cfg.save-contexts compiler.cfg.ssa.destruction -compiler.cfg.build-stack-frame compiler.cfg.linear-scan -compiler.cfg.scheduling ; +USING: kernel compiler.cfg.gc-checks +compiler.cfg.representations compiler.cfg.save-contexts +compiler.cfg.ssa.destruction compiler.cfg.build-stack-frame +compiler.cfg.linear-scan compiler.cfg.scheduling +compiler.cfg.stacks.uninitialized ; IN: compiler.cfg.finalization : finalize-cfg ( cfg -- cfg' ) select-representations schedule-instructions insert-gc-checks + dup compute-uninitialized-sets insert-save-contexts destruct-ssa linear-scan diff --git a/basis/compiler/cfg/gc-checks/gc-checks.factor b/basis/compiler/cfg/gc-checks/gc-checks.factor index 60f81f77d9..50cd67567c 100644 --- a/basis/compiler/cfg/gc-checks/gc-checks.factor +++ b/basis/compiler/cfg/gc-checks/gc-checks.factor @@ -9,10 +9,7 @@ compiler.cfg.registers compiler.cfg.utilities compiler.cfg.comparisons compiler.cfg.instructions -compiler.cfg.predecessors -compiler.cfg.liveness -compiler.cfg.liveness.ssa -compiler.cfg.stacks.uninitialized ; +compiler.cfg.predecessors ; IN: compiler.cfg.gc-checks <PRIVATE @@ -50,12 +47,9 @@ IN: compiler.cfg.gc-checks ] bi* ] V{ } make >>instructions ; -: scrubbed ( uninitialized-locs -- scrub-d scrub-r ) - [ ds-loc? ] partition [ [ n>> ] map ] bi@ ; - -: <gc-call> ( uninitialized-locs gc-roots -- bb ) - [ <basic-block> ] 2dip - [ [ scrubbed ] dip ##gc-map ##call-gc ##branch ] V{ } make +: <gc-call> ( -- bb ) + <basic-block> + [ <gc-map> ##call-gc ##branch ] V{ } make >>instructions t >>unlikely? ; :: insert-guard ( body check bb -- ) @@ -69,7 +63,7 @@ IN: compiler.cfg.gc-checks check predecessors>> [ bb check update-successors ] each ; -: (insert-gc-check) ( uninitialized-locs gc-roots phis size bb -- ) +: (insert-gc-check) ( phis size bb -- ) [ [ <gc-call> ] 2dip <gc-check> ] dip insert-guard ; GENERIC: allocation-size* ( insn -- n ) @@ -85,35 +79,17 @@ M: ##box-displaced-alien allocation-size* drop 5 cells ; [ ##allocation? ] filter [ allocation-size* data-alignment get align ] map-sum ; -: gc-live-in ( bb -- vregs ) - [ live-in keys ] [ instructions>> [ ##phi? ] filter [ dst>> ] map ] bi - append ; - -: live-tagged ( bb -- vregs ) - gc-live-in [ rep-of tagged-rep? ] filter ; - : remove-phis ( bb -- phis ) [ [ ##phi? ] partition ] change-instructions drop ; : insert-gc-check ( bb -- ) - { - [ uninitialized-locs ] - [ live-tagged ] - [ remove-phis ] - [ allocation-size ] - [ ] - } cleave - (insert-gc-check) ; + [ remove-phis ] [ allocation-size ] [ ] tri (insert-gc-check) ; PRIVATE> : insert-gc-checks ( cfg -- cfg' ) dup blocks-with-gc [ - [ - needs-predecessors - dup compute-ssa-live-sets - dup compute-uninitialized-sets - ] dip + [ needs-predecessors ] dip [ insert-gc-check ] each cfg-changed ] unless-empty ; diff --git a/basis/compiler/cfg/instructions/instructions.factor b/basis/compiler/cfg/instructions/instructions.factor index b46a42d8d5..39d2ab81cd 100644 --- a/basis/compiler/cfg/instructions/instructions.factor +++ b/basis/compiler/cfg/instructions/instructions.factor @@ -670,27 +670,28 @@ literal: size align offset ; INSN: ##box def: dst/tagged-rep use: src -literal: boxer rep ; +literal: boxer rep gc-map ; INSN: ##box-long-long def: dst/tagged-rep use: src1/int-rep src2/int-rep -literal: boxer ; +literal: boxer gc-map ; INSN: ##allot-byte-array def: dst/tagged-rep -literal: size ; +literal: size gc-map ; INSN: ##prepare-var-args ; INSN: ##alien-invoke -literal: symbols dll ; +literal: symbols dll gc-map ; INSN: ##cleanup literal: n ; INSN: ##alien-indirect -use: src/int-rep ; +use: src/int-rep +literal: gc-map ; INSN: ##alien-assembly literal: quot ; @@ -819,10 +820,7 @@ INSN: ##check-nursery-branch literal: size cc temp: temp1/int-rep temp2/int-rep ; -INSN: ##call-gc ; - -INSN: ##gc-map -literal: scrub-d scrub-r gc-roots ; +INSN: ##call-gc literal: gc-map ; ! Spills and reloads, inserted by register allocator TUPLE: spill-slot { n integer } ; @@ -860,6 +858,23 @@ UNION: conditional-branch-insn UNION: ##read ##slot ##slot-imm ##vm-field ##alien-global ; UNION: ##write ##set-slot ##set-slot-imm ##set-vm-field ; +! Instructions that contain subroutine calls to functions which +! allocate memory +UNION: gc-map-insn +##call-gc +##alien-invoke +##alien-indirect +##box +##box-long-long +##allot-byte-array ; + +M: gc-map-insn clone call-next-method [ clone ] change-gc-map ; + +! Each one has a gc-map slot +TUPLE: gc-map scrub-d scrub-r gc-roots ; + +: <gc-map> ( -- gc-map ) gc-map new ; + ! Instructions that clobber registers. They receive inputs and ! produce outputs in spill slots. UNION: hairy-clobber-insn diff --git a/basis/compiler/cfg/linear-scan/assignment/assignment.factor b/basis/compiler/cfg/linear-scan/assignment/assignment.factor index e6d220a90c..cab4438ec9 100644 --- a/basis/compiler/cfg/linear-scan/assignment/assignment.factor +++ b/basis/compiler/cfg/linear-scan/assignment/assignment.factor @@ -142,8 +142,10 @@ RENAMING: assign [ vreg>reg ] [ vreg>reg ] [ vreg>reg ] M: vreg-insn assign-registers-in-insn [ assign-insn-defs ] [ assign-insn-uses ] [ assign-insn-temps ] tri ; -M: ##gc-map assign-registers-in-insn - [ [ vreg>reg ] map ] change-gc-roots drop ; +M: gc-map-insn assign-registers-in-insn + [ [ assign-insn-defs ] [ assign-insn-uses ] [ assign-insn-temps ] tri ] + [ gc-map>> [ [ vreg>reg ] map ] change-gc-roots drop ] + bi ; M: insn assign-registers-in-insn drop ; diff --git a/basis/compiler/cfg/liveness/liveness.factor b/basis/compiler/cfg/liveness/liveness.factor index a10b48cc0c..1a5287355d 100644 --- a/basis/compiler/cfg/liveness/liveness.factor +++ b/basis/compiler/cfg/liveness/liveness.factor @@ -1,25 +1,40 @@ -! Copyright (C) 2009 Slava Pestov. +! Copyright (C) 2009, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel accessors assocs sequences sets compiler.cfg.def-use compiler.cfg.dataflow-analysis -compiler.cfg.instructions ; +compiler.cfg.instructions compiler.cfg.registers +cpu.architecture ; IN: compiler.cfg.liveness ! See http://en.wikipedia.org/wiki/Liveness_analysis -! Do not run after SSA construction +! Do not run after SSA construction; compiler.cfg.liveness.ssa +! should be used instead. The transfer-liveness word is used +! by SSA liveness too, so it handles ##phi instructions. BACKWARD-ANALYSIS: live -GENERIC: insn-liveness ( live-set insn -- ) +GENERIC: visit-insn ( live-set insn -- live-set ) : kill-defs ( live-set insn -- live-set ) - defs-vreg [ over delete-at ] when* ; + defs-vreg [ over delete-at ] when* ; inline : gen-uses ( live-set insn -- live-set ) - dup ##phi? [ drop ] [ uses-vregs [ over conjoin ] each ] if ; + uses-vregs [ over conjoin ] each ; inline + +M: vreg-insn visit-insn [ kill-defs ] [ gen-uses ] bi ; + +: fill-gc-map ( live-set insn -- live-set ) + gc-map>> over keys [ rep-of tagged-rep? ] filter >>gc-roots drop ; + +M: gc-map-insn visit-insn + [ kill-defs ] [ fill-gc-map ] [ gen-uses ] tri ; + +M: ##phi visit-insn kill-defs ; + +M: insn visit-insn drop ; : transfer-liveness ( live-set instructions -- live-set' ) - [ clone ] [ <reversed> ] bi* [ [ kill-defs ] [ gen-uses ] bi ] each ; + [ clone ] [ <reversed> ] bi* [ visit-insn ] each ; : local-live-in ( instructions -- live-set ) [ H{ } ] dip transfer-liveness keys ; diff --git a/basis/compiler/cfg/stacks/uninitialized/uninitialized.factor b/basis/compiler/cfg/stacks/uninitialized/uninitialized.factor index 982e9b872c..7498cddf10 100644 --- a/basis/compiler/cfg/stacks/uninitialized/uninitialized.factor +++ b/basis/compiler/cfg/stacks/uninitialized/uninitialized.factor @@ -9,11 +9,17 @@ IN: compiler.cfg.stacks.uninitialized ! Consider the following sequence of instructions: ! ##inc-d 2 -! ##gc +! ... +! ##allot ! ##replace ... D 0 ! ##replace ... D 1 -! The GC check runs before stack locations 0 and 1 have been initialized, -! and it needs to zero them out so that GC doesn't try to trace them. +! The GC check runs before stack locations 0 and 1 have been +! initialized, and so the GC needs to scrub them so that they +! don't get traced. This is achieved by computing uninitialized +! locations with a dataflow analysis, and recording the +! information in GC maps. The scrub_contexts() method on +! vm/gc.cpp reads this information from GC maps and performs +! the scrubbing. <PRIVATE @@ -28,7 +34,6 @@ GENERIC: visit-insn ( insn -- ) ] change ; M: ##inc-d visit-insn n>> ds-loc handle-inc ; - M: ##inc-r visit-insn n>> rs-loc handle-inc ; ERROR: uninitialized-peek insn ; @@ -46,6 +51,12 @@ M: ##peek visit-insn visit-peek ; M: ##replace visit-insn visit-replace ; M: ##replace-imm visit-insn visit-replace ; +M: gc-map-insn visit-insn + gc-map>> + ds-loc get clone >>scrub-d + rs-loc get clone >>scrub-r + drop ; + M: insn visit-insn drop ; : prepare ( pair -- ) @@ -59,9 +70,6 @@ M: insn visit-insn drop ; : (join-sets) ( seq1 seq2 -- seq ) 2dup [ length ] bi@ max '[ _ 1 pad-tail ] bi@ [ bitand ] 2map ; -: (uninitialized-locs) ( seq quot -- seq' ) - [ [ drop 0 = ] selector [ each-index ] dip ] dip map ; inline - PRIVATE> FORWARD-ANALYSIS: uninitialized @@ -71,11 +79,3 @@ M: uninitialized-analysis transfer-set ( pair bb analysis -- pair' ) M: uninitialized-analysis join-sets ( sets analysis -- pair ) 2drop sift [ f ] [ [ ] [ [ (join-sets) ] 2map ] map-reduce ] if-empty ; - -: uninitialized-locs ( bb -- locs ) - uninitialized-in dup [ - first2 - [ [ <ds-loc> ] (uninitialized-locs) ] - [ [ <rs-loc> ] (uninitialized-locs) ] - bi* append f like - ] when ; diff --git a/basis/compiler/codegen/codegen.factor b/basis/compiler/codegen/codegen.factor index f33999ab89..68b01beed9 100755 --- a/basis/compiler/codegen/codegen.factor +++ b/basis/compiler/codegen/codegen.factor @@ -258,7 +258,6 @@ CODEGEN: ##restore-context %restore-context CODEGEN: ##vm-field %vm-field CODEGEN: ##set-vm-field %set-vm-field CODEGEN: ##alien-global %alien-global -CODEGEN: ##gc-map %gc-map CODEGEN: ##call-gc %call-gc CODEGEN: ##spill %spill CODEGEN: ##reload %reload diff --git a/basis/compiler/codegen/fixup/fixup-tests.factor b/basis/compiler/codegen/fixup/fixup-tests.factor index fcb33e4937..f068861126 100644 --- a/basis/compiler/codegen/fixup/fixup-tests.factor +++ b/basis/compiler/codegen/fixup/fixup-tests.factor @@ -1,6 +1,7 @@ USING: namespaces byte-arrays make compiler.codegen.fixup bit-arrays accessors classes.struct tools.test kernel math -sequences alien.c-types specialized-arrays boxes ; +sequences alien.c-types specialized-arrays boxes +compiler.cfg.instructions system cpu.architecture ; SPECIALIZED-ARRAY: uint IN: compiler.codegen.fixup.tests @@ -10,19 +11,23 @@ STRUCT: gc-info { gc-root-count uint } { return-address-count uint } ; +SINGLETON: fake-cpu + +fake-cpu \ cpu set + +M: fake-cpu gc-root-offsets ; + [ ] [ [ init-fixup 50 <byte-array> % - { { } { } { } } set-next-gc-map - gc-map-here + T{ gc-map f B{ } B{ } V{ } } gc-map-here 50 <byte-array> % - { { 0 4 } { 1 } { 1 3 } } set-next-gc-map - gc-map-here + T{ gc-map f B{ 0 1 1 1 0 } B{ 1 0 } V{ 1 3 } } gc-map-here emit-gc-info ] B{ } make diff --git a/basis/compiler/codegen/fixup/fixup.factor b/basis/compiler/codegen/fixup/fixup.factor index f0730e91d8..b4ef317b67 100644 --- a/basis/compiler/codegen/fixup/fixup.factor +++ b/basis/compiler/codegen/fixup/fixup.factor @@ -4,8 +4,9 @@ USING: arrays bit-arrays byte-arrays byte-vectors generic assocs hashtables io.binary kernel kernel.private math namespaces make sequences words quotations strings alien.accessors alien.strings layouts system combinators math.bitwise math.order -combinators.smart accessors growable fry compiler.constants -memoize boxes ; +combinators.short-circuit combinators.smart accessors growable +fry memoize compiler.constants compiler.cfg.instructions +cpu.architecture ; IN: compiler.codegen.fixup ! Utilities @@ -149,30 +150,37 @@ MEMO: cached-string>symbol ( symbol -- obj ) string>symbol ; ! uint <largest GC root spill slot> ! uint <number of return addresses> -SYMBOLS: next-gc-map return-addresses gc-maps ; +SYMBOLS: return-addresses gc-maps ; -: gc-map? ( triple -- ? ) +: gc-map-needed? ( gc-map -- ? ) ! If there are no stack locations to scrub and no GC roots, ! there's no point storing the GC map. - [ empty? not ] any? ; + dup [ + { + [ scrub-d>> empty? ] + [ scrub-r>> empty? ] + [ gc-roots>> empty? ] + } 1&& not + ] when ; -: gc-map-here ( -- ) - next-gc-map get box> dup gc-map? [ +: gc-map-here ( gc-map -- ) + dup gc-map-needed? [ gc-maps get push compiled-offset return-addresses get push ] [ drop ] if ; -: set-next-gc-map ( gc-map -- ) next-gc-map get >box ; +: emit-scrub ( seqs -- n ) + ! seqs is a sequence of sequences of 0/1 + dup [ length ] [ max ] map-reduce + [ '[ [ 0 = ] ?{ } map-as _ f pad-tail % ] each ] keep ; : integers>bits ( seq n -- bit-array ) <bit-array> [ '[ [ t ] dip _ set-nth ] each ] keep ; -: emit-bitmap ( seqs -- n ) +: emit-gc-roots ( seqs -- n ) ! seqs is a sequence of sequences of integers 0..n-1 - [ 0 ] [ - dup [ [ 0 ] [ supremum 1 + ] if-empty ] [ max ] map-reduce - [ '[ _ integers>bits % ] each ] keep - ] if-empty ; + dup [ [ 0 ] [ supremum 1 + ] if-empty ] [ max ] map-reduce + [ '[ _ integers>bits % ] each ] keep ; : emit-uint ( n -- ) building get push-uint ; @@ -182,9 +190,9 @@ SYMBOLS: next-gc-map return-addresses gc-maps ; return-addresses get empty? [ 0 emit-uint ] [ gc-maps get [ - [ [ first ] map emit-bitmap ] - [ [ second ] map emit-bitmap ] - [ [ third ] map emit-bitmap ] tri + [ [ scrub-d>> ] map emit-scrub ] + [ [ scrub-r>> ] map emit-scrub ] + [ [ gc-roots>> gc-root-offsets ] map emit-gc-roots ] tri ] ?{ } make underlying>> % return-addresses get [ emit-uint ] each [ emit-uint ] tri@ @@ -208,12 +216,10 @@ SYMBOLS: next-gc-map return-addresses gc-maps ; BV{ } clone relocation-table set V{ } clone binary-literal-table set V{ } clone return-addresses set - V{ } clone gc-maps set - <box> next-gc-map set ; + V{ } clone gc-maps set ; : check-fixup ( seq -- ) - length data-alignment get mod 0 assert= - next-gc-map get occupied>> f assert= ; + length data-alignment get mod 0 assert= ; : with-fixup ( quot -- code ) '[ diff --git a/basis/cpu/architecture/architecture.factor b/basis/cpu/architecture/architecture.factor index 279947bd43..931dccece1 100644 --- a/basis/cpu/architecture/architecture.factor +++ b/basis/cpu/architecture/architecture.factor @@ -225,6 +225,8 @@ M: object vm-stack-space 0 ; ! %store-memory work HOOK: complex-addressing? cpu ( -- ? ) +HOOK: gc-root-offsets cpu ( seq -- seq' ) + HOOK: %load-immediate cpu ( reg val -- ) HOOK: %load-reference cpu ( reg obj -- ) HOOK: %load-float cpu ( reg val -- ) @@ -488,8 +490,7 @@ HOOK: %write-barrier-imm cpu ( src slot tag temp1 temp2 -- ) ! GC checks HOOK: %check-nursery-branch cpu ( label size cc temp1 temp2 -- ) -HOOK: %gc-map cpu ( scrub-d scrub-r gc-roots -- ) -HOOK: %call-gc cpu ( -- ) +HOOK: %call-gc cpu ( gc-map -- ) HOOK: %prologue cpu ( n -- ) HOOK: %epilogue cpu ( n -- ) @@ -595,11 +596,11 @@ HOOK: %local-allot cpu ( dst size align offset -- ) ! Call a function to convert a value into a tagged pointer, ! possibly allocating a bignum, float, or alien instance, ! which is then pushed on the data stack -HOOK: %box cpu ( dst src func rep -- ) +HOOK: %box cpu ( dst src func rep gc-map -- ) -HOOK: %box-long-long cpu ( dst src1 src2 func -- ) +HOOK: %box-long-long cpu ( dst src1 src2 func gc-map -- ) -HOOK: %allot-byte-array cpu ( dst size -- ) +HOOK: %allot-byte-array cpu ( dst size gc-map -- ) HOOK: %restore-context cpu ( temp1 temp2 -- ) @@ -609,13 +610,13 @@ HOOK: %prepare-var-args cpu ( -- ) M: object %prepare-var-args ; -HOOK: %alien-invoke cpu ( function library -- ) +HOOK: %alien-invoke cpu ( function library gc-map -- ) HOOK: %cleanup cpu ( n -- ) M: object %cleanup ( n -- ) drop ; -HOOK: %alien-indirect cpu ( src -- ) +HOOK: %alien-indirect cpu ( src gc-map -- ) HOOK: %load-reg-param cpu ( dst reg rep -- ) diff --git a/basis/cpu/x86/32/32.factor b/basis/cpu/x86/32/32.factor index 50835affb0..48cc88a4f8 100755 --- a/basis/cpu/x86/32/32.factor +++ b/basis/cpu/x86/32/32.factor @@ -134,7 +134,7 @@ M: x86.32 %store-reg-param ( src reg rep -- ) EAX src tagged-rep %copy 4 save-vm-ptr 0 stack@ EAX MOV - func f %alien-invoke ; + func f f %alien-invoke ; M:: x86.32 %unbox ( dst src func rep -- ) src func call-unbox-func @@ -146,36 +146,37 @@ M:: x86.32 %unbox-long-long ( src out func -- ) EAX out int-rep %copy 4 stack@ EAX MOV 8 save-vm-ptr - func f %alien-invoke ; + func f f %alien-invoke ; -M:: x86.32 %box ( dst src func rep -- ) +M:: x86.32 %box ( dst src func rep gc-map -- ) rep rep-size save-vm-ptr src rep %store-return 0 stack@ rep %load-return - func f %alien-invoke + func f gc-map %alien-invoke dst EAX tagged-rep %copy ; -M:: x86.32 %box-long-long ( dst src1 src2 func -- ) +M:: x86.32 %box-long-long ( dst src1 src2 func gc-map -- ) 8 save-vm-ptr EAX src1 int-rep %copy 0 stack@ EAX int-rep %copy EAX src2 int-rep %copy 4 stack@ EAX int-rep %copy - func f %alien-invoke + func f gc-map %alien-invoke dst EAX tagged-rep %copy ; -M:: x86.32 %allot-byte-array ( dst size -- ) +M:: x86.32 %allot-byte-array ( dst size gc-map -- ) 4 save-vm-ptr 0 stack@ size MOV - "allot_byte_array" f %alien-invoke + "allot_byte_array" f gc-map %alien-invoke dst EAX tagged-rep %copy ; -M: x86.32 %alien-invoke 0 CALL rc-relative rel-dlsym ; +M: x86.32 %alien-invoke + [ 0 CALL rc-relative rel-dlsym ] dip gc-map-here ; M: x86.32 %begin-callback ( -- ) 0 save-vm-ptr 4 stack@ 0 MOV - "begin_callback" f %alien-invoke ; + "begin_callback" f f %alien-invoke ; M: x86.32 %alien-callback ( quot -- ) [ EAX ] dip %load-reference @@ -183,7 +184,7 @@ M: x86.32 %alien-callback ( quot -- ) M: x86.32 %end-callback ( -- ) 0 save-vm-ptr - "end_callback" f %alien-invoke ; + "end_callback" f f %alien-invoke ; GENERIC: float-function-param ( n dst src -- ) @@ -198,13 +199,13 @@ M:: register float-function-param ( n dst src -- ) M:: x86.32 %unary-float-function ( dst src func -- ) 0 dst src float-function-param - func "libm" load-library %alien-invoke + func "libm" load-library f %alien-invoke dst double-rep %load-return ; M:: x86.32 %binary-float-function ( dst src1 src2 func -- ) 0 dst src1 float-function-param 8 dst src2 float-function-param - func "libm" load-library %alien-invoke + func "libm" load-library f %alien-invoke dst double-rep %load-return ; : funny-large-struct-return? ( return abi -- ? ) diff --git a/basis/cpu/x86/64/64.factor b/basis/cpu/x86/64/64.factor index 65acdfbeb9..7a5e8a1af3 100644 --- a/basis/cpu/x86/64/64.factor +++ b/basis/cpu/x86/64/64.factor @@ -90,30 +90,29 @@ M:: x86.64 %store-reg-param ( src reg rep -- ) M:: x86.64 %unbox ( dst src func rep -- ) param-reg-0 src tagged-rep %copy param-reg-1 %mov-vm-ptr - func f %alien-invoke + func f f %alien-invoke dst rep %load-return ; -M:: x86.64 %box ( dst src func rep -- ) +M:: x86.64 %box ( dst src func rep gc-map -- ) 0 rep reg-class-of cdecl param-regs at nth src rep %copy rep int-rep? os windows? or param-reg-1 param-reg-0 ? %mov-vm-ptr - func f %alien-invoke + func f gc-map %alien-invoke dst int-rep %load-return ; -M:: x86.64 %allot-byte-array ( dst size -- ) +M:: x86.64 %allot-byte-array ( dst size gc-map -- ) param-reg-0 size MOV param-reg-1 %mov-vm-ptr - "allot_byte_array" f %alien-invoke + "allot_byte_array" f gc-map %alien-invoke dst int-rep %load-return ; M: x86.64 %alien-invoke - R11 0 MOV - rc-absolute-cell rel-dlsym - R11 CALL ; + [ R11 0 MOV rc-absolute-cell rel-dlsym R11 CALL ] dip + gc-map-here ; M: x86.64 %begin-callback ( -- ) param-reg-0 %mov-vm-ptr param-reg-1 0 MOV - "begin_callback" f %alien-invoke ; + "begin_callback" f f %alien-invoke ; M: x86.64 %alien-callback ( quot -- ) [ param-reg-0 ] dip %load-reference @@ -121,14 +120,14 @@ M: x86.64 %alien-callback ( quot -- ) M: x86.64 %end-callback ( -- ) param-reg-0 %mov-vm-ptr - "end_callback" f %alien-invoke ; + "end_callback" f f %alien-invoke ; : float-function-param ( i src -- ) [ float-regs cdecl param-regs at nth ] dip double-rep %copy ; M:: x86.64 %unary-float-function ( dst src func -- ) 0 src float-function-param - func "libm" load-library %alien-invoke + func "libm" load-library f %alien-invoke dst double-rep %load-return ; M:: x86.64 %binary-float-function ( dst src1 src2 func -- ) @@ -136,7 +135,7 @@ M:: x86.64 %binary-float-function ( dst src1 src2 func -- ) ! src2 is always a spill slot 0 src1 float-function-param 1 src2 float-function-param - func "libm" load-library %alien-invoke + func "libm" load-library f %alien-invoke dst double-rep %load-return ; M: x86.64 long-long-on-stack? f ; diff --git a/basis/cpu/x86/x86.factor b/basis/cpu/x86/x86.factor index 05251818b5..d3adcf3960 100644 --- a/basis/cpu/x86/x86.factor +++ b/basis/cpu/x86/x86.factor @@ -480,13 +480,10 @@ M:: x86 %check-nursery-branch ( label size cc temp1 temp2 -- ) { cc/<= [ label JG ] } } case ; -: gc-root-offsets ( seq -- seq' ) +M: x86 gc-root-offsets [ n>> spill-offset special-offset cell + cell /i ] map f like ; -M: x86 %gc-map ( scrub-d scrub-r gc-roots -- ) - gc-root-offsets 3array set-next-gc-map ; - -M: x86 %call-gc +M: x86 %call-gc ( gc-map -- ) \ minor-gc %call gc-map-here ; @@ -612,8 +609,8 @@ M:: x86 %load-stack-param ( dst n rep -- ) M:: x86 %local-allot ( dst size align offset -- ) dst offset local-allot-offset special-offset stack@ LEA ; -M: x86 %alien-indirect ( src -- ) - ?spill-slot CALL ; +M: x86 %alien-indirect ( src gc-map -- ) + [ ?spill-slot CALL ] [ gc-map-here ] bi* ; M: x86 %loop-entry 16 alignment [ NOP ] times ; diff --git a/vm/collector.hpp b/vm/collector.hpp index 400e15b974..4a9eec5967 100644 --- a/vm/collector.hpp +++ b/vm/collector.hpp @@ -43,6 +43,8 @@ template<typename TargetGeneration, typename Policy> struct gc_workhorse : no_fi object *fixup_data(object *obj) { + parent->check_data_pointer(obj); + if(!policy.should_copy_p(obj)) { policy.visited_object(obj); diff --git a/vm/contexts.cpp b/vm/contexts.cpp index 6247b879c6..8ec3363662 100644 --- a/vm/contexts.cpp +++ b/vm/contexts.cpp @@ -65,7 +65,12 @@ void context::scrub_stacks(gc_info *info, cell index) for(cell loc = 0; loc < info->scrub_d_count; loc++) { if(bitmap_p(bitmap,base + loc)) + { +#ifdef DEBUG_GC_MAPS + std::cout << "scrubbing datastack location " << loc << std::endl; +#endif ((cell *)datastack)[-loc] = 0; + } } } @@ -75,7 +80,12 @@ void context::scrub_stacks(gc_info *info, cell index) for(cell loc = 0; loc < info->scrub_r_count; loc++) { if(bitmap_p(bitmap,base + loc)) + { +#ifdef DEBUG_GC_MAPS + std::cout << "scrubbing retainstack location " << loc << std::endl; +#endif ((cell *)retainstack)[-loc] = 0; + } } } } diff --git a/vm/slot_visitor.hpp b/vm/slot_visitor.hpp index ba78b4b76c..4223f94a57 100644 --- a/vm/slot_visitor.hpp +++ b/vm/slot_visitor.hpp @@ -296,6 +296,9 @@ struct call_frame_slot_visitor { if(index == -1) return; +#ifdef DEBUG_GC_MAPS + std::cout << "call frame code block " << compiled << " with offset " << return_address << std::endl; +#endif u8 *bitmap = info->gc_info_bitmap(); cell base = info->spill_slot_base(index); cell *stack_pointer = (cell *)(parent->frame_successor(frame) + 1); @@ -303,7 +306,12 @@ struct call_frame_slot_visitor { for(cell spill_slot = 0; spill_slot < info->gc_root_count; spill_slot++) { if(bitmap_p(bitmap,base + spill_slot)) + { +#ifdef DEBUG_GC_MAPS + std::cout << "visiting spill slot " << spill_slot << std::endl; +#endif visitor->visit_handle(&stack_pointer[spill_slot]); + } } } }; From 7fb0c25621cceb477b544bb64b707526b532a2dd Mon Sep 17 00:00:00 2001 From: Joe Groff <joe@victoria.(none)> Date: Tue, 15 Jun 2010 13:40:40 -0700 Subject: [PATCH 22/40] opengl.glu: add DESTRUCTOR: and CALLBACK: definitions for GLU tessellator --- extra/opengl/glu/glu.factor | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/extra/opengl/glu/glu.factor b/extra/opengl/glu/glu.factor index 856740d229..678e780e60 100644 --- a/extra/opengl/glu/glu.factor +++ b/extra/opengl/glu/glu.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005 Alex Chapman. ! See http://factorcode.org/license.txt for BSD license. USING: alien alien.c-types alien.libraries alien.syntax kernel -sequences words system combinators opengl.gl ; +sequences words system combinators opengl.gl alien.destructors ; IN: opengl.glu << @@ -267,5 +267,21 @@ FUNCTION: GLint gluUnProject ( GLdouble winX, GLdouble winY, GLdouble winZ, GLdo ! FUNCTION: GLboolean gluCheckExtension ( GLubyte* extName, GLubyte* extString ) ; ! FUNCTION: GLint gluUnProject4 ( GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, GLdouble* model, GLdouble* proj, GLint* view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW ) ; +DESTRUCTOR: gluDeleteNurbsRenderer +DESTRUCTOR: gluDeleteQuadric +DESTRUCTOR: gluDeleteTess + +CALLBACK: void GLUtessBeginCallback ( GLenum type ) ; +CALLBACK: void GLUtessBeginDataCallback ( GLenum type, void* data ) ; +CALLBACK: void GLUtessEdgeFlagCallback ( GLboolean flag ) ; +CALLBACK: void GLUtessEdgeFlagDataCallback ( GLboolean flag, void* data ) ; +CALLBACK: void GLUtessVertexCallback ( void* vertex_data ) ; +CALLBACK: void GLUtessVertexDataCallback ( void* vertex_data, void* data ) ; +CALLBACK: void GLUtessEndCallback ( ) ; +CALLBACK: void GLUtessEndDataCallback ( void* data ) ; +CALLBACK: void GLUtessCombineDataCallback ( GLdouble* coords, void** vertex_data, GLfloat* weight, void** out_data, void* data ) ; +CALLBACK: void GLUtessErrorCallback ( GLenum errno ) ; +CALLBACK: void GLUtessErrorDataCallback ( GLenum errno, void* data ) ; + : gl-look-at ( eye focus up -- ) [ first3 ] tri@ gluLookAt ; From 71042ccd876756b8730c70a725c53cd459b72168 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Tue, 15 Jun 2010 17:17:37 -0400 Subject: [PATCH 23/40] compiler.cfg.ssa: fixing test failures --- basis/compiler/cfg/gc-checks/gc-checks-tests.factor | 10 ++++------ .../cfg/ssa/interference/interference-tests.factor | 2 +- .../stacks/uninitialized/uninitialized-tests.factor | 6 +++--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/basis/compiler/cfg/gc-checks/gc-checks-tests.factor b/basis/compiler/cfg/gc-checks/gc-checks-tests.factor index 698caa5e68..d8745c0784 100644 --- a/basis/compiler/cfg/gc-checks/gc-checks-tests.factor +++ b/basis/compiler/cfg/gc-checks/gc-checks-tests.factor @@ -42,13 +42,12 @@ V{ [ V{ - T{ ##gc-map f V{ 0 } V{ 3 } { 0 1 2 } } - T{ ##call-gc } + T{ ##call-gc f T{ gc-map } } T{ ##branch } } ] [ - V{ D 0 R 3 } { 0 1 2 } <gc-call> instructions>> + <gc-call> instructions>> ] unit-test 30 \ vreg-counter set-global @@ -82,7 +81,7 @@ V{ [ ] [ cfg get needs-predecessors drop ] unit-test -[ ] [ { D 1 R 2 } { 10 20 } V{ } 31337 3 get (insert-gc-check) ] unit-test +[ ] [ V{ } 31337 3 get (insert-gc-check) ] unit-test [ t ] [ 1 get successors>> first gc-check? ] unit-test @@ -146,8 +145,7 @@ H{ [ V{ - T{ ##gc-map f V{ 0 1 2 } V{ } { 2 } } - T{ ##call-gc } + T{ ##call-gc f T{ gc-map } } T{ ##branch } } ] [ 2 get predecessors>> second instructions>> ] unit-test diff --git a/basis/compiler/cfg/ssa/interference/interference-tests.factor b/basis/compiler/cfg/ssa/interference/interference-tests.factor index 4e3da1c6dc..36c03bc6af 100644 --- a/basis/compiler/cfg/ssa/interference/interference-tests.factor +++ b/basis/compiler/cfg/ssa/interference/interference-tests.factor @@ -182,7 +182,7 @@ V{ V{ T{ ##save-context f 77 78 } - T{ ##call-gc f { } } + T{ ##call-gc f T{ gc-map } } T{ ##branch } } 2 test-bb diff --git a/basis/compiler/cfg/stacks/uninitialized/uninitialized-tests.factor b/basis/compiler/cfg/stacks/uninitialized/uninitialized-tests.factor index 61c3cd67d1..fb9c833136 100644 --- a/basis/compiler/cfg/stacks/uninitialized/uninitialized-tests.factor +++ b/basis/compiler/cfg/stacks/uninitialized/uninitialized-tests.factor @@ -29,8 +29,8 @@ V{ [ ] [ test-uninitialized ] unit-test -[ V{ D 0 D 1 D 2 } ] [ 1 get uninitialized-locs ] unit-test -[ V{ R 0 } ] [ 2 get uninitialized-locs ] unit-test +[ { B{ 0 0 0 } B{ } } ] [ 1 get uninitialized-in ] unit-test +[ { B{ 1 1 1 } B{ 0 } } ] [ 2 get uninitialized-in ] unit-test ! When merging, if a location is uninitialized in one branch and ! initialized in another, we have to consider it uninitialized, @@ -57,4 +57,4 @@ V{ [ ] [ test-uninitialized ] unit-test -[ V{ D 0 } ] [ 3 get uninitialized-locs ] unit-test +[ { B{ 0 } B{ } } ] [ 3 get uninitialized-in ] unit-test From ff3daa5092bfbd26ac43eef2f3e30a492dd99d47 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Tue, 15 Jun 2010 18:32:13 -0400 Subject: [PATCH 24/40] pop3: fix tests to not hang if openssl is not installed --- extra/pop3/pop3-tests.factor | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extra/pop3/pop3-tests.factor b/extra/pop3/pop3-tests.factor index 8efc07ceee..10c5024d58 100644 --- a/extra/pop3/pop3-tests.factor +++ b/extra/pop3/pop3-tests.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Elie Chaftari. ! See http://factorcode.org/license.txt for BSD license. USING: concurrency.promises namespaces kernel pop3 pop3.server -sequences tools.test accessors ; +sequences tools.test accessors calendar ; IN: pop3.tests FROM: pop3 => count delete ; @@ -12,7 +12,7 @@ FROM: pop3 => count delete ; [ ] [ <pop3-account> "127.0.0.1" >>host - "p1" get ?promise >>port + "p1" get 5 seconds ?promise-timeout >>port connect ] unit-test [ ] [ "username@host.com" >user ] unit-test @@ -59,7 +59,7 @@ FROM: pop3 => count delete ; [ ] [ <pop3-account> "127.0.0.1" >>host - "p2" get ?promise >>port + "p2" get 5 seconds ?promise-timeout >>port "username@host.com" >>user "password" >>pwd connect From 9a47e0004cc040c9e07f05ffb28f66562bbf289c Mon Sep 17 00:00:00 2001 From: Joe Groff <joe@victoria.(none)> Date: Tue, 15 Jun 2010 15:31:19 -0700 Subject: [PATCH 25/40] new vocab alien.handles: generate integer handles to allow references to Factor objects to be passed through the FFI --- extra/alien/handles/authors.txt | 1 + extra/alien/handles/handles-tests.factor | 45 ++++++++++++++++++++++ extra/alien/handles/handles.factor | 49 ++++++++++++++++++++++++ extra/alien/handles/summary.txt | 1 + 4 files changed, 96 insertions(+) create mode 100644 extra/alien/handles/authors.txt create mode 100644 extra/alien/handles/handles-tests.factor create mode 100644 extra/alien/handles/handles.factor create mode 100644 extra/alien/handles/summary.txt diff --git a/extra/alien/handles/authors.txt b/extra/alien/handles/authors.txt new file mode 100644 index 0000000000..f13c9c1e77 --- /dev/null +++ b/extra/alien/handles/authors.txt @@ -0,0 +1 @@ +Joe Groff diff --git a/extra/alien/handles/handles-tests.factor b/extra/alien/handles/handles-tests.factor new file mode 100644 index 0000000000..38ce7c26c7 --- /dev/null +++ b/extra/alien/handles/handles-tests.factor @@ -0,0 +1,45 @@ +! (c)2010 Joe Groff bsd license +USING: accessors alien alien.c-types alien.handles alien.syntax +destructors kernel math tools.test ; +IN: alien.handles.tests + +TUPLE: thingy { x integer } ; +C: <thingy> thingy + +CALLBACK: int thingy-callback ( uint thingy-handle ) ; +CALLBACK: int thingy-ptr-callback ( void* thingy-handle ) ; + +: test-thingy-callback ( -- alien ) + [ alien-handle> x>> 1 + ] thingy-callback ; + +: test-thingy-ptr-callback ( -- alien ) + [ alien-handle-ptr> x>> 1 + ] thingy-ptr-callback ; + +: invoke-test-thingy-callback ( thingy -- n ) + test-thingy-callback int { uint } cdecl alien-indirect ; +: invoke-test-thingy-ptr-callback ( thingy -- n ) + test-thingy-ptr-callback int { void* } cdecl alien-indirect ; + +[ t f ] [ + [ 5 <thingy> <alien-handle> &release-alien-handle [ alien-handle? ] keep ] with-destructors + alien-handle? +] unit-test + +[ t f ] [ + [ 5 <thingy> <alien-handle-ptr> &release-alien-handle-ptr [ alien-handle-ptr? ] keep ] with-destructors + alien-handle-ptr? +] unit-test + +[ 6 ] [ + [ + 5 <thingy> <alien-handle> &release-alien-handle + invoke-test-thingy-callback + ] with-destructors +] unit-test + +[ 6 ] [ + [ + 5 <thingy> <alien-handle-ptr> &release-alien-handle-ptr + invoke-test-thingy-ptr-callback + ] with-destructors +] unit-test diff --git a/extra/alien/handles/handles.factor b/extra/alien/handles/handles.factor new file mode 100644 index 0000000000..e1b5a716d2 --- /dev/null +++ b/extra/alien/handles/handles.factor @@ -0,0 +1,49 @@ +! (c)2010 Joe Groff bsd license +USING: alien alien.destructors assocs kernel math math.bitwise +namespaces ; +IN: alien.handles + +<PRIVATE + +SYMBOLS: alien-handle-counter alien-handles ; + +alien-handle-counter [ 0 ] initialize +alien-handles [ H{ } clone ] initialize + +: biggest-handle ( -- n ) + -1 32 bits ; inline + +: (next-handle) ( -- n ) + alien-handle-counter [ 1 + biggest-handle bitand dup ] change-global ; inline + +: next-handle ( -- n ) + [ (next-handle) dup alien-handles get-global key? ] [ drop ] while ; + +PRIVATE> + +: <alien-handle> ( object -- int ) + next-handle [ alien-handles get-global set-at ] keep ; inline +: alien-handle> ( int -- object ) + alien-handles get-global at ; inline + +: alien-handle? ( int -- ? ) + alien-handles get-global key? >boolean ; inline + +: release-alien-handle ( int -- ) + alien-handles get-global delete-at ; inline + +DESTRUCTOR: release-alien-handle + +: <alien-handle-ptr> ( object -- void* ) + <alien-handle> <alien> ; inline +: alien-handle-ptr> ( void* -- object ) + alien-address alien-handle> ; inline + +: alien-handle-ptr? ( alien -- ? ) + alien-address alien-handle? ; inline + +: release-alien-handle-ptr ( alien -- ) + alien-address release-alien-handle ; inline + +DESTRUCTOR: release-alien-handle-ptr + diff --git a/extra/alien/handles/summary.txt b/extra/alien/handles/summary.txt new file mode 100644 index 0000000000..17c2a240cd --- /dev/null +++ b/extra/alien/handles/summary.txt @@ -0,0 +1 @@ +Generate integer handle values to allow Factor object references to be passed through the FFI From 6e9235b54bcdfc2cdece438b76d8d114cf5fa322 Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Thu, 10 Jun 2010 16:49:59 -0700 Subject: [PATCH 26/40] classes.struct: fix some bugs in binary-zero?, add unit tests --- basis/classes/struct/struct-tests.factor | 2 +- basis/classes/struct/struct.factor | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index 8bdfb8dd57..ed941fed62 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -9,6 +9,7 @@ system tools.test parser lexer eval layouts generic.single classes vocabs ; FROM: math => float ; FROM: specialized-arrays.private => specialized-array-vocab ; +FROM: classes.struct.private => binary-zero? ; QUALIFIED-WITH: alien.c-types c SPECIALIZED-ARRAY: char SPECIALIZED-ARRAY: int @@ -474,4 +475,3 @@ CONSULT: struct-test-delegate struct-test-delegator del>> ; 7 >>a 8 >>b ] unit-test - diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index c15e21f651..4660f06d58 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -11,6 +11,7 @@ namespaces assocs vocabs.parser math.functions classes.struct.bit-accessors bit-arrays stack-checker.dependencies system layouts ; FROM: delegate.private => group-words slot-group-words ; +FROM: math => float ; QUALIFIED: math IN: classes.struct From ec2b8da7c7c5712bd687273434ae4fa4daba4afb Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 16:21:00 -0500 Subject: [PATCH 27/40] conflicts --- basis/classes/struct/struct-tests.factor | 5 ++++- basis/classes/struct/struct.factor | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index ed941fed62..ae39f62868 100644 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -9,7 +9,6 @@ system tools.test parser lexer eval layouts generic.single classes vocabs ; FROM: math => float ; FROM: specialized-arrays.private => specialized-array-vocab ; -FROM: classes.struct.private => binary-zero? ; QUALIFIED-WITH: alien.c-types c SPECIALIZED-ARRAY: char SPECIALIZED-ARRAY: int @@ -475,3 +474,7 @@ CONSULT: struct-test-delegate struct-test-delegator del>> ; 7 >>a 8 >>b ] unit-test +<<<<<<< HEAD +======= + +>>>>>>> alien.data: make binary-zero? public and move it from classes.struct.private diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index 4660f06d58..c15e21f651 100644 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -11,7 +11,6 @@ namespaces assocs vocabs.parser math.functions classes.struct.bit-accessors bit-arrays stack-checker.dependencies system layouts ; FROM: delegate.private => group-words slot-group-words ; -FROM: math => float ; QUALIFIED: math IN: classes.struct From 6dc9e9f1081c488fdee2ca750ce158aed2cf2704 Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Tue, 15 Jun 2010 21:55:26 -0700 Subject: [PATCH 28/40] math.vectors.simd.cords: use head-slice/tail-slice to slice up input sequences for >A op so that e.g. float-4{ ... } >double-4 works --- basis/math/vectors/simd/cords/cords.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basis/math/vectors/simd/cords/cords.factor b/basis/math/vectors/simd/cords/cords.factor index 4d98af538f..cc3aa023e7 100644 --- a/basis/math/vectors/simd/cords/cords.factor +++ b/basis/math/vectors/simd/cords/cords.factor @@ -28,8 +28,8 @@ BOA-EFFECT [ N 2 * "n" <array> { "v" } <effect> ] WHERE : >A ( seq -- A ) - [ N head >A/2 ] - [ N tail >A/2 ] bi cord-append ; + [ N head-slice >A/2 ] + [ N tail-slice >A/2 ] bi cord-append ; \ A-boa { N ndip A/2-boa cord-append } { A/2-boa } >quotation prefix >quotation From 8a770e0534c771f7fad483834d1d4fc9a24f040f Mon Sep 17 00:00:00 2001 From: Joe Groff <arcata@gmail.com> Date: Tue, 15 Jun 2010 22:44:15 -0700 Subject: [PATCH 29/40] math.vectors.simd.cords: add regression test for >A --- basis/math/vectors/simd/cords/cords-tests.factor | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 basis/math/vectors/simd/cords/cords-tests.factor diff --git a/basis/math/vectors/simd/cords/cords-tests.factor b/basis/math/vectors/simd/cords/cords-tests.factor new file mode 100644 index 0000000000..eee11b396a --- /dev/null +++ b/basis/math/vectors/simd/cords/cords-tests.factor @@ -0,0 +1,4 @@ +USING: math.vectors.simd math.vectors.simd.cords tools.test ; +IN: math.vectors.simd.cords.tests + +[ float-4{ 1.0 2.0 3.0 4.0 } ] [ double-4{ 1.0 2.0 3.0 4.0 } >float-4 ] unit-test From d9bd3d572ef41d9d63ca7cbe3d398d7e32eaef15 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 10:07:24 -0500 Subject: [PATCH 30/40] Fix load error in game.loop --- extra/game/loop/loop-docs.factor | 21 --------------------- extra/game/loop/loop.factor | 6 ------ 2 files changed, 27 deletions(-) diff --git a/extra/game/loop/loop-docs.factor b/extra/game/loop/loop-docs.factor index 6dbef30442..c42e39e17b 100644 --- a/extra/game/loop/loop-docs.factor +++ b/extra/game/loop/loop-docs.factor @@ -26,22 +26,6 @@ $nl { <game-loop> <game-loop*> } related-words -HELP: benchmark-frames-per-second -{ $values - { "loop" game-loop } - { "n" float } -} -{ $description "Returns the average number of times per second the game loop has called " { $link draw* } " on its delegate since the game loop was started with " { $link start-loop } "." } ; - -HELP: benchmark-ticks-per-second -{ $values - { "loop" game-loop } - { "n" float } -} -{ $description "Returns the average number of times per second the game loop has called " { $link tick* } " on its tick delegate since the game loop was started." } ; - -{ benchmark-frames-per-second benchmark-ticks-per-second } related-words - HELP: draw* { $values { "tick-slice" float } { "delegate" "a " { $link "game.loop-delegates" } } @@ -103,11 +87,6 @@ ARTICLE: "game.loop" "Game loops" start-loop stop-loop } -"The game loop maintains performance counters:" -{ $subsections - benchmark-frames-per-second - benchmark-ticks-per-second -} "The game loop catches errors that occur in the delegate's methods during the course of the game loop:" { $subsections game-loop-error diff --git a/extra/game/loop/loop.factor b/extra/game/loop/loop.factor index 48f9ca83ea..8fc3fc232e 100644 --- a/extra/game/loop/loop.factor +++ b/extra/game/loop/loop.factor @@ -88,12 +88,6 @@ TUPLE: game-loop-error game-loop error ; PRIVATE> -! : benchmark-ticks-per-second ( loop -- n ) - ! [ tick#>> ] [ benchmark-tick#>> - ] [ benchmark-nanos ] tri /f ; - -! : benchmark-frames-per-second ( loop -- n ) - ! [ frame#>> ] [ benchmark-frame#>> - ] [ benchmark-nanos ] tri /f ; - : (game-tick) ( loop -- ) dup running?>> [ [ MAX-FRAMES-TO-SKIP ?tick ] [ redraw ] bi ] From d41feef57c9c5b99257d6bfe8beb44824ba8bd93 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 15:32:20 -0500 Subject: [PATCH 31/40] Add utility word --- basis/timers/timers.factor | 3 +++ 1 file changed, 3 insertions(+) diff --git a/basis/timers/timers.factor b/basis/timers/timers.factor index ab6b4d63fb..a12ecba830 100644 --- a/basis/timers/timers.factor +++ b/basis/timers/timers.factor @@ -117,3 +117,6 @@ PRIVATE> : delayed-every ( quot duration -- timer ) dup (start-timer) ; + +: nanos-since ( nano-count -- nanos ) + [ nano-count ] dip - ; From 6a501d4aa3e9cc3308d065adfa2b7a9c1b54de57 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 15:32:50 -0500 Subject: [PATCH 32/40] Add a promise to world objects that gets fulfilled when the world is ungrafted --- basis/ui/gadgets/worlds/worlds.factor | 15 +++++++++------ basis/ui/ui.factor | 15 ++++++++------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/basis/ui/gadgets/worlds/worlds.factor b/basis/ui/gadgets/worlds/worlds.factor index a63d64312b..e713b0f999 100644 --- a/basis/ui/gadgets/worlds/worlds.factor +++ b/basis/ui/gadgets/worlds/worlds.factor @@ -1,10 +1,11 @@ ! Copyright (C) 2005, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays assocs continuations kernel math models -namespaces opengl opengl.textures sequences io colors combinators -combinators.short-circuit fry math.vectors math.rectangles cache -ui.gadgets ui.gestures ui.render ui.backend ui.gadgets.tracks -ui.pixel-formats destructors literals strings ; +USING: accessors arrays assocs cache colors combinators +combinators.short-circuit concurrency.promises continuations +destructors fry io kernel literals math math.rectangles +math.vectors models namespaces opengl opengl.textures sequences +strings ui.backend ui.gadgets ui.gadgets.tracks ui.gestures +ui.pixel-formats ui.render ; IN: ui.gadgets.worlds SYMBOLS: @@ -40,6 +41,7 @@ TUPLE: world < track window-loc pixel-format-attributes background-color + promise window-controls window-resources ; @@ -118,7 +120,8 @@ M: world request-focus-on ( child gadget -- ) f >>active? { 0 0 } >>window-loc f >>grab-input? - V{ } clone >>window-resources ; + V{ } clone >>window-resources + <promise> >>promise ; : initial-background-color ( attributes -- color ) window-controls>> textured-background swap member-eq? diff --git a/basis/ui/ui.factor b/basis/ui/ui.factor index 1e5af88ac8..eaeeb01f03 100644 --- a/basis/ui/ui.factor +++ b/basis/ui/ui.factor @@ -1,12 +1,12 @@ ! Copyright (C) 2006, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays assocs boxes io kernel math models namespaces make -dlists deques sequences threads words continuations init -combinators combinators.short-circuit hashtables -concurrency.flags sets accessors calendar fry destructors -ui.gadgets ui.gadgets.private ui.gadgets.worlds -ui.gadgets.tracks ui.gestures ui.backend ui.render strings -classes.tuple classes.tuple.parser lexer vocabs.parser parser ; +USING: accessors arrays assocs boxes classes.tuple +classes.tuple.parser combinators combinators.short-circuit +concurrency.flags concurrency.promises continuations deques +destructors dlists fry init kernel lexer make math namespaces +parser sequences sets strings threads ui.backend ui.gadgets +ui.gadgets.private ui.gadgets.worlds ui.gestures vocabs.parser +words ; IN: ui <PRIVATE @@ -94,6 +94,7 @@ M: world ungraft* [ [ <reversed> [ [ dispose ] when* ] each V{ } clone ] change-window-resources drop ] [ [ (close-window) f ] change-handle drop ] [ unfocus-world ] + [ promise>> t swap fulfill ] } cleave ; : init-ui ( -- ) From 22faa12205cc7666e6884af5ca5b75beb281235e Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 16:05:35 -0500 Subject: [PATCH 33/40] Add a word that waits for a game to finish running --- extra/game/worlds/worlds.factor | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extra/game/worlds/worlds.factor b/extra/game/worlds/worlds.factor index 8e51563b62..a04ac3f195 100644 --- a/extra/game/worlds/worlds.factor +++ b/extra/game/worlds/worlds.factor @@ -74,6 +74,9 @@ M: game-world apply-world-attributes : start-game ( attributes -- game-world ) f swap open-window* ; +: wait-game ( attributes -- game-world ) + f swap open-window* dup promise>> ?promise drop ; + : define-attributes-word ( word tuple -- ) [ name>> "-attributes" append create-in ] dip define-constant ; From d4e30aedcfe28236e4ad3b38d6e7d88c2b6cae39 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 16:09:51 -0500 Subject: [PATCH 34/40] Use two timers in game.loop --- extra/game/loop/loop.factor | 74 +++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/extra/game/loop/loop.factor b/extra/game/loop/loop.factor index 8fc3fc232e..ddb5f8b17d 100644 --- a/extra/game/loop/loop.factor +++ b/extra/game/loop/loop.factor @@ -3,18 +3,18 @@ USING: accessors timers alien.c-types calendar classes.struct continuations destructors fry kernel math math.order memory namespaces sequences specialized-vectors system tools.memory ui ui.gadgets.worlds vm vocabs.loader arrays -benchmark.struct ; +benchmark.struct locals ; IN: game.loop TUPLE: game-loop { tick-interval-nanos integer read-only } tick-delegate draw-delegate - { last-tick integer } { running? boolean } { tick# integer } { frame# integer } - timer + tick-timer + draw-timer benchmark-data ; STRUCT: game-loop-benchmark @@ -33,16 +33,6 @@ SPECIALIZED-VECTOR: game-loop-benchmark GENERIC: tick* ( delegate -- ) GENERIC: draw* ( tick-slice delegate -- ) -SYMBOL: game-loop - -: since-last-tick ( loop -- nanos ) - last-tick>> nano-count swap - ; - -: tick-slice ( loop -- slice ) - [ since-last-tick ] [ tick-interval-nanos>> ] bi /f 1.0 min ; - -CONSTANT: MAX-FRAMES-TO-SKIP 5 - DEFER: stop-loop TUPLE: game-loop-error game-loop error ; @@ -54,7 +44,7 @@ TUPLE: game-loop-error game-loop error ; [ drop stop-loop ] [ \ game-loop-error boa ?ui-error ] 2bi ; : fps ( fps -- nanos ) - 1,000,000,000 swap /i ; inline + [ 1,000,000,000 ] dip /i ; inline <PRIVATE @@ -63,10 +53,15 @@ TUPLE: game-loop-error game-loop error ; [ frame#>> <game-loop-benchmark> ] [ benchmark-data>> ] tri push ; +: last-tick-percent-offset ( loop -- float ) + [ draw-timer>> iteration-start-nanos>> nano-count swap - ] + [ tick-interval-nanos>> ] bi /f 1.0 min ; + : redraw ( loop -- ) [ 1 + ] change-frame# [ - [ tick-slice ] [ draw-delegate>> ] bi [ draw* ] with-benchmarking + [ last-tick-percent-offset ] [ draw-delegate>> ] bi + [ draw* ] with-benchmarking ] keep record-benchmarking ; : tick ( loop -- ) @@ -76,43 +71,41 @@ TUPLE: game-loop-error game-loop error ; : increment-tick ( loop -- ) [ 1 + ] change-tick# - dup tick-interval-nanos>> '[ _ + ] change-last-tick drop ; -: ?tick ( loop count -- ) - [ nano-count >>last-tick drop ] [ - over [ since-last-tick ] [ tick-interval-nanos>> ] bi >= - [ [ drop increment-tick ] [ drop tick ] [ 1 - ?tick ] 2tri ] - [ 2drop ] if - ] if-zero ; - PRIVATE> -: (game-tick) ( loop -- ) - dup running?>> - [ [ MAX-FRAMES-TO-SKIP ?tick ] [ redraw ] bi ] - [ drop ] if ; - -: game-tick ( loop -- ) - dup game-loop [ - [ (game-tick) ] [ game-loop-error ] recover - ] with-variable ; +:: when-running ( loop quot -- ) + [ + loop + dup running?>> quot [ drop ] if + ] [ + loop game-loop-error + ] recover ; inline + +: tick-iteration ( loop -- ) + [ [ tick ] [ increment-tick ] bi ] when-running ; + +: frame-iteration ( loop -- ) + [ redraw ] when-running ; : start-loop ( loop -- ) - nano-count >>last-tick t >>running? - [ - [ '[ _ game-tick ] f ] - [ tick-interval-nanos>> nanoseconds ] bi - <timer> - ] keep [ timer<< ] [ drop start-timer ] 2bi ; + + dup + [ '[ _ tick-iteration ] f ] + [ tick-interval-nanos>> nanoseconds ] bi <timer> >>tick-timer + + dup '[ _ frame-iteration ] f 1 milliseconds <timer> >>draw-timer + + [ tick-timer>> ] [ draw-timer>> ] bi [ start-timer ] bi@ ; : stop-loop ( loop -- ) f >>running? - timer>> stop-timer ; + [ tick-timer>> ] [ draw-timer>> ] bi [ stop-timer ] bi@ ; : <game-loop*> ( tick-interval-nanos tick-delegate draw-delegate -- loop ) - nano-count f 0 0 f + f 0 0 f f game-loop-benchmark-vector{ } clone game-loop boa ; @@ -123,4 +116,3 @@ M: game-loop dispose stop-loop ; { "game.loop" "prettyprint" } "game.loop.prettyprint" require-when - From 11d20228f1789f0f29796740d77e34cd21526bdc Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 17:42:15 -0500 Subject: [PATCH 35/40] Implement set-time on Windows --- basis/calendar/windows/windows.factor | 27 +++++++++++++++++++++++++- basis/windows/kernel32/kernel32.factor | 2 +- extra/time/time.factor | 9 ++++++++- extra/time/windows/authors.txt | 1 + extra/time/windows/windows.factor | 12 ++++++++++++ 5 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 extra/time/windows/authors.txt create mode 100644 extra/time/windows/windows.factor diff --git a/basis/calendar/windows/windows.factor b/basis/calendar/windows/windows.factor index 265a58507c..abec2dcf9f 100644 --- a/basis/calendar/windows/windows.factor +++ b/basis/calendar/windows/windows.factor @@ -1,6 +1,6 @@ USING: calendar namespaces alien.c-types system windows.kernel32 kernel math combinators windows.errors -accessors classes.struct ; +accessors classes.struct calendar.format math.functions ; IN: calendar.windows M: windows gmt-offset ( -- hours minutes seconds ) @@ -11,3 +11,28 @@ M: windows gmt-offset ( -- hours minutes seconds ) { TIME_ZONE_ID_STANDARD [ Bias>> ] } { TIME_ZONE_ID_DAYLIGHT [ [ Bias>> ] [ DaylightBias>> ] bi + ] } } case neg 60 /mod 0 ; + +: timestamp>SYSTEMTIME ( timestamp -- SYSTEMTIME ) + { + [ year>> ] + [ month>> ] + [ day-of-week ] + [ day>> ] + [ hour>> ] + [ minute>> ] + [ + second>> dup floor + [ nip >integer ] + [ - 1000 * >integer ] 2bi + ] + } cleave \ SYSTEMTIME <struct-boa> ; + +: SYSTEMTIME>timestamp ( SYSTEMTIME -- timestamp ) + { + [ wYear>> ] + [ wMonth>> ] + [ wDay>> ] + [ wHour>> ] + [ wMinute>> ] + [ [ wSecond>> ] [ wMilliseconds>> 1000 /f ] bi + ] + } cleave gmt-offset-duration <timestamp> ; diff --git a/basis/windows/kernel32/kernel32.factor b/basis/windows/kernel32/kernel32.factor index 94cedef38a..be11fc66a0 100644 --- a/basis/windows/kernel32/kernel32.factor +++ b/basis/windows/kernel32/kernel32.factor @@ -1800,7 +1800,7 @@ FUNCTION: BOOL SetProcessPriorityBoost ( HANDLE hProcess, BOOL disablePriorityBo ! FUNCTION: SetProcessWorkingSetSize ! FUNCTION: SetStdHandle ! FUNCTION: SetSystemPowerState -! FUNCTION: SetSystemTime +FUNCTION: BOOL SetSystemTime ( SYSTEMTIME* lpSystemTime ) ; ! FUNCTION: SetSystemTimeAdjustment ! FUNCTION: SetTapeParameters ! FUNCTION: SetTapePosition diff --git a/extra/time/time.factor b/extra/time/time.factor index 45ba3bc141..61a4d7415e 100644 --- a/extra/time/time.factor +++ b/extra/time/time.factor @@ -1,7 +1,14 @@ ! Copyright (C) 2010 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: system ; +USING: combinators kernel system vocabs.loader ; IN: time HOOK: set-time os ( timestamp -- ) HOOK: adjust-time-monotonic os ( timestamp -- seconds ) + +os { + { [ dup macosx? ] [ drop "time.macosx" require ] } + { [ dup windows? ] [ drop "time.windows" require ] } + { [ dup unix? ] [ drop "time.unix" require ] } + [ drop ] +} cond diff --git a/extra/time/windows/authors.txt b/extra/time/windows/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/time/windows/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/time/windows/windows.factor b/extra/time/windows/windows.factor new file mode 100644 index 0000000000..1f2259d137 --- /dev/null +++ b/extra/time/windows/windows.factor @@ -0,0 +1,12 @@ +! Copyright (C) 2010 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: calendar.windows system time windows.errors +windows.kernel32 kernel classes.struct calendar ; +IN: time.windows + +: windows-system-time ( -- SYSTEMTIME ) + SYSTEMTIME <struct> [ GetSystemTime ] keep ; + +M: windows set-time + >gmt + timestamp>SYSTEMTIME SetSystemTime win32-error=0/f ; From 09db1a9608603ee70d2e18311e37fc048fb4d31f Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 22:04:41 -0500 Subject: [PATCH 36/40] Add platforms.txt files to time vocab --- extra/time/macosx/platforms.txt | 1 + extra/time/unix/platforms.txt | 1 + extra/time/windows/platforms.txt | 1 + 3 files changed, 3 insertions(+) create mode 100644 extra/time/macosx/platforms.txt create mode 100644 extra/time/unix/platforms.txt create mode 100644 extra/time/windows/platforms.txt diff --git a/extra/time/macosx/platforms.txt b/extra/time/macosx/platforms.txt new file mode 100644 index 0000000000..6e806f449e --- /dev/null +++ b/extra/time/macosx/platforms.txt @@ -0,0 +1 @@ +macosx diff --git a/extra/time/unix/platforms.txt b/extra/time/unix/platforms.txt new file mode 100644 index 0000000000..509143d863 --- /dev/null +++ b/extra/time/unix/platforms.txt @@ -0,0 +1 @@ +unix diff --git a/extra/time/windows/platforms.txt b/extra/time/windows/platforms.txt new file mode 100644 index 0000000000..8e1a55995e --- /dev/null +++ b/extra/time/windows/platforms.txt @@ -0,0 +1 @@ +windows From 570801ff3dec572c7b76b52d122265d12937b96b Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 23:20:00 -0500 Subject: [PATCH 37/40] Use nano_count instead of system_micros --- vm/factor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/factor.cpp b/vm/factor.cpp index 9c56575009..6a6d7f55f9 100755 --- a/vm/factor.cpp +++ b/vm/factor.cpp @@ -123,7 +123,7 @@ void factor_vm::init_factor(vm_parameters *p) if(p->image_path == NULL) p->image_path = default_image_path(); - srand((unsigned int)system_micros()); + srand((unsigned int)nano_count()); init_ffi(); init_contexts(p->datastack_size,p->retainstack_size,p->callstack_size); init_callbacks(p->callback_size); From e8d528ad93d29a9312d07358ccad3217c0a51cba Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Wed, 16 Jun 2010 23:39:16 -0500 Subject: [PATCH 38/40] Remove system_micros from vm, implement gmt hook on windows --- basis/calendar/calendar.factor | 6 ++---- basis/calendar/windows/windows.factor | 25 ++++++++++++++----------- core/bootstrap/primitives.factor | 1 - extra/time/windows/windows.factor | 3 --- vm/os-unix.cpp | 7 ------- vm/os-unix.hpp | 1 - vm/os-windows-ce.cpp | 10 ---------- vm/os-windows-ce.hpp | 1 - vm/os-windows-nt.cpp | 8 -------- vm/os-windows.hpp | 1 - vm/primitives.hpp | 1 - vm/run.cpp | 5 ----- vm/vm.hpp | 1 - 13 files changed, 16 insertions(+), 54 deletions(-) diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor index 8758b8198b..d9a6dfb370 100644 --- a/basis/calendar/calendar.factor +++ b/basis/calendar/calendar.factor @@ -7,6 +7,8 @@ IN: calendar HOOK: gmt-offset os ( -- hours minutes seconds ) +HOOK: gmt os ( -- timestamp ) + TUPLE: duration { year real } { month real } @@ -371,10 +373,6 @@ M: duration time- : timestamp>micros ( timestamp -- n ) unix-1970 (time-) 1000000 * >integer ; -: gmt ( -- timestamp ) - #! GMT time, right now - unix-1970 system-micros microseconds time+ ; - : now ( -- timestamp ) gmt >local-time ; : hence ( duration -- timestamp ) now swap time+ ; : ago ( duration -- timestamp ) now swap time- ; diff --git a/basis/calendar/windows/windows.factor b/basis/calendar/windows/windows.factor index abec2dcf9f..80253ea91b 100644 --- a/basis/calendar/windows/windows.factor +++ b/basis/calendar/windows/windows.factor @@ -3,15 +3,6 @@ windows.kernel32 kernel math combinators windows.errors accessors classes.struct calendar.format math.functions ; IN: calendar.windows -M: windows gmt-offset ( -- hours minutes seconds ) - TIME_ZONE_INFORMATION <struct> - dup GetTimeZoneInformation { - { TIME_ZONE_ID_INVALID [ win32-error-string throw ] } - { TIME_ZONE_ID_UNKNOWN [ Bias>> ] } - { TIME_ZONE_ID_STANDARD [ Bias>> ] } - { TIME_ZONE_ID_DAYLIGHT [ [ Bias>> ] [ DaylightBias>> ] bi + ] } - } case neg 60 /mod 0 ; - : timestamp>SYSTEMTIME ( timestamp -- SYSTEMTIME ) { [ year>> ] @@ -34,5 +25,17 @@ M: windows gmt-offset ( -- hours minutes seconds ) [ wDay>> ] [ wHour>> ] [ wMinute>> ] - [ [ wSecond>> ] [ wMilliseconds>> 1000 /f ] bi + ] - } cleave gmt-offset-duration <timestamp> ; + [ [ wSecond>> ] [ wMilliseconds>> 1000 / ] bi + ] + } cleave instant <timestamp> ; + +M: windows gmt-offset ( -- hours minutes seconds ) + TIME_ZONE_INFORMATION <struct> + dup GetTimeZoneInformation { + { TIME_ZONE_ID_INVALID [ win32-error-string throw ] } + { TIME_ZONE_ID_UNKNOWN [ Bias>> ] } + { TIME_ZONE_ID_STANDARD [ Bias>> ] } + { TIME_ZONE_ID_DAYLIGHT [ [ Bias>> ] [ DaylightBias>> ] bi + ] } + } case neg 60 /mod 0 ; + +M: windows gmt + SYSTEMTIME <struct> [ GetSystemTime ] keep SYSTEMTIME>timestamp ; diff --git a/core/bootstrap/primitives.factor b/core/bootstrap/primitives.factor index c00199e9b3..07f6e9ef9a 100644 --- a/core/bootstrap/primitives.factor +++ b/core/bootstrap/primitives.factor @@ -536,7 +536,6 @@ tuple { "set-string-nth-fast" "strings.private" "primitive_set_string_nth_fast" (( ch n string -- )) } { "(exit)" "system" "primitive_exit" (( n -- * )) } { "nano-count" "system" "primitive_nano_count" (( -- ns )) } - { "system-micros" "system" "primitive_system_micros" (( -- us )) } { "(sleep)" "threads.private" "primitive_sleep" (( nanos -- )) } { "callstack-for" "threads.private" "primitive_callstack_for" (( context -- array )) } { "context-object-for" "threads.private" "primitive_context_object_for" (( n context -- obj )) } diff --git a/extra/time/windows/windows.factor b/extra/time/windows/windows.factor index 1f2259d137..e5d7f918d9 100644 --- a/extra/time/windows/windows.factor +++ b/extra/time/windows/windows.factor @@ -4,9 +4,6 @@ USING: calendar.windows system time windows.errors windows.kernel32 kernel classes.struct calendar ; IN: time.windows -: windows-system-time ( -- SYSTEMTIME ) - SYSTEMTIME <struct> [ GetSystemTime ] keep ; - M: windows set-time >gmt timestamp>SYSTEMTIME SetSystemTime win32-error=0/f ; diff --git a/vm/os-unix.cpp b/vm/os-unix.cpp index 034dfcbf5f..e95b84f51a 100644 --- a/vm/os-unix.cpp +++ b/vm/os-unix.cpp @@ -19,13 +19,6 @@ THREADHANDLE start_thread(void *(*start_routine)(void *),void *args) static void *null_dll; -u64 system_micros() -{ - struct timeval t; - gettimeofday(&t,NULL); - return (u64)t.tv_sec * 1000000 + t.tv_usec; -} - void sleep_nanos(u64 nsec) { timespec ts; diff --git a/vm/os-unix.hpp b/vm/os-unix.hpp index 3673c4e121..54e9d068ef 100644 --- a/vm/os-unix.hpp +++ b/vm/os-unix.hpp @@ -42,7 +42,6 @@ inline static THREADHANDLE thread_id() { return pthread_self(); } void signal_handler(int signal, siginfo_t* siginfo, void* uap); void dump_stack_signal(int signal, siginfo_t* siginfo, void* uap); -u64 system_micros(); u64 nano_count(); void sleep_nanos(u64 nsec); void open_console(); diff --git a/vm/os-windows-ce.cpp b/vm/os-windows-ce.cpp index a57db667c4..65e8ef5b09 100644 --- a/vm/os-windows-ce.cpp +++ b/vm/os-windows-ce.cpp @@ -3,16 +3,6 @@ namespace factor { -u64 system_micros() -{ - SYSTEMTIME st; - FILETIME ft; - GetSystemTime(&st); - SystemTimeToFileTime(&st, &ft); - return (((s64)ft.dwLowDateTime - | (s64)ft.dwHighDateTime<<32) - EPOCH_OFFSET) / 10; -} - char *strerror(int err) { /* strerror() is not defined on WinCE */ diff --git a/vm/os-windows-ce.hpp b/vm/os-windows-ce.hpp index 02de1cd4a8..892fc88be9 100755 --- a/vm/os-windows-ce.hpp +++ b/vm/os-windows-ce.hpp @@ -21,7 +21,6 @@ char *getenv(char *name); #define snprintf _snprintf #define snwprintf _snwprintf -u64 system_micros(); void c_to_factor_toplevel(cell quot); void open_console(); diff --git a/vm/os-windows-nt.cpp b/vm/os-windows-nt.cpp index 97cd2146af..7fdb882122 100755 --- a/vm/os-windows-nt.cpp +++ b/vm/os-windows-nt.cpp @@ -8,14 +8,6 @@ THREADHANDLE start_thread(void *(*start_routine)(void *), void *args) return (void *)CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0); } -u64 system_micros() -{ - FILETIME t; - GetSystemTimeAsFileTime(&t); - return (((u64)t.dwLowDateTime | (u64)t.dwHighDateTime<<32) - - EPOCH_OFFSET) / 10; -} - u64 nano_count() { static double scale_factor; diff --git a/vm/os-windows.hpp b/vm/os-windows.hpp index 020a506038..ad8a9907a7 100755 --- a/vm/os-windows.hpp +++ b/vm/os-windows.hpp @@ -45,7 +45,6 @@ typedef wchar_t vm_char; inline static void early_init() {} -u64 system_micros(); u64 nano_count(); void sleep_nanos(u64 nsec); long getpagesize(); diff --git a/vm/primitives.hpp b/vm/primitives.hpp index 9cda1db9a8..5df73f5fac 100644 --- a/vm/primitives.hpp +++ b/vm/primitives.hpp @@ -125,7 +125,6 @@ namespace factor _(special_object) \ _(string) \ _(strip_stack_traces) \ - _(system_micros) \ _(tuple) \ _(tuple_boa) \ _(unimplemented) \ diff --git a/vm/run.cpp b/vm/run.cpp index 6c8a8452e7..605fd9b725 100755 --- a/vm/run.cpp +++ b/vm/run.cpp @@ -8,11 +8,6 @@ void factor_vm::primitive_exit() exit((int)to_fixnum(ctx->pop())); } -void factor_vm::primitive_system_micros() -{ - ctx->push(from_unsigned_8(system_micros())); -} - void factor_vm::primitive_nano_count() { u64 nanos = nano_count(); diff --git a/vm/vm.hpp b/vm/vm.hpp index 147647b528..40b3df5ecf 100755 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -146,7 +146,6 @@ struct factor_vm // run void primitive_exit(); - void primitive_system_micros(); void primitive_nano_count(); void primitive_sleep(); void primitive_set_slot(); From eb3775c70f56d0463656e8d428a31c96436e8e03 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Thu, 17 Jun 2010 00:04:53 -0500 Subject: [PATCH 39/40] Implement gmt hook on unix --- basis/calendar/unix/unix.factor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/basis/calendar/unix/unix.factor b/basis/calendar/unix/unix.factor index 6916129368..40475b4d40 100644 --- a/basis/calendar/unix/unix.factor +++ b/basis/calendar/unix/unix.factor @@ -28,3 +28,7 @@ IN: calendar.unix M: unix gmt-offset ( -- hours minutes seconds ) get-time gmtoff>> 3600 /mod 60 /mod ; + +M: unix gmt + timeval <struct> f [ gettimeofday io-error ] 2keep drop + timeval>unix-time ; From e18bde069efd637660d86f58b219fe0034f2a921 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Thu, 17 Jun 2010 11:02:47 -0500 Subject: [PATCH 40/40] Clearer <pipes> word --- basis/io/pipes/pipes.factor | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/basis/io/pipes/pipes.factor b/basis/io/pipes/pipes.factor index 8d747086a7..73de6bf1a2 100644 --- a/basis/io/pipes/pipes.factor +++ b/basis/io/pipes/pipes.factor @@ -37,17 +37,22 @@ M: callable run-pipeline-element '[ _ call( -- result ) ] with-streams* ] with-destructors ; -: <pipes> ( n -- pipes ) +GENERIC: <pipes> ( obj -- pipes ) + +M: integer <pipes> ( n -- pipes ) [ [ (pipe) |dispose ] replicate T{ pipe } [ prefix ] [ suffix ] bi 2 <clumps> ] with-destructors ; +M: sequence <pipes> + [ { } ] [ length 1 - <pipes> ] if-empty ; + PRIVATE> : run-pipeline ( seq -- results ) - [ length dup zero? [ drop { } ] [ 1 - <pipes> ] if ] keep + [ <pipes> ] keep [ [ [ first in>> ] [ second out>> ] bi ] dip run-pipeline-element