minor fixes; init-io now fully initializes unix ffi i/o

cvs
Slava Pestov 2005-04-16 03:00:22 +00:00
parent 19439c0e08
commit d6b42a1f5c
4 changed files with 32 additions and 8 deletions

View File

@ -20,6 +20,9 @@ UNION: sequence array string sbuf vector ;
M: object >list ( seq -- list ) dup length 0 rot (>list) ; M: object >list ( seq -- list ) dup length 0 rot (>list) ;
M: general-list >list ( list -- list ) ; M: general-list >list ( list -- list ) ;
: 2nth ( s s n -- x x ) tuck swap nth >r swap nth r> ;
! Combinators
GENERIC: (seq-each) ( quot seq -- ) inline GENERIC: (seq-each) ( quot seq -- ) inline
M: object (seq-each) ( quot seq -- ) M: object (seq-each) ( quot seq -- )
@ -36,16 +39,20 @@ M: general-list (seq-each) ( quot seq -- )
swap [ with ] seq-each 2drop ; inline swap [ with ] seq-each 2drop ; inline
GENERIC: (tree-each) ( quot obj -- ) inline GENERIC: (tree-each) ( quot obj -- ) inline
M: object (tree-each) swap call ; M: object (tree-each) swap call ;
M: cons (tree-each) [ car (tree-each) ] 2keep cdr (tree-each) ; M: cons (tree-each) [ car (tree-each) ] 2keep cdr (tree-each) ;
M: f (tree-each) swap call ; M: f (tree-each) swap call ;
M: sequence (tree-each) [ swap call ] seq-each-with ; M: sequence (tree-each) [ swap call ] seq-each-with ;
: tree-each swap (tree-each) ; inline : tree-each swap (tree-each) ; inline
: tree-each-with ( obj vector quot -- ) : tree-each-with ( obj vector quot -- )
swap [ with ] tree-each 2drop ; inline swap [ with ] tree-each 2drop ; inline
: 2nth ( s s n -- x x ) tuck swap nth >r swap nth r> ;
: (seq-2nmap) ( seq1 seq2 i quot -- elt3 ) : (seq-2nmap) ( seq1 seq2 i quot -- elt3 )
pick pick >r >r >r 2nth r> call r> r> swap set-nth ; inline pick pick >r >r >r 2nth r> call r> r> swap set-nth ; inline
@ -58,6 +65,7 @@ M: sequence (tree-each) [ swap call ] seq-each-with ;
: seq-2map ( seq1 seq2 quot -- seq | quot: elt1 elt2 -- elt3 ) : seq-2map ( seq1 seq2 quot -- seq | quot: elt1 elt2 -- elt3 )
>r clone r> over >r seq-2nmap r> ; inline >r clone r> over >r seq-2nmap r> ; inline
! Operations
: index* ( obj i seq -- n ) : index* ( obj i seq -- n )
#! The index of the object in the sequence, starting from i. #! The index of the object in the sequence, starting from i.
2dup length >= [ 2dup length >= [
@ -74,7 +82,7 @@ M: sequence (tree-each) [ swap call ] seq-each-with ;
#! Push a value on the end of a sequence. #! Push a value on the end of a sequence.
dup length swap set-nth ; dup length swap set-nth ;
: seq-append ( s1 s2 -- ) : nappend ( s1 s2 -- )
#! Destructively append s2 to s1. #! Destructively append s2 to s1.
[ over push ] seq-each drop ; [ over push ] seq-each drop ;
@ -88,6 +96,16 @@ M: sequence (tree-each) [ swap call ] seq-each-with ;
: >pop> ( stack -- stack ) dup pop drop ; : >pop> ( stack -- stack ) dup pop drop ;
: (nreverse) ( seq i -- )
#! Swap seq[i] with seq[length-i-1].
;
: nreverse ( seq -- )
#! Destructively reverse seq.
dup length 2 /i [ 2dup (nreverse) ] repeat drop ;
! Equality testing
: length= ( seq seq -- ? ) length swap length number= ; : length= ( seq seq -- ? ) length swap length number= ;
: (sequence=) ( seq seq i -- ? ) : (sequence=) ( seq seq i -- ? )

View File

@ -6,7 +6,7 @@ USING: generic kernel math namespaces ;
! A tile is a gadget with a caption. Dragging the caption ! A tile is a gadget with a caption. Dragging the caption
! moves the gadget. The title bar also has buttons for ! moves the gadget. The title bar also has buttons for
! performing various actions. ! performing various actions.
TUPLE: tile original ( size ) ; TUPLE: tile original ;
: click-rel ( gadget -- point ) : click-rel ( gadget -- point )
screen-pos screen-pos

View File

@ -2,7 +2,7 @@
! See http://factor.sf.net/license.txt for BSD license. ! See http://factor.sf.net/license.txt for BSD license.
IN: io-internals IN: io-internals
USING: errors generic hashtables kernel lists math namespaces USING: errors generic hashtables kernel lists math namespaces
sequences streams strings threads vectors ; sequences stdio streams strings threads vectors ;
! These let us load the code into a CFactor instance using the ! These let us load the code into a CFactor instance using the
! old C-based I/O. They will be removed soon. ! old C-based I/O. They will be removed soon.
@ -55,7 +55,13 @@ GENERIC: io-task-events ( task -- events )
! this with the hash-size call. ! this with the hash-size call.
SYMBOL: io-tasks SYMBOL: io-tasks
: init-io ( -- ) global [ <namespace> io-tasks set ] bind ; : init-io ( -- )
#! Should only be called on startup. Calling this at any
#! other time can have unintended consequences.
global [
<namespace> io-tasks set
0 <reader> 1 <writer> <talk-stream> stdio set
] bind ;
: io-task-fd io-task-port port-handle ; : io-task-fd io-task-port port-handle ;

View File

@ -16,8 +16,8 @@ IN: vectors
: vector-append ( v1 v2 -- vec ) : vector-append ( v1 v2 -- vec )
over length over length + <vector> over length over length + <vector>
[ rot seq-append ] keep [ rot nappend ] keep
[ swap seq-append ] keep ; [ swap nappend ] keep ;
: vector-project ( n quot -- vector ) : vector-project ( n quot -- vector )
#! Execute the quotation n times, passing the loop counter #! Execute the quotation n times, passing the loop counter