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