From 5fb227926c4a20145999ff0eec28626f1cf4bb99 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Fri, 26 Oct 2007 03:59:36 -0400 Subject: [PATCH 1/9] Fix odd hashtable growing behavior --- core/hashtables/hashtables.factor | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/hashtables/hashtables.factor b/core/hashtables/hashtables.factor index 4761dcd88f..0eec1d6293 100644 --- a/core/hashtables/hashtables.factor +++ b/core/hashtables/hashtables.factor @@ -69,10 +69,10 @@ IN: hashtables : hash-deleted+ ( hash -- ) dup hash-deleted 1+ swap set-hash-deleted ; inline -: (set-hash) ( value key hash -- ) +: (set-hash) ( value key hash -- new? ) 2dup new-key@ - [ rot hash-count+ ] [ rot drop ] if - set-nth-pair ; inline + [ rot hash-count+ set-nth-pair t ] + [ rot drop set-nth-pair f ] if ; inline : find-pair-next >r 2 fixnum+fast r> ; inline @@ -94,10 +94,10 @@ IN: hashtables : find-pair ( array quot -- key value ? ) 0 rot (find-pair) ; inline : (rehash) ( hash array -- ) - [ swap pick (set-hash) f ] find-pair 2drop 2drop ; + [ swap pick (set-hash) drop f ] find-pair 2drop 2drop ; : hash-large? ( hash -- ? ) - dup hash-count 1 fixnum+fast 3 fixnum*fast + dup hash-count 3 fixnum*fast swap hash-array array-capacity > ; : hash-stale? ( hash -- ? ) @@ -149,7 +149,7 @@ M: hashtable assoc-size ( hash -- n ) (rehash) ; M: hashtable set-at ( value key hash -- ) - dup ?grow-hash (set-hash) ; + dup >r (set-hash) [ r> ?grow-hash ] [ r> drop ] if ; : associate ( value key -- hash ) 2 <hashtable> [ set-at ] keep ; From 5cf331a345e2d696634eb8340304a35894156165 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sat, 27 Oct 2007 14:43:17 -0400 Subject: [PATCH 2/9] Cleanup --- core/io/buffers/buffers.factor | 11 +++++++---- core/optimizer/known-words/known-words.factor | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/io/buffers/buffers.factor b/core/io/buffers/buffers.factor index 7bca0678c6..cb897c26d8 100644 --- a/core/io/buffers/buffers.factor +++ b/core/io/buffers/buffers.factor @@ -51,12 +51,11 @@ TUPLE: buffer size ptr fill pos ; : buffer>> ( buffer -- string ) dup (buffer>>) 0 rot buffer-reset ; -: (buffer-until) ( start end alien separators -- n ) +: search-buffer-until ( start end alien separators -- n ) [ >r swap alien-unsigned-1 r> memq? ] 2curry find* drop ; -: buffer-until ( separators buffer -- string separator ) - tuck { buffer-pos buffer-fill buffer-ptr } get-slots roll - (buffer-until) [ +: finish-buffer-until ( buffer n -- string separator ) + [ over buffer-pos - over buffer> swap buffer-pop @@ -64,6 +63,10 @@ TUPLE: buffer size ptr fill pos ; buffer>> f ] if* ; +: buffer-until ( separators buffer -- string separator ) + tuck { buffer-pos buffer-fill buffer-ptr } get-slots roll + search-buffer-until finish-buffer-until ; + : buffer-length ( buffer -- n ) dup buffer-fill swap buffer-pos - ; diff --git a/core/optimizer/known-words/known-words.factor b/core/optimizer/known-words/known-words.factor index 8ca92c05a3..dffe18e630 100755 --- a/core/optimizer/known-words/known-words.factor +++ b/core/optimizer/known-words/known-words.factor @@ -149,4 +149,4 @@ float-arrays combinators.private ; \ >be { { fixnum bignum } fixnum } "specializer" set-word-prop -\ (buffer-until) { fixnum fixnum simple-alien string } "specializer" set-word-prop +\ search-buffer-until { fixnum fixnum simple-alien string } "specializer" set-word-prop From 5a797c83ee10fef1537b575342bc797e32279c5f Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sat, 27 Oct 2007 14:43:30 -0400 Subject: [PATCH 3/9] tools.completion no longer depends on number tower --- extra/tools/completion/completion.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/tools/completion/completion.factor b/extra/tools/completion/completion.factor index caa2eb42f1..4c19bbc8db 100644 --- a/extra/tools/completion/completion.factor +++ b/extra/tools/completion/completion.factor @@ -39,7 +39,7 @@ vectors words assocs combinators sorting ; : score ( full fuzzy -- n ) dup [ - [ [ length ] 2apply - 15 swap [-] 3 / ] 2keep + [ [ length ] 2apply - 15 swap [-] 3 /f ] 2keep runs [ [ 0 [ pick score-1 max ] reduce nip ] keep length * + @@ -50,7 +50,7 @@ vectors words assocs combinators sorting ; : rank-completions ( results -- newresults ) sort-keys <reversed> - [ 0 [ first max ] reduce 3 / ] keep + [ 0 [ first max ] reduce 3 /f ] keep [ first < ] curry* subset [ second ] map ; From 748cb2c3184c7456ffb2f1ab26700cfa8d840e49 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sun, 28 Oct 2007 00:28:46 -0400 Subject: [PATCH 4/9] Fix bug in match --- extra/match/match-tests.factor | 2 ++ extra/match/match.factor | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) mode change 100644 => 100755 extra/match/match-tests.factor mode change 100644 => 100755 extra/match/match.factor diff --git a/extra/match/match-tests.factor b/extra/match/match-tests.factor old mode 100644 new mode 100755 index 6761557cbe..d9162ae286 --- a/extra/match/match-tests.factor +++ b/extra/match/match-tests.factor @@ -5,6 +5,8 @@ IN: temporary MATCH-VARS: ?a ?b ; +[ f ] [ { ?a ?a } { 1 2 } match ] unit-test + [ H{ { ?a 1 } { ?b 2 } } ] [ { ?a ?b } { 1 2 } match ] unit-test diff --git a/extra/match/match.factor b/extra/match/match.factor old mode 100644 new mode 100755 index 296bcf778b..0b4b2f1a0d --- a/extra/match/match.factor +++ b/extra/match/match.factor @@ -3,7 +3,7 @@ ! ! Based on pattern matching code from Paul Graham's book 'On Lisp'. USING: parser kernel words namespaces sequences tuples -combinators macros ; +combinators macros assocs ; IN: match SYMBOL: _ @@ -22,10 +22,13 @@ SYMBOL: _ : match-var? ( symbol -- bool ) dup word? [ "match-var" word-prop ] [ drop f ] if ; +: set-match-var ( value var -- ? ) + dup namespace key? [ get = ] [ set t ] if ; + : (match) ( value1 value2 -- matched? ) { - { [ dup match-var? ] [ set t ] } - { [ over match-var? ] [ swap set t ] } + { [ dup match-var? ] [ set-match-var ] } + { [ over match-var? ] [ swap set-match-var ] } { [ 2dup = ] [ 2drop t ] } { [ 2dup [ _ eq? ] either? ] [ 2drop t ] } { [ 2dup [ sequence? ] both? ] [ From 4a2a214cb028469af54e20ab0612a530ca59f34f Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sun, 28 Oct 2007 00:42:36 -0400 Subject: [PATCH 5/9] Another fix --- extra/match/match.factor | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extra/match/match.factor b/extra/match/match.factor index 0b4b2f1a0d..527d7f2465 100755 --- a/extra/match/match.factor +++ b/extra/match/match.factor @@ -61,4 +61,6 @@ MACRO: match-cond ( assoc -- ) } cond ; : match-replace ( object pattern1 pattern2 -- result ) - -rot match [ replace-patterns ] bind ; + -rot + match [ "Pattern does not match" throw ] unless* + [ replace-patterns ] bind ; From 346937a31a7b5b3e2afc0ee7cd370c35bb810bcd Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sun, 28 Oct 2007 01:19:19 -0400 Subject: [PATCH 6/9] Fix stack effect error in com-back --- extra/ui/tools/walker/walker.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 extra/ui/tools/walker/walker.factor diff --git a/extra/ui/tools/walker/walker.factor b/extra/ui/tools/walker/walker.factor old mode 100644 new mode 100755 index fabdf26818..3ff9b284e5 --- a/extra/ui/tools/walker/walker.factor +++ b/extra/ui/tools/walker/walker.factor @@ -39,7 +39,7 @@ TUPLE: walker model interpreter history ; : com-back ( walker -- ) dup walker-history - dup empty? [ drop ] [ pop swap call-tool* ] if ; + dup empty? [ 2drop ] [ pop swap call-tool* ] if ; : reset-walker ( walker -- ) <interpreter> over set-walker-interpreter From 738672be9fec87e073d77b85d736b3c2c4c24947 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sun, 28 Oct 2007 01:19:33 -0400 Subject: [PATCH 7/9] ui.windows cleanup --- extra/ui/windows/windows.factor | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/extra/ui/windows/windows.factor b/extra/ui/windows/windows.factor index bbcf96e0b2..cba9c427b7 100755 --- a/extra/ui/windows/windows.factor +++ b/extra/ui/windows/windows.factor @@ -14,21 +14,18 @@ TUPLE: windows-ui-backend ; : crlf>lf CHAR: \r swap remove ; : lf>crlf [ [ dup CHAR: \n = [ CHAR: \r , ] when , ] each ] "" make ; -: (enum-clipboard) ( n -- n ) - EnumClipboardFormats win32-error dup 0 > [ dup , (enum-clipboard) ] when ; - : enum-clipboard ( -- seq ) - [ 0 (enum-clipboard) ] { } make nip ; + 0 [ EnumClipboardFormats win32-error dup dup 0 > ] [ ] + { } unfold nip ; : with-clipboard ( quot -- ) f OpenClipboard win32-error=0/f call CloseClipboard win32-error=0/f ; inline - : paste ( -- str ) [ - CF_UNICODETEXT IsClipboardFormatAvailable 0 = [ + CF_UNICODETEXT IsClipboardFormatAvailable zero? [ ! nothing to paste "" ] [ @@ -132,7 +129,7 @@ SYMBOL: mouse-captured } ; : key-state-down? - GetKeyState 1 16 shift bitand 0 > ; + GetKeyState 16 bit? ; : left-shift? ( -- ? ) VK_LSHIFT key-state-down? ; : left-ctrl? ( -- ? ) VK_LCONTROL key-state-down? ; @@ -319,7 +316,7 @@ SYMBOL: hWnd ! Keyboard events { [ dup WM_KEYDOWN = over WM_SYSKEYDOWN = or ] - [ drop 4dup handle-wm-keydown DefWindowProc ] } + [ drop 4dup handle-wm-keydown DefWindowProc ] } { [ dup WM_CHAR = over WM_SYSCHAR = or ] [ drop 4dup handle-wm-char DefWindowProc ] } { [ dup WM_KEYUP = over WM_SYSKEYUP = or ] From da4c77b445a0e228854fad72187c8f98f96c972b Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sun, 28 Oct 2007 01:21:26 -0400 Subject: [PATCH 8/9] Remove commented-out code --- extra/ui/windows/windows.factor | 3 --- 1 file changed, 3 deletions(-) diff --git a/extra/ui/windows/windows.factor b/extra/ui/windows/windows.factor index cba9c427b7..6b19085a1c 100755 --- a/extra/ui/windows/windows.factor +++ b/extra/ui/windows/windows.factor @@ -306,8 +306,6 @@ SYMBOL: hWnd "uint" { "void*" "uint" "long" "long" } "stdcall" [ [ pick - ! "Message: " write dup get-windows-message-name write - ! " " write dup unparse print flush { { [ dup WM_CLOSE = ] [ drop handle-wm-close 0 ] } { [ dup WM_PAINT = ] @@ -340,7 +338,6 @@ SYMBOL: hWnd { [ t ] [ drop DefWindowProc ] } } cond ] ui-try - ! "finished handling message" print .s flush ] alien-callback ; : do-events ( -- ) From d69ad235f6ffc740cb0bbf7d4b7da82d317e52e6 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@factorcode.org> Date: Sun, 28 Oct 2007 01:21:37 -0400 Subject: [PATCH 9/9] Remove non-working Windows CE SEH code --- vm/Config.windows.ce.arm | 1 - vm/os-windows-ce.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) mode change 100644 => 100755 vm/Config.windows.ce.arm diff --git a/vm/Config.windows.ce.arm b/vm/Config.windows.ce.arm old mode 100644 new mode 100755 index 1026968674..98e08e8f61 --- a/vm/Config.windows.ce.arm +++ b/vm/Config.windows.ce.arm @@ -1,5 +1,4 @@ CC = arm-wince-mingw32ce-gcc DLL_SUFFIX=-ce EXE_SUFFIX=-ce -PLAF_DLL_OBJS += vm/os-windows-ce-arm.o include vm/Config.windows.ce vm/Config.arm diff --git a/vm/os-windows-ce.c b/vm/os-windows-ce.c index 7113cd4498..e6ef8b1108 100755 --- a/vm/os-windows-ce.c +++ b/vm/os-windows-ce.c @@ -37,7 +37,7 @@ char *getenv(char *name) return 0; /* unreachable */ } -long exception_handler(PEXCEPTION_RECORD rec, void *frame, void *ctx, void *dispatch) +void c_to_factor_toplevel(CELL quot) { - return 0; + c_to_factor(quot); }