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" }