From 7025ebd7ee5f856751af7b205195fd828e808f91 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Sun, 31 Aug 2008 20:19:16 -0500
Subject: [PATCH 01/16] docs

---
 basis/calendar/calendar-docs.factor | 68 ++++++++++++++++++++++++++++-
 basis/calendar/calendar.factor      |  1 -
 2 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/basis/calendar/calendar-docs.factor b/basis/calendar/calendar-docs.factor
index 2c23ae95c1..d3bfa7bcb1 100644
--- a/basis/calendar/calendar-docs.factor
+++ b/basis/calendar/calendar-docs.factor
@@ -184,7 +184,7 @@ HELP: time+
 { $description "Adds two durations to produce a duration or adds a timestamp and a duration to produce a timestamp. The calculation takes timezones into account." }
 { $examples
     { $example "USING: calendar math.order prettyprint ;"
-               "10 months 2 months time+ 1 year <=> ."
+               "10 months 2 months time+ 1 years <=> ."
                "+eq+"
     }
     { $example "USING: accessors calendar math.order prettyprint ;"
@@ -193,3 +193,69 @@ HELP: time+
     }
 } ;
 
+HELP: dt>years
+{ $values { "duration" duration } { "x" number } }
+{ $description "Calculates the length of a duration in years." }
+{ $examples
+    { $example "USING: calendar prettyprint ;"
+               "6 months dt>years ."
+               "1/2"
+    }
+} ;
+
+HELP: dt>months
+{ $values { "duration" duration } { "x" number } }
+{ $description "Calculates the length of a duration in months." }
+{ $examples
+    { $example "USING: calendar prettyprint ;"
+               "30 days dt>months ."
+               "16000/16233"
+    }
+} ;
+
+HELP: dt>days
+{ $values { "duration" duration } { "x" number } }
+{ $description "Calculates the length of a duration in days." }
+{ $examples
+    { $example "USING: calendar prettyprint ;"
+               "6 hours dt>days ."
+               "1/4"
+    }
+} ;
+
+HELP: dt>hours
+{ $values { "duration" duration } { "x" number } }
+{ $description "Calculates the length of a duration in hours." }
+{ $examples
+    { $example "USING: calendar prettyprint ;"
+               "3/4 days dt>hours ."
+               "18"
+    }
+} ;
+HELP: dt>minutes
+{ $values { "duration" duration } { "x" number } }
+{ $description "Calculates the length of a duration in minutes." }
+{ $examples
+    { $example "USING: calendar prettyprint ;"
+               "6 hours dt>minutes ."
+               "360"
+    }
+} ;
+HELP: dt>seconds
+{ $values { "duration" duration } { "x" number } }
+{ $description "Calculates the length of a duration in seconds." }
+{ $examples
+    { $example "USING: calendar prettyprint ;"
+               "6 minutes dt>seconds ."
+               "360"
+    }
+} ;
+HELP: dt>milliseconds
+{ $values { "duration" duration } { "x" number } }
+{ $description "Calculates the length of a duration in milliseconds." }
+{ $examples
+    { $example "USING: calendar prettyprint ;"
+               "6 seconds dt>milliseconds ."
+               "6000"
+    }
+} ;
diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor
index d9284573c4..36b3cf3250 100755
--- a/basis/calendar/calendar.factor
+++ b/basis/calendar/calendar.factor
@@ -395,7 +395,6 @@ M: timestamp days-in-year ( timestamp -- n ) year>> days-in-year ;
 : time-since-midnight ( timestamp -- duration )
     dup midnight time- ;
 
-
 M: timestamp sleep-until timestamp>millis sleep-until ;
 
 M: duration sleep hence sleep-until ;

From 261fc87dca04101790b2148ef8edd6df1fde9fda Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Sun, 31 Aug 2008 21:20:56 -0500
Subject: [PATCH 02/16] wtf instant was MEMO: oops.  docs

---
 basis/calendar/calendar-docs.factor | 40 +++++++++++++++++++++++++++++
 basis/calendar/calendar.factor      |  9 +++----
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/basis/calendar/calendar-docs.factor b/basis/calendar/calendar-docs.factor
index d3bfa7bcb1..8ee104d16e 100644
--- a/basis/calendar/calendar-docs.factor
+++ b/basis/calendar/calendar-docs.factor
@@ -250,6 +250,7 @@ HELP: dt>seconds
                "360"
     }
 } ;
+
 HELP: dt>milliseconds
 { $values { "duration" duration } { "x" number } }
 { $description "Calculates the length of a duration in milliseconds." }
@@ -259,3 +260,42 @@ HELP: dt>milliseconds
                "6000"
     }
 } ;
+
+{ dt>years dt>months dt>days dt>hours dt>minutes dt>seconds dt>milliseconds } related-words
+
+
+HELP: time-
+{ $values { "time1" "timestamp or duration" } { "time2" "timestamp or duration" } { "time3" "timestamp or duration" } }
+{ $description "Subtracts two durations to produce a duration or subtracts a duration from a timestamp to produce a timestamp. The calculation takes timezones into account." }
+{ $examples
+    { $example "USING: calendar math.order prettyprint ;"
+               "10 months 2 months time- 8 months <=> ."
+               "+eq+"
+    }
+    { $example "USING: accessors calendar math.order prettyprint ;"
+               "2010 1 1 <date> 3 days time- day>> ."
+               "29"
+    }
+} ;
+
+{ time+ time- } related-words
+
+HELP: convert-timezone
+{ $values { "timestamp" timestamp } { "duration" duration } { "timestamp" timestamp } }
+{ $description "Converts the " { $snippet "timestamp" } "'s " { $snippet "gmt-offset" } " to the GMT offset represented by the " { $snippet "duration" } "." }
+{ $examples
+    { $example "USING: accessors calendar prettyprint ;"
+               "gmt noon instant -5 >>hour convert-timezone gmt-offset>> hour>> ."
+               "-5"
+    }
+} ;
+
+HELP: >local-time
+{ $values { "timestamp" timestamp } { "timestamp" timestamp } }
+{ $description "Converts the " { $snippet "timestamp" } " to the timezone of your computer." }
+{ $examples
+    { $example "USING: accessors calendar kernel prettyprint ;"
+               "now gmt >local-time [ gmt-offset>> ] bi@ = ."
+               "t"
+    }
+} ;
diff --git a/basis/calendar/calendar.factor b/basis/calendar/calendar.factor
index 36b3cf3250..ff002bb16c 100755
--- a/basis/calendar/calendar.factor
+++ b/basis/calendar/calendar.factor
@@ -60,6 +60,8 @@ PRIVATE>
 : month-abbreviation ( n -- string )
     check-month 1- month-abbreviations nth ;
 
+: day-counts { 0 31 28 31 30 31 30 31 31 30 31 30 31 } ; inline
+
 : day-names ( -- array )
     {
         "Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"
@@ -116,7 +118,7 @@ PRIVATE>
 : >time< ( timestamp -- hour minute second )
     [ hour>> ] [ minute>> ] [ second>> ] tri ;
 
-MEMO: instant ( -- duration ) 0 0 0 0 0 0 <duration> ;
+: instant ( -- duration ) 0 0 0 0 0 0 <duration> ;
 : years ( x -- duration ) instant clone swap >>year ;
 : months ( x -- duration ) instant clone swap >>month ;
 : days ( x -- duration ) instant clone swap >>day ;
@@ -258,7 +260,7 @@ M: duration <=> [ dt>years ] compare ;
 : dt>seconds ( duration -- x ) dt>years seconds-per-year * ;
 : dt>milliseconds ( duration -- x ) dt>seconds 1000 * ;
 
-GENERIC: time- ( time1 time2 -- time )
+GENERIC: time- ( time1 time2 -- time3 )
 
 : convert-timezone ( timestamp duration -- timestamp )
     over gmt-offset>> over = [ drop ] [
@@ -323,12 +325,9 @@ MEMO: unix-1970 ( -- timestamp )
     unix-1970 millis milliseconds time+ ;
 
 : now ( -- timestamp ) gmt >local-time ;
-
 : hence ( duration -- timestamp ) now swap time+ ;
 : ago ( duration -- timestamp ) now swap time- ;
 
-: day-counts { 0 31 28 31 30 31 30 31 31 30 31 30 31 } ; inline
-
 : zeller-congruence ( year month day -- n )
     #! Zeller Congruence
     #! http://web.textfiles.com/computers/formulas.txt

From 683993c94786155e363bd70b3e6ec17b60c2698f Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Sun, 31 Aug 2008 21:24:58 -0500
Subject: [PATCH 03/16] obj.view: Add workaround so that 'article-content'
 method doesn't call 'execute'

---
 extra/obj/view/view.factor | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/extra/obj/view/view.factor b/extra/obj/view/view.factor
index 6b3249f057..cf5ca33745 100644
--- a/extra/obj/view/view.factor
+++ b/extra/obj/view/view.factor
@@ -40,7 +40,13 @@ PREDICATE: obj-list < word \ objects = ;
 
 M: obj-list article-title ( objects -- title ) drop "Objects" ;
 
+! M: obj-list article-content ( objects -- title )
+!    execute
+!    [ [ type -> ] [ ] bi 2array ] map
+!    { $tab , } bake ;
+
 M: obj-list article-content ( objects -- title )
-   execute
+   drop
+   objects
    [ [ type -> ] [ ] bi 2array ] map
    { $tab , } bake ;
\ No newline at end of file

From 768b97aa6660562e771e6aa7abf7a08d4375e4a9 Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Sun, 31 Aug 2008 22:07:22 -0500
Subject: [PATCH 04/16] obj.examples.todo: Use the 'obj' system as a todo list

---
 extra/obj/examples/todo/todo.factor | 83 +++++++++++++++++++++++++++++
 1 file changed, 83 insertions(+)
 create mode 100644 extra/obj/examples/todo/todo.factor

diff --git a/extra/obj/examples/todo/todo.factor b/extra/obj/examples/todo/todo.factor
new file mode 100644
index 0000000000..3d545479e9
--- /dev/null
+++ b/extra/obj/examples/todo/todo.factor
@@ -0,0 +1,83 @@
+
+USING: kernel sequences sets combinators.cleave
+       obj obj.view obj.util obj.print ;
+
+IN: obj.examples.todo
+
+SYM: person types adjoin
+SYM: todo   types adjoin
+
+SYM: owners properties adjoin
+SYM: eta    properties adjoin
+SYM: notes  properties adjoin
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: slava { type person } define-object
+SYM: doug  { type person } define-object
+SYM: ed    { type person } define-object
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+SYM: compiler-bugs
+  {
+    type todo
+    owners { slava }
+    notes  {
+             "Investitage FEP on Terrorist"
+             "Problem with cutler in VirtualBox?"
+           }
+  }
+define-object
+
+SYM: remove-old-accessors-from-core
+  {
+    type todo
+    owners { slava }
+  }
+define-object
+
+SYM: move-db-and-web-framework-to-basis
+  {
+   type todo
+   owners { slava }
+  }
+define-object
+
+SYM: remove-old-accessors-from-basis
+  {
+    type todo
+    owners { doug ed }
+  }
+define-object
+
+SYM: blas-on-bsd
+  {
+    type todo
+    owners { slava doug }
+  }
+define-object
+
+SYM: multi-methods-backend
+  {
+    type todo
+    owners { slava }
+  }
+define-object
+
+SYM: update-core-for-multi-methods { type todo owners { slava } } define-object
+SYM: update-basis-for-multi-methods { type todo } define-object
+SYM: update-extra-for-multi-methods { type todo } define-object
+
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: todo-list ( -- )
+  objects [ type -> todo = ] filter
+    [ { [ self -> ] [ owners -> ] [ eta -> ] } 1arr ]
+  map
+  { "ITEM" "OWNERS" "ETA" } prefix
+  print-table ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+

From 401597a387add5b52111d1dd954d6250ee2b2688 Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Sun, 31 Aug 2008 23:35:32 -0500
Subject: [PATCH 05/16] Update old accessors from 'ui.gestures'

---
 basis/ui/gestures/gestures-docs.factor | 18 +++++++++---------
 basis/ui/gestures/gestures.factor      | 16 ++++++++--------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/basis/ui/gestures/gestures-docs.factor b/basis/ui/gestures/gestures-docs.factor
index bcf7eb5ca8..0575ff17f0 100644
--- a/basis/ui/gestures/gestures-docs.factor
+++ b/basis/ui/gestures/gestures-docs.factor
@@ -30,13 +30,13 @@ HELP: motion
 { $examples { $code "T{ motion }" } } ;
 
 HELP: drag
-{ $class-description "Mouse drag gesture. The " { $link drag-# } " slot is either set to a mouse button number, or " { $link f } " indicating no specific button is expected." } ;
+{ $class-description "Mouse drag gesture. The " { $snippet "#" } " slot is either set to a mouse button number, or " { $link f } " indicating no specific button is expected." } ;
 
 HELP: button-up
 { $class-description "Mouse button up gesture. Instances have two slots:"
     { $list
-        { { $link button-up-mods } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
-        { { $link button-up-# } " - a mouse button number, or " { $link f } " indicating no specific button is expected" }
+        { { $snippet "mods" } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
+        { { $snippet "#" } " - a mouse button number, or " { $link f } " indicating no specific button is expected" }
     }
 }
 { $examples { $code "T{ button-up f f 1 }" "T{ button-up }" } } ;
@@ -44,8 +44,8 @@ HELP: button-up
 HELP: button-down
 { $class-description "Mouse button down gesture. Instances have two slots:"
     { $list
-        { { $link button-down-mods } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
-        { { $link button-down-# } " - a mouse button number, or " { $link f } " indicating no specific button is expected" }
+        { { $snippet "mods" } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
+        { { $snippet "#" } " - a mouse button number, or " { $link f } " indicating no specific button is expected" }
     }
 }
 { $examples { $code "T{ button-down f f 1 }" "T{ button-down }" } } ;
@@ -109,8 +109,8 @@ HELP: S+
 HELP: key-down
 { $class-description "Key down gesture. Instances have two slots:"
     { $list
-        { { $link key-down-mods } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
-    { { $link key-down-sym } " - a string denoting the key pressed; see " { $link "keyboard-gestures" } }
+        { { $snippet "mods" } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
+    { { $snippet "sym" } " - a string denoting the key pressed; see " { $link "keyboard-gestures" } }
     }
 }
 { $examples { $code "T{ key-down f { C+ } \"a\" }" "T{ key-down f f \"TAB\" }" } } ;
@@ -118,8 +118,8 @@ HELP: key-down
 HELP: key-up
 { $class-description "Key up gesture. Instances have two slots:"
     { $list
-        { { $link key-up-mods } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
-    { { $link key-up-sym } " - a string denoting the key pressed; see " { $link "keyboard-gestures" } }
+        { { $snippet "mods" } " - a sequence of modifiers; see " { $link "keyboard-gestures" } }
+    { { $snippet "sym" } " - a string denoting the key pressed; see " { $link "keyboard-gestures" } }
     }
 }
 { $examples { $code "T{ key-up f { C+ } \"a\" }" "T{ key-up f f \"TAB\" }" } } ;
diff --git a/basis/ui/gestures/gestures.factor b/basis/ui/gestures/gestures.factor
index 95417ac71f..6b53d25ea1 100755
--- a/basis/ui/gestures/gestures.factor
+++ b/basis/ui/gestures/gestures.factor
@@ -226,14 +226,14 @@ SYMBOL: drag-timer
 : send-button-down ( gesture loc world -- )
     move-hand
     start-drag-timer
-    dup button-down-#
+    dup #>>
     dup update-click# hand-buttons get-global push
     update-clicked
     button-gesture ;
 
 : send-button-up ( gesture loc world -- )
     move-hand
-    dup button-up-# hand-buttons get-global delete
+    dup #>> hand-buttons get-global delete
     stop-drag-timer
     button-gesture ;
 
@@ -261,21 +261,21 @@ GENERIC: gesture>string ( gesture -- string/f )
     [ name>> ] map concat >string ;
 
 M: key-down gesture>string
-    dup key-down-mods modifiers>string
-    swap key-down-sym append ;
+    dup mods>> modifiers>string
+    swap sym>> append ;
 
 M: button-up gesture>string
     [
-        dup button-up-mods modifiers>string %
+        dup mods>> modifiers>string %
         "Click Button" %
-        button-up-# [ " " % # ] when*
+        #>> [ " " % # ] when*
     ] "" make ;
 
 M: button-down gesture>string
     [
-        dup button-down-mods modifiers>string %
+        dup mods>> modifiers>string %
         "Press Button" %
-        button-down-# [ " " % # ] when*
+        #>> [ " " % # ] when*
     ] "" make ;
 
 M: left-action gesture>string drop "Swipe left" ;

From 61e5729cdbbe2ea87d0e842e74aa4fe399b01caa Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Sun, 31 Aug 2008 23:53:07 -0500
Subject: [PATCH 06/16] Update old accessors from 'ui.operations'

---
 basis/ui/operations/operations-docs.factor | 12 ++++-----
 basis/ui/operations/operations.factor      | 30 +++++++++++-----------
 basis/ui/tools/listener/listener.factor    |  2 +-
 3 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/basis/ui/operations/operations-docs.factor b/basis/ui/operations/operations-docs.factor
index 5f7ed60f38..ebdf3eee1f 100644
--- a/basis/ui/operations/operations-docs.factor
+++ b/basis/ui/operations/operations-docs.factor
@@ -22,11 +22,11 @@ HELP: operation
 $nl
 "Operations have the following slots:"
 { $list
-    { { $link operation-predicate } " - a quotation with stack effect " { $snippet "( obj -- ? )" } }
-    { { $link operation-command } " - a " { $link word } }
-    { { $link operation-translator } " - a quotation with stack effect " { $snippet "( obj -- newobj )" } ", or " { $link f } }
-    { { $link operation-hook } " - a quotation with stack effect " { $snippet "( obj -- newobj )" } ", or " { $link f } }
-    { { $link operation-listener? } " - a boolean" }
+    { { $snippet "predicate" } " - a quotation with stack effect " { $snippet "( obj -- ? )" } }
+    { { $snippet "command" } " - a " { $link word } }
+    { { $snippet "translator" } " - a quotation with stack effect " { $snippet "( obj -- newobj )" } ", or " { $link f } }
+    { { $snippet "hook" } " - a quotation with stack effect " { $snippet "( obj -- newobj )" } ", or " { $link f } }
+    { { $snippet "listener?" } " - a boolean" }
 } } ;
 
 HELP: operation-gesture
@@ -38,7 +38,7 @@ HELP: operations
 
 HELP: object-operations
 { $values { "obj" object } { "operations" "a sequence of " { $link operation } " instances" } }
-{ $description "Outputs a sequence of operations applicable to the given object, by testing each defined operation's " { $link operation-predicate } " quotation in turn." } ;
+{ $description "Outputs a sequence of operations applicable to the given object, by testing each defined operation's " { $snippet "predicate" } " quotation in turn." } ;
 
 HELP: primary-operation
 { $values { "obj" object } { "operation" "an " { $link operation  } " or " { $link f } } }
diff --git a/basis/ui/operations/operations.factor b/basis/ui/operations/operations.factor
index 5a47f9e80b..8b4817dcac 100755
--- a/basis/ui/operations/operations.factor
+++ b/basis/ui/operations/operations.factor
@@ -19,34 +19,34 @@ TUPLE: operation predicate command translator hook listener? ;
         swap >>predicate ;
 
 PREDICATE: listener-operation < operation
-    dup operation-command listener-command?
-    swap operation-listener? or ;
+    dup command>> listener-command?
+    swap listener?>> or ;
 
 M: operation command-name
-    operation-command command-name ;
+    command>> command-name ;
 
 M: operation command-description
-    operation-command command-description ;
+    command>> command-description ;
 
-M: operation command-word operation-command command-word ;
+M: operation command-word command>> command-word ;
 
 : operation-gesture ( operation -- gesture )
-    operation-command +keyboard+ word-prop ;
+    command>> +keyboard+ word-prop ;
 
 SYMBOL: operations
 
 : object-operations ( obj -- operations )
-    operations get [ operation-predicate call ] with filter ;
+    operations get [ predicate>> call ] with filter ;
 
 : find-operation ( obj quot -- command )
     >r object-operations r> find-last nip ; inline
 
 : primary-operation ( obj -- operation )
-    [ operation-command +primary+ word-prop ] find-operation ;
+    [ command>> +primary+ word-prop ] find-operation ;
 
 : secondary-operation ( obj -- operation )
     dup
-    [ operation-command +secondary+ word-prop ] find-operation
+    [ command>> +secondary+ word-prop ] find-operation
     [ ] [ primary-operation ] ?if ;
 
 : default-flags ( -- assoc )
@@ -59,9 +59,9 @@ SYMBOL: operations
 
 : modify-operation ( hook translator operation -- operation )
     clone
-    tuck set-operation-translator
-    tuck set-operation-hook
-    t over set-operation-listener? ;
+    tuck (>>translator)
+    tuck (>>hook)
+    t over (>>listener?) ;
 
 : modify-operations ( operations hook translator -- operations )
     rot [ >r 2dup r> modify-operation ] map 2nip ;
@@ -76,9 +76,9 @@ SYMBOL: operations
 : operation-quot ( target command -- quot )
     [
         swap literalize ,
-        dup operation-translator %
-        operation-command ,
+        dup translator>> %
+        command>> ,
     ] [ ] make ;
 
 M: operation invoke-command ( target command -- )
-    [ operation-hook call ] keep operation-quot call ;
+    [ hook>> call ] keep operation-quot call ;
diff --git a/basis/ui/tools/listener/listener.factor b/basis/ui/tools/listener/listener.factor
index 1ae99b800d..2dee1ba4a9 100755
--- a/basis/ui/tools/listener/listener.factor
+++ b/basis/ui/tools/listener/listener.factor
@@ -64,7 +64,7 @@ M: listener-command invoke-command ( target command -- )
     command-quot call-listener ;
 
 M: listener-operation invoke-command ( target command -- )
-    [ operation-hook call ] keep operation-quot call-listener ;
+    [ hook>> call ] keep operation-quot call-listener ;
 
 : eval-listener ( string -- )
     get-workspace

From 8fed0d29eb4b03c0942e02a199c5f6df1f770797 Mon Sep 17 00:00:00 2001
From: "U-SLAVA-DFB8FF805\\Slava" <Slava@slava-dfb8ff805.(none)>
Date: Mon, 1 Sep 2008 02:04:42 -0500
Subject: [PATCH 07/16] Fix dead code elimination with alien nodes

---
 basis/compiler/tests/alien.factor             |  7 +++++
 .../tree/dead-code/simple/simple.factor       | 30 +++++++++++--------
 2 files changed, 25 insertions(+), 12 deletions(-)
 mode change 100644 => 100755 basis/compiler/tests/alien.factor
 mode change 100644 => 100755 basis/compiler/tree/dead-code/simple/simple.factor

diff --git a/basis/compiler/tests/alien.factor b/basis/compiler/tests/alien.factor
old mode 100644
new mode 100755
index 9d2b43c1df..f2a2255949
--- a/basis/compiler/tests/alien.factor
+++ b/basis/compiler/tests/alien.factor
@@ -84,6 +84,13 @@ FUNCTION: tiny ffi_test_17 int x ;
 
 [ 3 ] [ "ffi_test_1" f dlsym indirect-test-1 ] unit-test
 
+: indirect-test-1' ( ptr -- )
+    "int" { } "cdecl" alien-indirect drop ;
+
+{ 1 0 } [ indirect-test-1' ] must-infer-as
+
+[ ] [ "ffi_test_1" f dlsym indirect-test-1' ] unit-test
+
 [ -1 indirect-test-1 ] must-fail
 
 : indirect-test-2 ( x y ptr -- result )
diff --git a/basis/compiler/tree/dead-code/simple/simple.factor b/basis/compiler/tree/dead-code/simple/simple.factor
old mode 100644
new mode 100755
index 3ea9139e5f..9ebf064f79
--- a/basis/compiler/tree/dead-code/simple/simple.factor
+++ b/basis/compiler/tree/dead-code/simple/simple.factor
@@ -81,11 +81,19 @@ M: #alien-indirect compute-live-values* nip look-at-inputs ;
         drop-values
     ] ;
 
-: drop-dead-outputs ( node -- nodes )
+: drop-dead-outputs ( node -- #shuffle )
     dup out-d>> drop-dead-values tuck in-d>> >>out-d drop ;
 
+: some-outputs-dead? ( #call -- ? )
+    out-d>> [ live-value? not ] contains? ;
+
+: maybe-drop-dead-outputs ( node -- nodes )
+    dup some-outputs-dead? [
+        dup drop-dead-outputs 2array
+    ] when ;
+
 M: #introduce remove-dead-code* ( #introduce -- nodes )
-    dup drop-dead-outputs 2array ;
+    maybe-drop-dead-outputs ;
 
 M: #>r remove-dead-code*
     [ filter-live ] change-out-r
@@ -110,17 +118,9 @@ M: #push remove-dead-code*
     [ in-d>> #drop remove-dead-code* ]
     bi ;
 
-: some-outputs-dead? ( #call -- ? )
-    out-d>> [ live-value? not ] contains? ;
-
 M: #call remove-dead-code*
-    dup dead-flushable-call? [
-        remove-flushable-call
-    ] [
-        dup some-outputs-dead? [
-            dup drop-dead-outputs 2array
-        ] when
-    ] if ;
+    dup dead-flushable-call?
+    [ remove-flushable-call ] [ maybe-drop-dead-outputs ] if ;
 
 M: #shuffle remove-dead-code*
     [ filter-live ] change-in-d
@@ -136,3 +136,9 @@ M: #copy remove-dead-code*
 M: #terminate remove-dead-code*
     [ filter-live ] change-in-d
     [ filter-live ] change-in-r ;
+
+M: #alien-invoke remove-dead-code*
+    maybe-drop-dead-outputs ;
+
+M: #alien-indirect remove-dead-code*
+    maybe-drop-dead-outputs ;

From 9a5f3cd606d1ca10b02dd2cd15ed4843199c1842 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 1 Sep 2008 02:45:20 -0500
Subject: [PATCH 08/16] Don't strip superclass prop

---
 basis/tools/deploy/shaker/shaker.factor | 1 -
 1 file changed, 1 deletion(-)

diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor
index 5e888cd871..36fe015611 100755
--- a/basis/tools/deploy/shaker/shaker.factor
+++ b/basis/tools/deploy/shaker/shaker.factor
@@ -136,7 +136,6 @@ IN: tools.deploy.shaker
                 "specializer"
                 "step-into"
                 "step-into?"
-                "superclass"
                 "transform-n"
                 "transform-quot"
                 "tuple-dispatch-generic"

From 41fa05a639fb23aefbe498b9b215f52f4fc80ecc Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 1 Sep 2008 02:52:25 -0500
Subject: [PATCH 09/16] Fix recent visual regression

---
 basis/ui/gadgets/buttons/buttons.factor | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/basis/ui/gadgets/buttons/buttons.factor b/basis/ui/gadgets/buttons/buttons.factor
index b5e8e8a1e1..a079781d69 100755
--- a/basis/ui/gadgets/buttons/buttons.factor
+++ b/basis/ui/gadgets/buttons/buttons.factor
@@ -67,9 +67,12 @@ M: button-paint draw-interior
 M: button-paint draw-boundary
     button-paint draw-boundary ;
 
+: align-left ( button -- button )
+    { 0 1/2 } >>align ; inline
+
 : roll-button-theme ( button -- button )
     f black <solid> dup f <button-paint> >>boundary
-    { 0 1/2 } >>align ; inline
+    align-left ; inline
 
 : <roll-button> ( label quot -- button )
     <button> roll-button-theme ;
@@ -141,7 +144,8 @@ TUPLE: checkbox < button ;
     <checkmark> label-on-right checkbox-theme
     [ model>> toggle-model ]
     checkbox new-button
-        swap >>model ;
+        swap >>model
+        align-left ;
 
 M: checkbox model-changed
     swap model-value over (>>selected?) relayout-1 ;
@@ -179,7 +183,8 @@ TUPLE: radio-control < button value ;
     [ [ value>> ] keep set-control-value ]
     radio-control new-button
         swap >>model
-        swap >>value ; inline
+        swap >>value
+        align-left ; inline
 
 M: radio-control model-changed
     swap model-value

From a50cb4c21be892ef032fb5a45033951f3bd87e76 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 1 Sep 2008 02:53:20 -0500
Subject: [PATCH 10/16] Deploy descriptor for spheres

---
 extra/spheres/deploy.factor | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 extra/spheres/deploy.factor

diff --git a/extra/spheres/deploy.factor b/extra/spheres/deploy.factor
new file mode 100644
index 0000000000..0eeef1e3b7
--- /dev/null
+++ b/extra/spheres/deploy.factor
@@ -0,0 +1,15 @@
+USING: tools.deploy.config ;
+H{
+    { deploy-reflection 1 }
+    { deploy-random? t }
+    { deploy-word-defs? f }
+    { deploy-word-props? f }
+    { deploy-name "Spheres" }
+    { deploy-compiler? t }
+    { deploy-math? t }
+    { deploy-io 1 }
+    { deploy-threads? t }
+    { "stop-after-last-window?" t }
+    { deploy-ui? t }
+    { deploy-c-types? f }
+}

From f47eb29b51d73680b0f3d43e669fcad6dbeed1fb Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Mon, 1 Sep 2008 03:27:31 -0500
Subject: [PATCH 11/16] Update old accessors from 'ui.render'

---
 basis/ui/render/render-docs.factor | 8 ++++----
 basis/ui/render/render.factor      | 6 +++---
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/basis/ui/render/render-docs.factor b/basis/ui/render/render-docs.factor
index 04b623672d..fc16ed9345 100755
--- a/basis/ui/render/render-docs.factor
+++ b/basis/ui/render/render-docs.factor
@@ -38,16 +38,16 @@ HELP: draw-boundary
 { $contract "Draws the boundary of a gadget by making OpenGL calls. The " { $snippet "boundary" } " slot may be set to objects implementing this generic word." } ;
 
 HELP: solid
-{ $class-description "A class implementing the " { $link draw-boundary } " and " { $link draw-interior } " generic words to draw a solid outline or a solid fill, respectively. The " { $link solid-color } " slot stores a color specifier." } ;
+{ $class-description "A class implementing the " { $link draw-boundary } " and " { $link draw-interior } " generic words to draw a solid outline or a solid fill, respectively. The " { $snippet "color" } " slot stores a color specifier." } ;
 
 HELP: gradient
-{ $class-description "A class implementing the " { $link draw-interior } " generic word to draw a smoothly shaded transition between colors. The " { $link gradient-colors } " slot stores a sequence of color specifiers and the gradient is drawn in the direction given by the " { $snippet "orientation" } " slot of the gadget." } ;
+{ $class-description "A class implementing the " { $link draw-interior } " generic word to draw a smoothly shaded transition between colors. The " { $snippet "colors" } " slot stores a sequence of color specifiers and the gradient is drawn in the direction given by the " { $snippet "orientation" } " slot of the gadget." } ;
 
 HELP: polygon
 { $class-description "A class implementing the " { $link draw-boundary } " and " { $link draw-interior } " generic words to draw a solid outline or a solid filled polygon, respectively. Instances of " { $link polygon } " have two slots:"
     { $list
-        { { $link polygon-color } " - a color specifier" }
-        { { $link polygon-points } " - a sequence of points" }
+        { { $snippet "color" } " - a color specifier" }
+        { { $snippet "points" } " - a sequence of points" }
     }
 } ;
 
diff --git a/basis/ui/render/render.factor b/basis/ui/render/render.factor
index a4bb353d1b..2147fc2b53 100644
--- a/basis/ui/render/render.factor
+++ b/basis/ui/render/render.factor
@@ -95,7 +95,7 @@ C: <solid> solid
 
 ! Solid pen
 : (solid) ( gadget paint -- loc dim )
-    solid-color set-color rect-dim >r origin get dup r> v+ ;
+    color>> set-color rect-dim >r origin get dup r> v+ ;
 
 M: solid draw-interior (solid) gl-fill-rect ;
 
@@ -109,7 +109,7 @@ C: <gradient> gradient
 M: gradient draw-interior
     origin get [
         over orientation>>
-        swap gradient-colors
+        swap colors>>
         rot rect-dim
         gl-gradient
     ] with-translation ;
@@ -121,7 +121,7 @@ C: <polygon> polygon
 
 : draw-polygon ( polygon quot -- )
     origin get [
-        >r dup polygon-color set-color polygon-points r> call
+        >r dup color>> set-color points>> r> call
     ] with-translation ; inline
 
 M: polygon draw-boundary

From c570085151ec1667d5ac5dc24b171c362bdd9b60 Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Mon, 1 Sep 2008 03:40:31 -0500
Subject: [PATCH 12/16] Update old accessors from ui.tools.*

---
 basis/ui/tools/debugger/debugger.factor     |  2 +-
 basis/ui/tools/deploy/deploy.factor         |  4 ++--
 basis/ui/tools/inspector/inspector.factor   |  2 +-
 basis/ui/tools/interactor/interactor.factor |  2 +-
 basis/ui/tools/listener/listener.factor     |  8 ++++----
 basis/ui/tools/profiler/profiler.factor     |  2 +-
 basis/ui/tools/search/search.factor         | 12 ++++++------
 basis/ui/tools/tools.factor                 |  2 +-
 basis/ui/tools/walker/walker.factor         |  2 +-
 basis/ui/tools/workspace/workspace.factor   |  6 +++---
 10 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/basis/ui/tools/debugger/debugger.factor b/basis/ui/tools/debugger/debugger.factor
index 5a3ad01d2e..4ba4374bb8 100644
--- a/basis/ui/tools/debugger/debugger.factor
+++ b/basis/ui/tools/debugger/debugger.factor
@@ -29,7 +29,7 @@ TUPLE: debugger < track restarts ;
         -rot <restart-list> >>restarts
         dup restarts>> rot <debugger-display> <scroller> 1 track-add ;
 
-M: debugger focusable-child* debugger-restarts ;
+M: debugger focusable-child* restarts>> ;
 
 : debugger-window ( error -- )
     #! No restarts for the debugger window
diff --git a/basis/ui/tools/deploy/deploy.factor b/basis/ui/tools/deploy/deploy.factor
index b68e5162a3..285757e390 100755
--- a/basis/ui/tools/deploy/deploy.factor
+++ b/basis/ui/tools/deploy/deploy.factor
@@ -65,13 +65,13 @@ TUPLE: deploy-gadget < pack vocab settings ;
     [ deploy-gadget? ] find-parent ;
 
 : find-deploy-vocab ( gadget -- vocab )
-    find-deploy-gadget deploy-gadget-vocab ;
+    find-deploy-gadget vocab>> ;
 
 : find-deploy-config ( gadget -- config )
     find-deploy-vocab deploy-config ;
 
 : find-deploy-settings ( gadget -- settings )
-    find-deploy-gadget deploy-gadget-settings ;
+    find-deploy-gadget settings>> ;
 
 : com-revert ( gadget -- )
     dup find-deploy-config
diff --git a/basis/ui/tools/inspector/inspector.factor b/basis/ui/tools/inspector/inspector.factor
index bb0f02ec7e..273d6bc549 100644
--- a/basis/ui/tools/inspector/inspector.factor
+++ b/basis/ui/tools/inspector/inspector.factor
@@ -47,4 +47,4 @@ inspector-gadget "multi-touch" f {
 } define-command-map
 
 M: inspector-gadget tool-scroller
-    inspector-gadget-pane find-scroller ;
+    pane>> find-scroller ;
diff --git a/basis/ui/tools/interactor/interactor.factor b/basis/ui/tools/interactor/interactor.factor
index 20428a39b6..39f10f42ae 100755
--- a/basis/ui/tools/interactor/interactor.factor
+++ b/basis/ui/tools/interactor/interactor.factor
@@ -76,7 +76,7 @@ M: interactor model-changed
     ] with-output-stream* ;
 
 : add-interactor-history ( str interactor -- )
-    over empty? [ 2drop ] [ interactor-history adjoin ] if ;
+    over empty? [ 2drop ] [ history>> adjoin ] if ;
 
 : interactor-continue ( obj interactor -- )
     mailbox>> mailbox-put ;
diff --git a/basis/ui/tools/listener/listener.factor b/basis/ui/tools/listener/listener.factor
index 2dee1ba4a9..683eff9457 100755
--- a/basis/ui/tools/listener/listener.factor
+++ b/basis/ui/tools/listener/listener.factor
@@ -110,7 +110,7 @@ M: engine-word word-completion-string
     ] [ 2drop ] if ;
 
 : insert-word ( word -- )
-    get-workspace workspace-listener input>>
+    get-workspace listener>> input>>
     [ >r word-completion-string r> user-input ]
     [ interactor-use use-if-necessary ]
     2bi ;
@@ -131,10 +131,10 @@ TUPLE: stack-display < track ;
     1 track-add ;
 
 M: stack-display tool-scroller
-    find-workspace workspace-listener tool-scroller ;
+    find-workspace listener>> tool-scroller ;
 
 : ui-listener-hook ( listener -- )
-    >r datastack r> listener-gadget-stack set-model ;
+    >r datastack r> stack>> set-model ;
 
 : ui-error-hook ( error listener -- )
     find-workspace debugger-popup ;
@@ -168,7 +168,7 @@ M: stack-display tool-scroller
     } cleave ;
 
 : init-listener ( listener -- )
-    f <model> swap set-listener-gadget-stack ;
+    f <model> swap (>>stack) ;
 
 : <listener-gadget> ( -- gadget )
   { 0 1 } listener-gadget new-track
diff --git a/basis/ui/tools/profiler/profiler.factor b/basis/ui/tools/profiler/profiler.factor
index f440bd8766..462af87574 100755
--- a/basis/ui/tools/profiler/profiler.factor
+++ b/basis/ui/tools/profiler/profiler.factor
@@ -14,7 +14,7 @@ TUPLE: profiler-gadget < track pane ;
     dup pane>> <scroller> 1 track-add ;
     
 : with-profiler-pane ( gadget quot -- )
-    >r profiler-gadget-pane r> with-pane ;
+    >r pane>> r> with-pane ;
 
 : com-full-profile ( gadget -- )
     [ profile. ] with-profiler-pane ;
diff --git a/basis/ui/tools/search/search.factor b/basis/ui/tools/search/search.factor
index 89f238b574..5237813fe0 100755
--- a/basis/ui/tools/search/search.factor
+++ b/basis/ui/tools/search/search.factor
@@ -14,7 +14,7 @@ IN: ui.tools.search
 TUPLE: live-search < track field list ;
 
 : search-value ( live-search -- value )
-    live-search-list list-value ;
+    list>> list-value ;
 
 : search-gesture ( gesture live-search -- operation/f )
     search-value object-operations
@@ -32,7 +32,7 @@ M: live-search handle-gesture ( gesture live-search -- ? )
     [ live-search? ] find-parent ;
 
 : find-search-list ( gadget -- list )
-    find-live-search live-search-list ;
+    find-live-search list>> ;
 
 TUPLE: search-field < editor ;
 
@@ -70,12 +70,12 @@ search-field H{
     over field>> set-editor-string
   dup field>> end-of-document ;
 
-M: live-search focusable-child* live-search-field ;
+M: live-search focusable-child* field>> ;
 
 M: live-search pref-dim* drop { 400 200 } ;
 
 : current-word ( workspace -- string )
-    workspace-listener listener-gadget-input selected-word ;
+    listener>> input>> selected-word ;
 
 : definition-candidates ( words -- candidates )
     [ dup synopsis >lower ] { } map>assoc sort-values ;
@@ -149,10 +149,10 @@ M: live-search pref-dim* drop { 400 200 } ;
     f [ string>> ] <live-search> ;
 
 : listener-history ( listener -- seq )
-    listener-gadget-input interactor-history <reversed> ;
+    input>> history>> <reversed> ;
 
 : com-history ( workspace -- )
-    "" over workspace-listener listener-history <history-search>
+    "" over listener>> listener-history <history-search>
     "History search" show-titled-popup ;
 
 workspace "toolbar" f {
diff --git a/basis/ui/tools/tools.factor b/basis/ui/tools/tools.factor
index a437c2dbb6..21fa44b593 100755
--- a/basis/ui/tools/tools.factor
+++ b/basis/ui/tools/tools.factor
@@ -54,7 +54,7 @@ IN: ui.tools
 
 M: workspace model-changed
     nip
-    dup workspace-listener listener-gadget-output scroll>bottom
+    dup listener>> output>> scroll>bottom
     dup resize-workspace
     request-focus ;
 
diff --git a/basis/ui/tools/walker/walker.factor b/basis/ui/tools/walker/walker.factor
index 767be92687..51091c576d 100755
--- a/basis/ui/tools/walker/walker.factor
+++ b/basis/ui/tools/walker/walker.factor
@@ -84,7 +84,7 @@ walker-gadget "toolbar" f {
 : walker-for-thread? ( thread gadget -- ? )
     {
         { [ dup walker-gadget? not ] [ 2drop f ] }
-        { [ dup walker-gadget-closing? ] [ 2drop f ] }
+        { [ dup closing?>> ] [ 2drop f ] }
         [ thread>> eq? ]
     } cond ;
 
diff --git a/basis/ui/tools/workspace/workspace.factor b/basis/ui/tools/workspace/workspace.factor
index bc758e9eb8..ab6b3fe1cf 100755
--- a/basis/ui/tools/workspace/workspace.factor
+++ b/basis/ui/tools/workspace/workspace.factor
@@ -29,7 +29,7 @@ M: gadget tool-scroller drop f ;
   book>> children>> [ class eq? ] with find ;
 
 : show-tool ( class workspace -- tool )
-    [ find-tool swap ] keep workspace-book model>>
+    [ find-tool swap ] keep book>> model>>
     set-model ;
 
 : select-tool ( workspace class -- ) swap show-tool drop ;
@@ -81,10 +81,10 @@ SYMBOL: workspace-dim
 M: workspace pref-dim* drop workspace-dim get ;
 
 M: workspace focusable-child*
-    dup workspace-popup [ ] [ workspace-listener ] ?if ;
+    dup popup>> [ ] [ listener>> ] ?if ;
 
 : workspace-page ( workspace -- gadget )
-    workspace-book current-page ;
+    book>> current-page ;
 
 M: workspace tool-scroller ( workspace -- scroller )
     workspace-page tool-scroller ;

From b821bcf8a352be42efeda9ff428f92e1242e452b Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 1 Sep 2008 04:15:01 -0500
Subject: [PATCH 13/16] Fixing help unit test which was clobbering help lint

---
 basis/help/lint/lint.factor           | 14 ++++++--------
 basis/help/topics/topics-tests.factor |  2 +-
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/basis/help/lint/lint.factor b/basis/help/lint/lint.factor
index 14d3420a68..b12dcaa807 100755
--- a/basis/help/lint/lint.factor
+++ b/basis/help/lint/lint.factor
@@ -1,6 +1,6 @@
 ! Copyright (C) 2006, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors sequences parser kernel help help.markup
+USING: fry accessors sequences parser kernel help help.markup
 help.topics words strings classes tools.vocabs namespaces io
 io.streams.string prettyprint definitions arrays vectors
 combinators combinators.short-circuit splitting debugger
@@ -39,7 +39,7 @@ IN: help.lint
         $predicate
         $class-description
         $error-description
-    } swap [ elements f like ] curry contains? ;
+    } swap '[ , elements empty? not ] contains? ;
 
 : check-values ( word element -- )
     {
@@ -108,12 +108,10 @@ M: help-error error.
     articles get keys
     vocabs [ dup vocab-docs-path swap ] H{ } map>assoc
     H{ } clone [
-        [
-            [ dup >link where dup ] 2dip
-            [ >r >r first r> at r> push-at ] 2curry
-            [ 2drop ]
-            if
-        ] 2curry each
+        '[
+            dup >link where dup
+            [ first , at , push-at ] [ 2drop ] if
+        ] each
     ] keep ;
 
 : check-about ( vocab -- )
diff --git a/basis/help/topics/topics-tests.factor b/basis/help/topics/topics-tests.factor
index 699b2d398a..f53bdee9c7 100644
--- a/basis/help/topics/topics-tests.factor
+++ b/basis/help/topics/topics-tests.factor
@@ -16,7 +16,7 @@ IN: help.topics.tests
 
 SYMBOL: foo
 
-[ ] [ { "test" "a" } "Test A" { { $subsection foo } } <article> add-article ] unit-test
+[ ] [ "Test A" { { $subsection foo } } <article> { "test" "a" } add-article ] unit-test
 
 ! Test article location recording
 

From 8bf37558d42a1573650b4fa24c5c72b60675f760 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 1 Sep 2008 04:32:16 -0500
Subject: [PATCH 14/16] Clean up Windows I/O a bit, remove classes.tuple.lib

---
 basis/io/windows/launcher/launcher.factor  |  16 ++-
 basis/io/windows/nt/backend/backend.factor |   5 +-
 basis/io/windows/nt/sockets/sockets.factor | 155 +++++++++++++--------
 extra/classes/tuple/lib/authors.txt        |   1 -
 extra/classes/tuple/lib/lib-docs.factor    |  29 ----
 extra/classes/tuple/lib/lib-tests.factor   |   8 --
 extra/classes/tuple/lib/lib.factor         |  18 ---
 7 files changed, 112 insertions(+), 120 deletions(-)
 delete mode 100644 extra/classes/tuple/lib/authors.txt
 delete mode 100644 extra/classes/tuple/lib/lib-docs.factor
 delete mode 100644 extra/classes/tuple/lib/lib-tests.factor
 delete mode 100755 extra/classes/tuple/lib/lib.factor

diff --git a/basis/io/windows/launcher/launcher.factor b/basis/io/windows/launcher/launcher.factor
index 9442fa9a72..ed9b53675b 100755
--- a/basis/io/windows/launcher/launcher.factor
+++ b/basis/io/windows/launcher/launcher.factor
@@ -6,7 +6,7 @@ windows.types math windows.kernel32
 namespaces io.launcher kernel sequences windows.errors
 splitting system threads init strings combinators
 io.backend accessors concurrency.flags io.files assocs
-io.files.private windows destructors classes.tuple.lib ;
+io.files.private windows destructors ;
 IN: io.windows.launcher
 
 TUPLE: CreateProcess-args
@@ -30,7 +30,19 @@ TUPLE: CreateProcess-args
     0 >>dwCreateFlags ;
 
 : call-CreateProcess ( CreateProcess-args -- )
-    CreateProcess-args >tuple< CreateProcess win32-error=0/f ;
+    {
+        [ lpApplicationName>> ]
+        [ lpCommandLine>> ]
+        [ lpProcessAttributes>> ]
+        [ lpThreadAttributes>> ]
+        [ bInheritHandles>> ]
+        [ dwCreateFlags>> ]
+        [ lpEnvironment>> ]
+        [ lpCurrentDirectory>> ]
+        [ lpStartupInfo>> ]
+        [ lpProcessInformation>> ]
+    } cleave
+    CreateProcess win32-error=0/f ;
 
 : count-trailing-backslashes ( str n -- str n )
     >r "\\" ?tail r> swap [
diff --git a/basis/io/windows/nt/backend/backend.factor b/basis/io/windows/nt/backend/backend.factor
index e9df2ddab9..7fbc1dbcf9 100755
--- a/basis/io/windows/nt/backend/backend.factor
+++ b/basis/io/windows/nt/backend/backend.factor
@@ -1,9 +1,8 @@
 USING: alien alien.c-types arrays assocs combinators
 continuations destructors io io.backend io.ports io.timeouts
 io.windows io.windows.files libc kernel math namespaces
-sequences threads classes.tuple.lib windows windows.errors
-windows.kernel32 strings splitting io.files
-io.buffers qualified ascii system
+sequences threads windows windows.errors windows.kernel32
+strings splitting io.files io.buffers qualified ascii system
 accessors locals ;
 QUALIFIED: windows.winsock
 IN: io.windows.nt.backend
diff --git a/basis/io/windows/nt/sockets/sockets.factor b/basis/io/windows/nt/sockets/sockets.factor
index a31c41942f..41c5e88f5f 100755
--- a/basis/io/windows/nt/sockets/sockets.factor
+++ b/basis/io/windows/nt/sockets/sockets.factor
@@ -1,9 +1,8 @@
 USING: alien alien.accessors alien.c-types byte-arrays
 continuations destructors io.ports io.timeouts io.sockets
 io.sockets io namespaces io.streams.duplex io.windows
-io.windows.sockets
-io.windows.nt.backend windows.winsock kernel libc math sequences
-threads classes.tuple.lib system combinators accessors ;
+io.windows.sockets io.windows.nt.backend windows.winsock kernel
+libc math sequences threads system combinators accessors ;
 IN: io.windows.nt.sockets
 
 : malloc-int ( object -- object )
@@ -28,71 +27,89 @@ M: winnt WSASocket-flags ( -- DWORD )
     ] keep *void* ;
 
 TUPLE: ConnectEx-args port
-    s* name* namelen* lpSendBuffer* dwSendDataLength*
-    lpdwBytesSent* lpOverlapped* ptr* ;
+    s name namelen lpSendBuffer dwSendDataLength
+    lpdwBytesSent lpOverlapped ptr ;
 
 : wait-for-socket ( args -- n )
-    [ lpOverlapped*>> ] [ port>> ] bi twiddle-thumbs ;
+    [ lpOverlapped>> ] [ port>> ] bi twiddle-thumbs ; inline
 
 : <ConnectEx-args> ( sockaddr size -- ConnectEx )
     ConnectEx-args new
-        swap >>namelen*
-        swap >>name*
-        f >>lpSendBuffer*
-        0 >>dwSendDataLength*
-        f >>lpdwBytesSent*
-        (make-overlapped) >>lpOverlapped* ;
+        swap >>namelen
+        swap >>name
+        f >>lpSendBuffer
+        0 >>dwSendDataLength
+        f >>lpdwBytesSent
+        (make-overlapped) >>lpOverlapped ; inline
 
 : call-ConnectEx ( ConnectEx -- )
-    ConnectEx-args >tuple*<
+    {
+        [ s>> ]
+        [ name>> ]
+        [ namelen>> ]
+        [ lpSendBuffer>> ]
+        [ dwSendDataLength>> ]
+        [ lpdwBytesSent>> ]
+        [ lpOverlapped>> ]
+        [ ptr>> ]
+    } cleave
     "int"
     { "SOCKET" "sockaddr_in*" "int" "PVOID" "DWORD" "LPDWORD" "void*" }
     "stdcall" alien-indirect drop
-    winsock-error-string [ throw ] when* ;
+    winsock-error-string [ throw ] when* ; inline
 
 M: object establish-connection ( client-out remote -- )
     make-sockaddr/size <ConnectEx-args>
         swap >>port
-        dup port>> handle>> handle>> >>s*
-        dup s*>> get-ConnectEx-ptr >>ptr*
+        dup port>> handle>> handle>> >>s
+        dup s>> get-ConnectEx-ptr >>ptr
         dup call-ConnectEx
         wait-for-socket drop ;
 
 TUPLE: AcceptEx-args port
-    sListenSocket* sAcceptSocket* lpOutputBuffer* dwReceiveDataLength*
-    dwLocalAddressLength* dwRemoteAddressLength* lpdwBytesReceived* lpOverlapped* ;
+    sListenSocket sAcceptSocket lpOutputBuffer dwReceiveDataLength
+    dwLocalAddressLength dwRemoteAddressLength lpdwBytesReceived lpOverlapped ;
 
 : init-accept-buffer ( addr AcceptEx -- )
     swap sockaddr-type heap-size 16 +
-        [ >>dwLocalAddressLength* ] [ >>dwRemoteAddressLength* ] bi
-        dup dwLocalAddressLength*>> 2 * malloc &free >>lpOutputBuffer*
-        drop ;
+        [ >>dwLocalAddressLength ] [ >>dwRemoteAddressLength ] bi
+        dup dwLocalAddressLength>> 2 * malloc &free >>lpOutputBuffer
+        drop ; inline
 
 : <AcceptEx-args> ( server addr -- AcceptEx )
     AcceptEx-args new
         2dup init-accept-buffer
-        swap SOCK_STREAM open-socket |dispose handle>> >>sAcceptSocket*
-        over handle>> handle>> >>sListenSocket*
+        swap SOCK_STREAM open-socket |dispose handle>> >>sAcceptSocket
+        over handle>> handle>> >>sListenSocket
         swap >>port
-        0 >>dwReceiveDataLength*
-        f >>lpdwBytesReceived*
-        (make-overlapped) >>lpOverlapped* ;
+        0 >>dwReceiveDataLength
+        f >>lpdwBytesReceived
+        (make-overlapped) >>lpOverlapped ; inline
 
 : call-AcceptEx ( AcceptEx -- )
-    AcceptEx-args >tuple*< AcceptEx drop
-    winsock-error-string [ throw ] when* ;
+    {
+        [ sListenSocket>> ]
+        [ sAcceptSocket>> ]
+        [ lpOutputBuffer>> ]
+        [ dwReceiveDataLength>> ]
+        [ dwLocalAddressLength>> ]
+        [ dwRemoteAddressLength>> ]
+        [ lpdwBytesReceived>> ]
+        [ lpOverlapped>> ]
+    } cleave AcceptEx drop
+    winsock-error-string [ throw ] when* ; inline
 
 : extract-remote-address ( AcceptEx -- sockaddr )
     {
-        [ lpOutputBuffer*>> ]
-        [ dwReceiveDataLength*>> ]
-        [ dwLocalAddressLength*>> ]
-        [ dwRemoteAddressLength*>> ]
+        [ lpOutputBuffer>> ]
+        [ dwReceiveDataLength>> ]
+        [ dwLocalAddressLength>> ]
+        [ dwRemoteAddressLength>> ]
     } cleave
     f <void*>
     0 <int>
     f <void*>
-    [ 0 <int> GetAcceptExSockaddrs ] keep *void* ;
+    [ 0 <int> GetAcceptExSockaddrs ] keep *void* ; inline
 
 M: object (accept) ( server addr -- handle sockaddr )
     [
@@ -100,39 +117,49 @@ M: object (accept) ( server addr -- handle sockaddr )
         {
             [ call-AcceptEx ]
             [ wait-for-socket drop ]
-            [ sAcceptSocket*>> <win32-socket> ]
+            [ sAcceptSocket>> <win32-socket> ]
             [ extract-remote-address ]
         } cleave
     ] with-destructors ;
 
 TUPLE: WSARecvFrom-args port
-       s* lpBuffers* dwBufferCount* lpNumberOfBytesRecvd*
-       lpFlags* lpFrom* lpFromLen* lpOverlapped* lpCompletionRoutine* ;
+       s lpBuffers dwBufferCount lpNumberOfBytesRecvd
+       lpFlags lpFrom lpFromLen lpOverlapped lpCompletionRoutine ;
 
 : make-receive-buffer ( -- WSABUF )
     "WSABUF" malloc-object &free
     default-buffer-size get over set-WSABUF-len
-    default-buffer-size get malloc &free over set-WSABUF-buf ;
+    default-buffer-size get malloc &free over set-WSABUF-buf ; inline
 
 : <WSARecvFrom-args> ( datagram -- WSARecvFrom )
     WSARecvFrom-args new
         swap >>port
-        dup port>> handle>> handle>> >>s*
+        dup port>> handle>> handle>> >>s
         dup port>> addr>> sockaddr-type heap-size
-            [ malloc &free >>lpFrom* ]
-            [ malloc-int &free >>lpFromLen* ] bi
-        make-receive-buffer >>lpBuffers*
-        1 >>dwBufferCount*
-        0 malloc-int &free >>lpFlags*
-        0 malloc-int &free >>lpNumberOfBytesRecvd*
-        (make-overlapped) >>lpOverlapped* ;
+            [ malloc &free >>lpFrom ]
+            [ malloc-int &free >>lpFromLen ] bi
+        make-receive-buffer >>lpBuffers
+        1 >>dwBufferCount
+        0 malloc-int &free >>lpFlags
+        0 malloc-int &free >>lpNumberOfBytesRecvd
+        (make-overlapped) >>lpOverlapped ; inline
 
 : call-WSARecvFrom ( WSARecvFrom -- )
-    WSARecvFrom-args >tuple*< WSARecvFrom socket-error* ;
+    {
+        [ s>> ]
+        [ lpBuffers>> ]
+        [ dwBufferCount>> ]
+        [ lpNumberOfBytesRecvd>> ]
+        [ lpFlags>> ]
+        [ lpFrom>> ]
+        [ lpFromLen>> ]
+        [ lpOverlapped>> ]
+        [ lpCompletionRoutine>> ]
+    } cleave WSARecvFrom socket-error* ; inline
 
 : parse-WSARecvFrom ( n WSARecvFrom -- packet sockaddr )
-    [ lpBuffers*>> WSABUF-buf swap memory>byte-array ]
-    [ [ lpFrom*>> ] [ lpFromLen*>> *int ] bi memory>byte-array ] bi ;
+    [ lpBuffers>> WSABUF-buf swap memory>byte-array ]
+    [ [ lpFrom>> ] [ lpFromLen>> *int ] bi memory>byte-array ] bi ; inline
 
 M: winnt (receive) ( datagram -- packet addrspec )
     [
@@ -144,31 +171,41 @@ M: winnt (receive) ( datagram -- packet addrspec )
     ] with-destructors ;
 
 TUPLE: WSASendTo-args port
-       s* lpBuffers* dwBufferCount* lpNumberOfBytesSent*
-       dwFlags* lpTo* iToLen* lpOverlapped* lpCompletionRoutine* ;
+       s lpBuffers dwBufferCount lpNumberOfBytesSent
+       dwFlags lpTo iToLen lpOverlapped lpCompletionRoutine ;
 
 : make-send-buffer ( packet -- WSABUF )
     "WSABUF" malloc-object &free
     [ >r malloc-byte-array &free r> set-WSABUF-buf ]
     [ >r length r> set-WSABUF-len ]
     [ nip ]
-    2tri ;
+    2tri ; inline
 
 : <WSASendTo-args> ( packet addrspec datagram -- WSASendTo )
     WSASendTo-args new
         swap >>port
-        dup port>> handle>> handle>> >>s*
+        dup port>> handle>> handle>> >>s
         swap make-sockaddr/size
             >r malloc-byte-array &free
-            r> [ >>lpTo* ] [ >>iToLen* ] bi*
-        swap make-send-buffer >>lpBuffers*
-        1 >>dwBufferCount*
-        0 >>dwFlags*
-        0 <uint> >>lpNumberOfBytesSent*
-        (make-overlapped) >>lpOverlapped* ;
+            r> [ >>lpTo ] [ >>iToLen ] bi*
+        swap make-send-buffer >>lpBuffers
+        1 >>dwBufferCount
+        0 >>dwFlags
+        0 <uint> >>lpNumberOfBytesSent
+        (make-overlapped) >>lpOverlapped ; inline
 
 : call-WSASendTo ( WSASendTo -- )
-    WSASendTo-args >tuple*< WSASendTo socket-error* ;
+    {
+        [ s>> ]
+        [ lpBuffers>> ]
+        [ dwBufferCount>> ]
+        [ lpNumberOfBytesSent>> ]
+        [ dwFlags>> ]
+        [ lpTo>> ]
+        [ iToLen>> ]
+        [ lpOverlapped>> ]
+        [ lpCompletionRoutine>> ]
+    } cleave WSASendTo socket-error* ; inline
 
 M: winnt (send) ( packet addrspec datagram -- )
     [
diff --git a/extra/classes/tuple/lib/authors.txt b/extra/classes/tuple/lib/authors.txt
deleted file mode 100644
index 7c1b2f2279..0000000000
--- a/extra/classes/tuple/lib/authors.txt
+++ /dev/null
@@ -1 +0,0 @@
-Doug Coleman
diff --git a/extra/classes/tuple/lib/lib-docs.factor b/extra/classes/tuple/lib/lib-docs.factor
deleted file mode 100644
index 0c4c11e46f..0000000000
--- a/extra/classes/tuple/lib/lib-docs.factor
+++ /dev/null
@@ -1,29 +0,0 @@
-USING: help.syntax help.markup kernel prettyprint sequences ;
-IN: classes.tuple.lib
-
-HELP: >tuple<
-{ $values { "class" "a tuple class" } }
-{ $description "Explodes the tuple so that tuple slots are on the stack in the order listed in the tuple." }
-{ $example
-    "USING: kernel prettyprint classes.tuple.lib ;"
-    "IN: scratchpad"
-    "TUPLE: foo a b c ;"
-    "1 2 3 \\ foo boa \\ foo >tuple< .s"
-    "1\n2\n3"
-}
-{ $notes "Words using " { $snippet ">tuple<" } " may be compiled." }
-{ $see-also >tuple*< } ;
-
-HELP: >tuple*<
-{ $values { "class" "a tuple class" } }
-{ $description "Explodes the tuple so that tuple slots ending with '*' are on the stack in the order listed in the tuple." }
-{ $example
-    "USING: kernel prettyprint classes.tuple.lib ;"
-    "IN: scratchpad"
-    "TUPLE: foo a bb* ccc dddd* ;"
-    "1 2 3 4 \\ foo boa \\ foo >tuple*< .s"
-    "2\n4"
-}
-{ $notes "Words using " { $snippet ">tuple*<" } " may be compiled." }
-{ $see-also >tuple< } ;
-
diff --git a/extra/classes/tuple/lib/lib-tests.factor b/extra/classes/tuple/lib/lib-tests.factor
deleted file mode 100644
index 7f7f24ab56..0000000000
--- a/extra/classes/tuple/lib/lib-tests.factor
+++ /dev/null
@@ -1,8 +0,0 @@
-USING: kernel tools.test classes.tuple.lib ;
-IN: classes.tuple.lib.tests
-
-TUPLE: foo a b* c d* e f* ;
-
-[ 1 2 3 4 5 6 ] [ 1 2 3 4 5 6 \ foo boa \ foo >tuple< ] unit-test
-[ 2 4 6 ] [ 1 2 3 4 5 6 \ foo boa \ foo >tuple*< ] unit-test
-
diff --git a/extra/classes/tuple/lib/lib.factor b/extra/classes/tuple/lib/lib.factor
deleted file mode 100755
index a234ce0d41..0000000000
--- a/extra/classes/tuple/lib/lib.factor
+++ /dev/null
@@ -1,18 +0,0 @@
-! Copyright (C) 2007 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel macros sequences slots words classes.tuple
-quotations combinators accessors ;
-IN: classes.tuple.lib
-
-: reader-slots ( seq -- quot )
-    [ reader>> 1quotation ] map [ cleave ] curry ;
-
-MACRO: >tuple< ( class -- )
-    all-slots rest-slice reader-slots ;
-
-MACRO: >tuple*< ( class -- )
-    all-slots
-    [ slot-spec-name "*" tail? ] filter
-    reader-slots ;
-
-

From 3b24b5267352203ef443d2156ac602217f5e9245 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 1 Sep 2008 04:32:26 -0500
Subject: [PATCH 15/16] Omit default method from usage lists

---
 core/generic/generic.factor           | 6 +++++-
 core/generic/standard/standard.factor | 4 ----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/core/generic/generic.factor b/core/generic/generic.factor
index 553ced5800..f2c154b3b2 100755
--- a/core/generic/generic.factor
+++ b/core/generic/generic.factor
@@ -105,6 +105,10 @@ M: method-body crossref?
         drop [ <method> dup ] 2keep reveal-method
     ] if ;
 
+PREDICATE: default-method < word "default" word-prop ;
+
+M: default-method irrelevant? drop t ;
+
 : <default-method> ( generic combination -- method )
     [ drop object bootstrap-word swap <method> ] [ make-default-method ] 2bi
     [ define ] [ drop t "default" set-word-prop ] [ drop ] 2tri ;
@@ -137,7 +141,7 @@ M: method-body definer
 M: method-body forget*
     dup "forgotten" word-prop [ drop ] [
         [
-            dup "default" word-prop [ drop ] [
+            dup default-method? [ drop ] [
                 [
                     [ "method-class" word-prop ]
                     [ "method-generic" word-prop ] bi
diff --git a/core/generic/standard/standard.factor b/core/generic/standard/standard.factor
index 503c72290a..860781e5e2 100644
--- a/core/generic/standard/standard.factor
+++ b/core/generic/standard/standard.factor
@@ -26,10 +26,6 @@ ERROR: no-method object generic ;
 : error-method ( word -- quot )
     picker swap [ no-method ] curry append ;
 
-: default-method ( word -- pair )
-    "default-method" word-prop
-    object bootstrap-word swap 2array ;
-
 : push-method ( method specializer atomic assoc -- )
     [
         [ H{ } clone <predicate-dispatch-engine> ] unless*

From c2d58d0d1c84aeaa2de07ff300e9020435524567 Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Mon, 1 Sep 2008 07:14:43 -0500
Subject: [PATCH 16/16] ui.traverse.tests: Minor fix

---
 basis/ui/traverse/traverse-tests.factor | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/basis/ui/traverse/traverse-tests.factor b/basis/ui/traverse/traverse-tests.factor
index 5e6ac4125b..ddb0ebcd12 100755
--- a/basis/ui/traverse/traverse-tests.factor
+++ b/basis/ui/traverse/traverse-tests.factor
@@ -1,9 +1,11 @@
-IN: ui.traverse.tests
-USING: ui.gadgets ui.gadgets.labels namespaces sequences kernel
+
+USING: accessors ui.gadgets ui.gadgets.labels namespaces sequences kernel
 math arrays tools.test io ui.gadgets.panes ui.traverse
 definitions compiler.units ;
 
-M: array gadget-children ;
+IN: ui.traverse.tests
+
+M: array children>> ;
 
 GENERIC: (flatten-tree) ( node -- )