From be9bc3115f785df818383733721e8d0cc62c3229 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:17:24 -0500
Subject: [PATCH 01/11] Add init hook for callbacks hash

---
 core/alien/c-types/c-types.factor   | 0
 core/alien/compiler/compiler.factor | 5 +++--
 2 files changed, 3 insertions(+), 2 deletions(-)
 mode change 100644 => 100755 core/alien/c-types/c-types.factor

diff --git a/core/alien/c-types/c-types.factor b/core/alien/c-types/c-types.factor
old mode 100644
new mode 100755
diff --git a/core/alien/compiler/compiler.factor b/core/alien/compiler/compiler.factor
index 992c7763f2..7495be42ca 100755
--- a/core/alien/compiler/compiler.factor
+++ b/core/alien/compiler/compiler.factor
@@ -5,7 +5,8 @@ hashtables kernel math namespaces sequences words
 inference.backend inference.dataflow system
 math.parser classes alien.arrays alien.c-types alien.structs
 alien.syntax cpu.architecture alien inspector quotations assocs
-kernel.private threads continuations.private libc combinators ;
+kernel.private threads continuations.private libc combinators
+init ;
 IN: alien.compiler
 
 ! Common protocol for alien-invoke/alien-callback/alien-indirect
@@ -301,7 +302,7 @@ M: alien-indirect generate-node
 ! this hashtable, they will all be blown away by code GC, beware
 SYMBOL: callbacks
 
-H{ } clone callbacks set-global
+[ H{ } clone callbacks set-global ] "alien.compiler" add-init-hook
 
 : register-callback ( word -- ) dup callbacks get set-at ;
 

From cb198f907eb8e3c823653f23b868d5efd4fc4982 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:18:28 -0500
Subject: [PATCH 02/11] Add attribution

---
 extra/io/windows/nt/pipes/pipes.factor | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/extra/io/windows/nt/pipes/pipes.factor b/extra/io/windows/nt/pipes/pipes.factor
index 2d70085165..a10a98bd30 100755
--- a/extra/io/windows/nt/pipes/pipes.factor
+++ b/extra/io/windows/nt/pipes/pipes.factor
@@ -5,6 +5,9 @@ windows.types math windows.kernel32 windows namespaces kernel
 sequences windows.errors assocs math.parser system random ;
 IN: io.windows.nt.pipes
 
+! This code is based on
+! http://twistedmatrix.com/trac/browser/trunk/twisted/internet/iocpreactor/process.py
+
 : default-security-attributes ( -- obj )
     "SECURITY_ATTRIBUTES" <c-object>
     "SECURITY_ATTRIBUTES" heap-size over set-SECURITY_ATTRIBUTES-nLength ;

From 32da4e364cd6a64a243e5661ab88f5399a51e607 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:19:06 -0500
Subject: [PATCH 03/11] Deployment fixes for Windows

---
 extra/tools/deploy/deploy.factor                |  2 +-
 extra/tools/deploy/shaker/shaker.factor         | 16 ++++++++--------
 extra/tools/deploy/shaker/strip-debugger.factor |  0
 3 files changed, 9 insertions(+), 9 deletions(-)
 mode change 100644 => 100755 extra/tools/deploy/shaker/shaker.factor
 mode change 100644 => 100755 extra/tools/deploy/shaker/strip-debugger.factor

diff --git a/extra/tools/deploy/deploy.factor b/extra/tools/deploy/deploy.factor
index 7c0dabc458..1b05412227 100755
--- a/extra/tools/deploy/deploy.factor
+++ b/extra/tools/deploy/deploy.factor
@@ -54,7 +54,7 @@ IN: tools.deploy
 
         "\"-output-image=" swap "\"" 3append ,
 
-        "-no-stack-traces" ,
+        ! "-no-stack-traces" ,
         
         "-no-user-init" ,
     ] { } make ;
diff --git a/extra/tools/deploy/shaker/shaker.factor b/extra/tools/deploy/shaker/shaker.factor
old mode 100644
new mode 100755
index 0322ed372f..3e1aa3ab53
--- a/extra/tools/deploy/shaker/shaker.factor
+++ b/extra/tools/deploy/shaker/shaker.factor
@@ -24,7 +24,6 @@ IN: tools.deploy.shaker
         "Stripping debugger" show
         "resource:extra/tools/deploy/shaker/strip-debugger.factor"
         run-file
-        do-parse-hook
     ] when ;
 
 : strip-libc ( -- )
@@ -32,7 +31,6 @@ IN: tools.deploy.shaker
         "Stripping manual memory management debug code" show
         "resource:extra/tools/deploy/shaker/strip-libc.factor"
         run-file
-        do-parse-hook
     ] when ;
 
 : strip-cocoa ( -- )
@@ -40,7 +38,6 @@ IN: tools.deploy.shaker
         "Stripping unused Cocoa methods" show
         "resource:extra/tools/deploy/shaker/strip-cocoa.factor"
         run-file
-        do-parse-hook
     ] when ;
 
 : strip-assoc ( retained-keys assoc -- newassoc )
@@ -116,7 +113,6 @@ SYMBOL: deploy-vocab
 
         strip-dictionary? [
             {
-                builtins
                 dictionary
                 inspector-hook
                 lexer-factory
@@ -142,6 +138,10 @@ SYMBOL: deploy-vocab
             "c-types" "alien.c-types" lookup ,
         ] when
 
+        native-io? [
+            "default-buffer-size" "io.nonblocking" lookup ,
+        ] when
+
         deploy-ui? get [
             "ui" child-vocabs
             "cocoa" child-vocabs
@@ -152,10 +152,11 @@ SYMBOL: deploy-vocab
         ] when
     ] { } make dup . ;
 
-: strip ( -- )
-    strip-libc
+: strip ( hook -- )
+    >r strip-libc
     strip-cocoa
     strip-debugger
+    r> [ call ] when*
     strip-init-hooks
     deploy-vocab get vocab-main set-boot-quot*
     retained-props >r
@@ -168,10 +169,9 @@ SYMBOL: deploy-vocab
     [
         [
             deploy-vocab set
-            parse-hook get >r
+            parse-hook get
             parse-hook off
             deploy-vocab get require
-            r> [ call ] when*
             strip
             finish-deploy
         ] [
diff --git a/extra/tools/deploy/shaker/strip-debugger.factor b/extra/tools/deploy/shaker/strip-debugger.factor
old mode 100644
new mode 100755

From 25de6273b391d9b915cf4a0ea080ef1c18120c97 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:20:32 -0500
Subject: [PATCH 04/11] Fix editors

---
 extra/ui/gadgets/editors/editors-tests.factor | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/extra/ui/gadgets/editors/editors-tests.factor b/extra/ui/gadgets/editors/editors-tests.factor
index a38ca6044e..6be0423e95 100755
--- a/extra/ui/gadgets/editors/editors-tests.factor
+++ b/extra/ui/gadgets/editors/editors-tests.factor
@@ -1,7 +1,7 @@
 USING: ui.gadgets.editors tools.test kernel io io.streams.plain
 definitions namespaces ui.gadgets
 ui.gadgets.grids prettyprint documents ui.gestures
-tools.test.inference tools.test.ui ;
+tools.test.inference tools.test.ui models ;
 
 [ "foo bar" ] [
     <editor> "editor" set
@@ -31,3 +31,9 @@ tools.test.inference tools.test.ui ;
 ] unit-test
 
 { 0 1 } [ <editor> ] unit-test-effect
+
+"hello" <model> <field> "field" set
+
+"field" get [
+    [ "hello" ] [ "field" get field-model model-value ] unit-test
+] with-grafted-gadget

From 555e2c9964347129b12438eea1c79bbad21c5df7 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:21:26 -0500
Subject: [PATCH 05/11] Fix activate-control

---
 extra/ui/gadgets/gadgets.factor               |  8 ++++--
 .../ui/gadgets/incremental/incremental.factor | 25 +++++++++++--------
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/extra/ui/gadgets/gadgets.factor b/extra/ui/gadgets/gadgets.factor
index 9929cece29..7dd12cb610 100755
--- a/extra/ui/gadgets/gadgets.factor
+++ b/extra/ui/gadgets/gadgets.factor
@@ -70,8 +70,12 @@ M: gadget model-changed 2drop ;
     >r <gadget> r> construct-delegate ; inline
 
 : activate-control ( gadget -- )
-    dup gadget-model dup [ 2dup add-connection ] when drop
-    dup gadget-model swap model-changed ;
+    dup gadget-model dup [
+        2dup add-connection
+        swap model-changed
+    ] [
+        2drop
+    ] if ;
 
 : deactivate-control ( gadget -- )
     dup gadget-model dup [ 2dup remove-connection ] when 2drop ;
diff --git a/extra/ui/gadgets/incremental/incremental.factor b/extra/ui/gadgets/incremental/incremental.factor
index a5c7431d36..3e068ead45 100755
--- a/extra/ui/gadgets/incremental/incremental.factor
+++ b/extra/ui/gadgets/incremental/incremental.factor
@@ -1,6 +1,7 @@
 ! Copyright (C) 2005, 2007 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io kernel math namespaces math.vectors ui.gadgets ;
+USING: io kernel math namespaces math.vectors ui.gadgets
+dlists ;
 IN: ui.gadgets.incremental
 
 ! Incremental layout allows adding lines to panes to be O(1).
@@ -14,12 +15,14 @@ IN: ui.gadgets.incremental
 ! New gadgets are added at
 !   incremental-cursor gadget-orientation v*
 
-TUPLE: incremental cursor ;
+TUPLE: incremental cursor queue ;
 
 : <incremental> ( pack -- incremental )
-    dup pref-dim
-    { set-gadget-delegate set-incremental-cursor }
-    incremental construct ;
+    dup pref-dim <dlist> {
+        set-gadget-delegate
+        set-incremental-cursor
+        set-incremental-queue
+    } incremental construct ;
 
 M: incremental pref-dim*
     dup gadget-layout-state [
@@ -40,17 +43,17 @@ M: incremental pref-dim*
     swap set-rect-loc ;
 
 : prefer-incremental ( gadget -- )
-    dup forget-pref-dim dup pref-dim over set-rect-dim
-    layout ;
+    dup forget-pref-dim dup pref-dim swap set-rect-dim ;
 
 : add-incremental ( gadget incremental -- )
     not-in-layout
-    2dup (add-gadget)
-    over prefer-incremental
+    2dup incremental-queue push-front
+    add-gadget ;
+
+: (add-incremental) ( gadget incremental -- )
     2dup incremental-loc
     tuck update-cursor
-    dup prefer-incremental
-    gadget-parent [ invalidate* ] when* ;
+    prefer-incremental ;
 
 : clear-incremental ( incremental -- )
     not-in-layout

From 2ace9adafbd4bfe212b34cfb026f4c319c48d835 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:21:41 -0500
Subject: [PATCH 06/11] Fix deployment of ui.windows

---
 extra/ui/windows/windows.factor | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/extra/ui/windows/windows.factor b/extra/ui/windows/windows.factor
index cd77dc0a98..d4e3770f7b 100755
--- a/extra/ui/windows/windows.factor
+++ b/extra/ui/windows/windows.factor
@@ -280,10 +280,13 @@ SYMBOL: hWnd
     mouse-captured? [ release-capture ] when
     prepare-mouse send-button-up ;
 
+: make-TRACKMOUSEEVENT ( hWnd -- alien )
+    "TRACKMOUSEEVENT" <c-object> [ set-TRACKMOUSEEVENT-hwndTrack ] keep
+    "TRACKMOUSEEVENT" heap-size over set-TRACKMOUSEEVENT-cbSize ;
+
 : handle-wm-mousemove ( hWnd uMsg wParam lParam -- )
     2nip
-    over "TRACKMOUSEEVENT" <c-object> [ set-TRACKMOUSEEVENT-hwndTrack ] keep
-    "TRACKMOUSEEVENT" heap-size over set-TRACKMOUSEEVENT-cbSize
+    over make-TRACKMOUSEEVENT
     TME_LEAVE over set-TRACKMOUSEEVENT-dwFlags
     0 over set-TRACKMOUSEEVENT-dwHoverTime
     TrackMouseEvent drop
@@ -387,10 +390,10 @@ SYMBOL: hWnd
     dup SetForegroundWindow drop
     SetFocus drop ;
 
-: init-win32-ui
+: init-win32-ui ( -- )
     "MSG" <c-object> msg-obj set
     "Factor-window" malloc-u16-string class-name-ptr set-global
-    register-wndclassex
+    register-wndclassex drop
     GetDoubleClickTime double-click-timeout set-global ;
 
 : cleanup-win32-ui ( -- )

From 0c57b8e08680a06b49f8cbd2bda4319f89f0e01a Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:26:13 -0500
Subject: [PATCH 07/11] Remove debug

---
 extra/tools/deploy/deploy.factor | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/extra/tools/deploy/deploy.factor b/extra/tools/deploy/deploy.factor
index 1b05412227..7c0dabc458 100755
--- a/extra/tools/deploy/deploy.factor
+++ b/extra/tools/deploy/deploy.factor
@@ -54,7 +54,7 @@ IN: tools.deploy
 
         "\"-output-image=" swap "\"" 3append ,
 
-        ! "-no-stack-traces" ,
+        "-no-stack-traces" ,
         
         "-no-user-init" ,
     ] { } make ;

From a552625ee3eddfeef5dccb64440ecc09dbdb715c Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 03:39:34 -0500
Subject: [PATCH 08/11] Fix stream-read-partial on a line-reader

---
 core/io/io.factor                        |  0
 core/io/streams/lines/lines-tests.factor |  8 ++++++++
 core/io/streams/lines/lines.factor       | 23 +++++++++++++++++------
 3 files changed, 25 insertions(+), 6 deletions(-)
 mode change 100644 => 100755 core/io/io.factor
 mode change 100644 => 100755 core/io/streams/lines/lines-tests.factor
 mode change 100644 => 100755 core/io/streams/lines/lines.factor

diff --git a/core/io/io.factor b/core/io/io.factor
old mode 100644
new mode 100755
diff --git a/core/io/streams/lines/lines-tests.factor b/core/io/streams/lines/lines-tests.factor
old mode 100644
new mode 100755
index b09711bf60..64dc7bff3b
--- a/core/io/streams/lines/lines-tests.factor
+++ b/core/io/streams/lines/lines-tests.factor
@@ -41,6 +41,14 @@ unit-test
      4 swap stream-read
 ] unit-test
 
+[
+    "1234"
+] [
+     "Hello world\r\n1234" <string-reader>
+     dup stream-readln drop
+     4 swap stream-read-partial
+] unit-test
+
 [
     CHAR: 1
 ] [
diff --git a/core/io/streams/lines/lines.factor b/core/io/streams/lines/lines.factor
old mode 100644
new mode 100755
index 3de8bdc7b7..391c602cc3
--- a/core/io/streams/lines/lines.factor
+++ b/core/io/streams/lines/lines.factor
@@ -32,15 +32,26 @@ M: line-reader stream-readln ( stream -- str )
     "\r\n" over delegate stream-read-until handle-readln ;
 
 : fix-read ( stream string -- string )
-    "\n" ?head [ swap stream-read1 [ add ] when* ] [ nip ] if ;
+    over line-reader-cr [
+        over cr-
+        "\n" ?head [
+            swap stream-read1 [ add ] when*
+        ] [ nip ] if
+    ] [ nip ] if ;
 
 M: line-reader stream-read
-    tuck delegate stream-read
-    over line-reader-cr [ over cr- fix-read ] [ nip ] if ;
+    tuck delegate stream-read fix-read ;
+
+M: line-reader stream-read-partial
+    tuck delegate stream-read-partial fix-read ;
 
 : fix-read1 ( stream char -- char )
-    dup CHAR: \n = [ drop stream-read1 ] [ nip ] if ;
+    over line-reader-cr [
+        over cr-
+        dup CHAR: \n = [
+            drop stream-read1
+        ] [ nip ] if
+    ] [ nip ] if ;
 
 M: line-reader stream-read1 ( stream -- char )
-    dup delegate stream-read1
-    over line-reader-cr [ over cr- fix-read1 ] [ nip ] if ;
+    dup delegate stream-read1 fix-read1 ;

From 0714bb7a86352fd76ecd8a752c962e05fd6dd7f0 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 04:19:50 -0500
Subject: [PATCH 09/11] Revert incomplete changes

---
 .../ui/gadgets/incremental/incremental.factor | 25 ++++++++-----------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/extra/ui/gadgets/incremental/incremental.factor b/extra/ui/gadgets/incremental/incremental.factor
index 3e068ead45..a5c7431d36 100755
--- a/extra/ui/gadgets/incremental/incremental.factor
+++ b/extra/ui/gadgets/incremental/incremental.factor
@@ -1,7 +1,6 @@
 ! Copyright (C) 2005, 2007 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io kernel math namespaces math.vectors ui.gadgets
-dlists ;
+USING: io kernel math namespaces math.vectors ui.gadgets ;
 IN: ui.gadgets.incremental
 
 ! Incremental layout allows adding lines to panes to be O(1).
@@ -15,14 +14,12 @@ IN: ui.gadgets.incremental
 ! New gadgets are added at
 !   incremental-cursor gadget-orientation v*
 
-TUPLE: incremental cursor queue ;
+TUPLE: incremental cursor ;
 
 : <incremental> ( pack -- incremental )
-    dup pref-dim <dlist> {
-        set-gadget-delegate
-        set-incremental-cursor
-        set-incremental-queue
-    } incremental construct ;
+    dup pref-dim
+    { set-gadget-delegate set-incremental-cursor }
+    incremental construct ;
 
 M: incremental pref-dim*
     dup gadget-layout-state [
@@ -43,17 +40,17 @@ M: incremental pref-dim*
     swap set-rect-loc ;
 
 : prefer-incremental ( gadget -- )
-    dup forget-pref-dim dup pref-dim swap set-rect-dim ;
+    dup forget-pref-dim dup pref-dim over set-rect-dim
+    layout ;
 
 : add-incremental ( gadget incremental -- )
     not-in-layout
-    2dup incremental-queue push-front
-    add-gadget ;
-
-: (add-incremental) ( gadget incremental -- )
+    2dup (add-gadget)
+    over prefer-incremental
     2dup incremental-loc
     tuck update-cursor
-    prefer-incremental ;
+    dup prefer-incremental
+    gadget-parent [ invalidate* ] when* ;
 
 : clear-incremental ( incremental -- )
     not-in-layout

From a1bdbd7143caf7fb644f0fe816660c92d0212daa Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 19:20:22 -0500
Subject: [PATCH 10/11] Remove debug message

---
 core/sequences/sequences.factor | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor
index f179bf069c..de10e5c2e4 100755
--- a/core/sequences/sequences.factor
+++ b/core/sequences/sequences.factor
@@ -44,7 +44,7 @@ M: sequence lengthen 2dup length > [ set-length ] [ 2drop ] if ;
 TUPLE: bounds-error index seq ;
 
 : bounds-error ( n seq -- * )
-    die \ bounds-error construct-boa throw ;
+    \ bounds-error construct-boa throw ;
 
 : bounds-check ( n seq -- n seq )
     2dup bounds-check? [ bounds-error ] unless ; inline

From c5c7999a1577c13d5bdcbbc4b2f0bbd3163046d7 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@factorcode.org>
Date: Wed, 21 Nov 2007 19:21:02 -0500
Subject: [PATCH 11/11] Doc update

---
 extra/help/handbook/handbook.factor | 2 ++
 1 file changed, 2 insertions(+)
 mode change 100644 => 100755 extra/help/handbook/handbook.factor

diff --git a/extra/help/handbook/handbook.factor b/extra/help/handbook/handbook.factor
old mode 100644
new mode 100755
index 749a5ed0ec..d1b48d9955
--- a/extra/help/handbook/handbook.factor
+++ b/extra/help/handbook/handbook.factor
@@ -48,6 +48,7 @@ $nl
     { "pathname string"       { "an OS-specific pathname which identifies a file" } }
     { "sequence" { "an object whose class implements the " { $link "sequence-protocol" } } }
     { "slot"                  { "a component of an object which can store a value" } }
+    { "stack effect"          { "a pictorial representation of a word's inputs and outputs, for example " { $snippet "+ ( x y -- z )" } ". See " { $link "effects" } } }
     { "true value"            { "any object not equal to " { $link f } } }
     { "vocabulary" { "a named set of words. See " { $link "vocabularies" } } }
     { "vocabulary specifier"  { "a " { $link vocab } ", " { $link vocab-link } " or a string naming a vocabulary" } }
@@ -71,6 +72,7 @@ $nl
 ARTICLE: "dataflow" "Data and control flow"
 { $subsection "evaluator" }
 { $subsection "words" }
+{ $subsection "effects" }
 { $subsection "shuffle-words" }
 { $subsection "booleans" }
 { $subsection "conditionals" }