added a zero? word

cvs
Slava Pestov 2006-01-28 20:49:31 +00:00
parent 8251d788f1
commit 8569427c4e
36 changed files with 79 additions and 56 deletions

View File

@ -1,7 +1,7 @@
! Copyright (C) 2004, 2005 Mackenzie Straight. ! Copyright (C) 2004, 2005 Mackenzie Straight.
! See http://factor.sf.net/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: kernel-internals IN: kernel-internals
USING: alien errors kernel ; USING: alien errors kernel math ;
LIBRARY: libc LIBRARY: libc
FUNCTION: ulong malloc ( ulong size ) ; FUNCTION: ulong malloc ( ulong size ) ;
@ -10,4 +10,4 @@ FUNCTION: void free ( ulong ptr ) ;
FUNCTION: ulong realloc ( ulong ptr, ulong size ) ; FUNCTION: ulong realloc ( ulong ptr, ulong size ) ;
FUNCTION: void memcpy ( ulong dst, ulong src, ulong size ) ; FUNCTION: void memcpy ( ulong dst, ulong src, ulong size ) ;
: check-ptr dup 0 = [ "Out of memory" throw ] when ; : check-ptr dup zero? [ "Out of memory" throw ] when ;

View File

@ -124,7 +124,7 @@ math namespaces ;
] "ushort*" define-primitive-type ] "ushort*" define-primitive-type
[ [
[ alien-unsigned-4 0 = not ] "getter" set [ alien-unsigned-4 zero? not ] "getter" set
[ 1 0 ? set-alien-unsigned-4 ] "setter" set [ 1 0 ? set-alien-unsigned-4 ] "setter" set
bootstrap-cell "width" set bootstrap-cell "width" set
bootstrap-cell "align" set bootstrap-cell "align" set

View File

@ -117,7 +117,7 @@ M: fixnum ' ( n -- tagged ) fixnum-tag immediate ;
: bignum-radix bignum-bits 1 swap shift 1- ; : bignum-radix bignum-bits 1 swap shift 1- ;
: (bignum>seq) ( n -- ) : (bignum>seq) ( n -- )
dup 0 = [ dup zero? [
drop drop
] [ ] [
dup bignum-radix bitand , dup bignum-radix bitand ,

View File

@ -137,7 +137,7 @@ IN: hashtables
: hash-size ( hash -- n ) dup hash-count swap hash-deleted - ; : hash-size ( hash -- n ) dup hash-count swap hash-deleted - ;
: hash-empty? ( hash -- ? ) hash-size 0 = ; : hash-empty? ( hash -- ? ) hash-size zero? ;
: grow-hash ( hash -- ) : grow-hash ( hash -- )
[ dup hash-array swap hash-size 1+ ] keep [ dup hash-array swap hash-size 1+ ] keep

View File

@ -67,7 +67,7 @@ M: general-list tail ( n list -- tail )
swap [ cdr ] times ; swap [ cdr ] times ;
M: general-list nth ( n list -- element ) M: general-list nth ( n list -- element )
over 0 number= [ nip car ] [ >r 1- r> cdr nth ] if ; over zero? [ nip car ] [ >r 1- r> cdr nth ] if ;
M: cons = ( obj cons -- ? ) M: cons = ( obj cons -- ? )
{ {

View File

@ -24,7 +24,7 @@ vectors ;
inline inline
: (interleave) ( n -- array ) : (interleave) ( n -- array )
dup 0 = [ dup zero? [
drop { } drop { }
] [ ] [
t <array> f 0 pick set-nth-unsafe t <array> f 0 pick set-nth-unsafe

View File

@ -61,7 +61,7 @@ C: sorter ( seq start end -- sorter )
dup length 1 <= [ dup length 1 <= [
2nip slice-from 2nip slice-from
] [ ] [
3dup >r >r >r midpoint swap call dup 0 = [ 3dup >r >r >r midpoint swap call dup zero? [
r> r> 3drop r> dup slice-from swap slice-to + 2 /i r> r> 3drop r> dup slice-from swap slice-to + 2 /i
] [ ] [
r> swap r> swap r> partition (binsearch) r> swap r> swap r> partition (binsearch)

View File

@ -15,7 +15,7 @@ sequences-internals strings vectors words ;
M: object like drop ; M: object like drop ;
M: object empty? ( seq -- ? ) length 0 = ; M: object empty? ( seq -- ? ) length zero? ;
: (>list) ( n i seq -- list ) : (>list) ( n i seq -- list )
pick pick <= [ pick pick <= [

View File

@ -106,7 +106,7 @@ GENERIC: trim-dead* ( tail vop -- )
M: tuple trim-dead* ( tail vop -- ) dup forget-vregs , drop ; M: tuple trim-dead* ( tail vop -- ) dup forget-vregs , drop ;
: simplify-inc ( vop -- ) dup 0 vop-in 0 = not ?, ; : simplify-inc ( vop -- ) dup 0 vop-in zero? not ?, ;
M: %inc-d trim-dead* ( tail vop -- ) simplify-inc drop ; M: %inc-d trim-dead* ( tail vop -- ) simplify-inc drop ;

View File

@ -215,7 +215,7 @@ namespaces sequences words ;
] if ; ] if ;
: fast-shift ( n -- ) : fast-shift ( n -- )
dup 0 = [ dup zero? [
-1 %inc-d , -1 %inc-d ,
drop drop
] [ ] [

View File

@ -22,4 +22,4 @@ M: %box generate-node
ESP 1 input reg-size ADD ; ESP 1 input reg-size ADD ;
M: %cleanup generate-node M: %cleanup generate-node
drop 0 input dup 0 = [ drop ] [ ESP swap ADD ] if ; drop 0 input dup zero? [ drop ] [ ESP swap ADD ] if ;

View File

@ -92,7 +92,7 @@ M: displaced register first register ;
M: displaced displacement M: displaced displacement
second dup byte? [ assemble-1 ] [ assemble-4 ] if ; second dup byte? [ assemble-1 ] [ assemble-4 ] if ;
M: displaced canonicalize M: displaced canonicalize
dup first EBP = not over second 0 = and dup first EBP = not over second zero? and
[ first 1array ] when ; [ first 1array ] when ;
M: displaced extended? first extended? ; M: displaced extended? first extended? ;
M: displaced operand-64? first register-64? ; M: displaced operand-64? first register-64? ;

View File

@ -10,7 +10,8 @@ IN: freetype
SYMBOL: freetype SYMBOL: freetype
SYMBOL: open-fonts SYMBOL: open-fonts
: freetype-error ( n -- ) 0 = [ "FreeType error" throw ] unless ; : freetype-error ( n -- )
zero? [ "FreeType error" throw ] unless ;
: init-freetype ( -- ) : init-freetype ( -- )
global [ global [

View File

@ -52,7 +52,7 @@ C: buffer ( size -- buffer )
: buffer-capacity ( buffer -- int ) : buffer-capacity ( buffer -- int )
dup buffer-size swap buffer-fill - ; dup buffer-size swap buffer-fill - ;
: buffer-empty? ( buffer -- ? ) buffer-fill 0 = ; : buffer-empty? ( buffer -- ? ) buffer-fill zero? ;
: buffer-extend ( length buffer -- ) : buffer-extend ( length buffer -- )
2dup buffer-ptr swap realloc check-ptr 2dup buffer-ptr swap realloc check-ptr

View File

@ -4,7 +4,7 @@ IN: math-internals
USING: errors generic kernel kernel-internals math ; USING: errors generic kernel kernel-internals math ;
: (rect>) ( xr xi -- x ) : (rect>) ( xr xi -- x )
dup 0 number= [ drop ] [ <complex> ] if ; inline dup zero? [ drop ] [ <complex> ] if ; inline
IN: math IN: math

View File

@ -1,5 +1,5 @@
! Copyright (C) 2004, 2005 Slava Pestov. ! Copyright (C) 2004, 2006 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: math IN: math
USING: generic kernel math-internals ; USING: generic kernel math-internals ;
@ -11,7 +11,14 @@ M: real absq sq ;
M: real hashcode ( n -- n ) >fixnum ; M: real hashcode ( n -- n ) >fixnum ;
M: real <=> - ; M: real <=> - ;
M: float number= [ double>bits ] 2apply = ; : fp-nan? ( float -- ? )
double>bits -51 shift BIN: 111111111111 [ bitand ] keep = ;
M: float zero?
double>bits HEX: 8000000000000000 [ bitor ] keep number= ;
M: float number= [ double>bits ] 2apply number= ;
M: float < float< ; M: float < float< ;
M: float <= float<= ; M: float <= float<= ;
M: float > float> ; M: float > float> ;

View File

@ -11,7 +11,7 @@ UNION: integer fixnum bignum ;
: odd? ( n -- ? ) 1 bitand 1 = ; : odd? ( n -- ? ) 1 bitand 1 = ;
: (gcd) ( b a y x -- a d ) : (gcd) ( b a y x -- a d )
dup 0 number= [ dup zero? [
drop nip drop nip
] [ ] [
tuck /mod >r pick * swap >r swapd - r> r> (gcd) tuck /mod >r pick * swap >r swapd - r> r> (gcd)
@ -36,7 +36,7 @@ IN: math-internals
: division-by-zero ( x y -- ) "Division by zero" throw ; : division-by-zero ( x y -- ) "Division by zero" throw ;
M: integer / ( x y -- x/y ) M: integer / ( x y -- x/y )
dup 0 number= [ dup zero? [
division-by-zero division-by-zero
] [ ] [
dup 0 < [ [ neg ] 2apply ] when dup 0 < [ [ neg ] 2apply ] when
@ -69,6 +69,8 @@ M: fixnum shift fixnum-shift ;
M: fixnum bitnot fixnum-bitnot ; M: fixnum bitnot fixnum-bitnot ;
M: fixnum zero? 0 eq? ;
M: bignum number= bignum= ; M: bignum number= bignum= ;
M: bignum < bignum< ; M: bignum < bignum< ;
M: bignum <= bignum<= ; M: bignum <= bignum<= ;
@ -93,3 +95,5 @@ M: bignum bitxor bignum-bitxor ;
M: bignum shift bignum-shift ; M: bignum shift bignum-shift ;
M: bignum bitnot bignum-bitnot ; M: bignum bitnot bignum-bitnot ;
M: bignum zero? 0 >bignum bignum= ;

View File

@ -33,6 +33,9 @@ GENERIC: 1- ( x -- x-1 ) foldable
GENERIC: abs ( z -- |z| ) foldable GENERIC: abs ( z -- |z| ) foldable
GENERIC: absq ( n -- |n|^2 ) foldable GENERIC: absq ( n -- |n|^2 ) foldable
GENERIC: zero? ( x -- ? ) foldable
M: object zero? drop f ;
: sq dup * ; inline : sq dup * ; inline
: neg 0 swap - ; inline : neg 0 swap - ; inline
: recip 1 swap / ; inline : recip 1 swap / ; inline

View File

@ -70,14 +70,11 @@ M: ratio >base ( num radix -- string )
: fix-float : fix-float
CHAR: . over member? [ ".0" append ] unless ; CHAR: . over member? [ ".0" append ] unless ;
: nan? ( float -- ? )
double>bits -51 shift BIN: 111111111111 [ bitand ] keep = ;
M: float >base ( num radix -- string ) M: float >base ( num radix -- string )
drop { drop {
{ [ dup 1.0/0.0 = ] [ drop "1.0/0.0" ] } { [ dup 1.0/0.0 = ] [ drop "1.0/0.0" ] }
{ [ dup -1.0/0.0 = ] [ drop "-1.0/0.0" ] } { [ dup -1.0/0.0 = ] [ drop "-1.0/0.0" ] }
{ [ dup nan? ] [ drop "0.0/0.0" ] } { [ dup fp-nan? ] [ drop "0.0/0.0" ] }
{ [ t ] [ float>string fix-float ] } { [ t ] [ float>string fix-float ] }
} cond ; } cond ;

View File

@ -22,18 +22,18 @@ GENERIC: ^ ( z w -- z^w ) foldable
: 0^0 "0^0 is not defined" throw ; : 0^0 "0^0 is not defined" throw ;
: 0^ ( z w -- ) : 0^ ( z w -- )
dup 0 number= [ dup zero? [
2drop 0.0/0.0 2drop 0.0/0.0
] [ ] [
0 < [ drop 1.0/0.0 ] when 0 < [ drop 1.0/0.0 ] when
] if ; ] if ;
M: number ^ ( z w -- z^w ) M: number ^ ( z w -- z^w )
over 0 number= over zero?
[ 0^ ] [ swap >polar 3dup ^theta >r ^mag r> polar> ] if ; [ 0^ ] [ swap >polar 3dup ^theta >r ^mag r> polar> ] if ;
: each-bit ( n quot -- | quot: 0/1 -- ) : each-bit ( n quot -- | quot: 0/1 -- )
over 0 number= pick -1 number= or [ over zero? pick -1 number= or [
2drop 2drop
] [ ] [
2dup >r >r >r 1 bitand r> call r> -1 shift r> each-bit 2dup >r >r >r 1 bitand r> call r> -1 shift r> each-bit
@ -44,7 +44,7 @@ M: number ^ ( z w -- z^w )
inline inline
M: integer ^ ( z w -- z^w ) M: integer ^ ( z w -- z^w )
over 0 number= over zero?
[ 0^ ] [ dup 0 < [ neg ^ recip ] [ (integer^) ] if ] if ; [ 0^ ] [ dup 0 < [ neg ^ recip ] [ (integer^) ] if ] if ;
: power-of-2? ( n -- ? ) : power-of-2? ( n -- ? )

View File

@ -23,4 +23,4 @@ USING: arrays generic kernel sequences ;
: normalize ( vec -- uvec ) dup norm v/n ; : normalize ( vec -- uvec ) dup norm v/n ;
: set-axis ( x y axis -- v ) : set-axis ( x y axis -- v )
dup length [ >r 0 = pick pick ? r> swap nth ] 2map 2nip ; dup length [ >r zero? pick pick ? r> swap nth ] 2map 2nip ;

View File

@ -36,7 +36,7 @@ USING: alien errors kernel math namespaces opengl sdl sequences ;
>r 0 gl-flags r> with-screen ; inline >r 0 gl-flags r> with-screen ; inline
: gl-error ( -- ) : gl-error ( -- )
glGetError dup 0 = [ drop ] [ gluErrorString throw ] if ; glGetError dup zero? [ drop ] [ gluErrorString throw ] if ;
: with-gl-surface ( quot -- ) : with-gl-surface ( quot -- )
#! Execute a quotation, locking the current surface if it #! Execute a quotation, locking the current surface if it

View File

@ -10,7 +10,7 @@ SYMBOL: height
SYMBOL: bpp SYMBOL: bpp
: sdl-error ( 0/-1 -- ) : sdl-error ( 0/-1 -- )
0 = [ SDL_GetError throw ] unless ; zero? [ SDL_GetError throw ] unless ;
: init-keyboard ( -- ) : init-keyboard ( -- )
1 SDL_EnableUNICODE drop 1 SDL_EnableUNICODE drop
@ -32,10 +32,10 @@ SYMBOL: bpp
: must-lock-surface? ( -- ? ) : must-lock-surface? ( -- ? )
#! This is a macro in SDL_video.h. #! This is a macro in SDL_video.h.
surface get dup surface-offset 0 = [ surface get dup surface-offset zero? [
surface-flags surface-flags
SDL_HWSURFACE SDL_ASYNCBLIT bitor SDL_RLEACCEL bitor SDL_HWSURFACE SDL_ASYNCBLIT bitor SDL_RLEACCEL bitor
bitand 0 = not bitand zero? not
] [ ] [
drop t drop t
] if ; ] if ;

View File

@ -100,7 +100,7 @@ C: block ( -- block )
[ section-end fresh-line ] [ drop ] if ; [ section-end fresh-line ] [ drop ] if ;
: section-fits? ( section -- ? ) : section-fits? ( section -- ? )
margin get dup 0 = [ margin get dup zero? [
2drop t 2drop t
] [ ] [
line-limit? pick block? and [ line-limit? pick block? and [

View File

@ -6,10 +6,10 @@ USE: test
! http://inferno.bell-labs.com/cm/cs/who/bwk/interps/pap.html ! http://inferno.bell-labs.com/cm/cs/who/bwk/interps/pap.html
: ack ( m n -- x ) : ack ( m n -- x )
over 0 = [ over zero? [
nip 1+ nip 1+
] [ ] [
dup 0 = [ dup zero? [
drop 1- 1 ack drop 1- 1 ack
] [ ] [
dupd 1- ack >r 1- r> ack dupd 1- ack >r 1- r> ack

View File

@ -2,7 +2,7 @@ IN: temporary
USING: compiler kernel math sequences test ; USING: compiler kernel math sequences test ;
: (fac) ( n! i -- n! ) : (fac) ( n! i -- n! )
dup 0 = [ dup zero? [
drop drop
] [ ] [
[ * ] keep 1- (fac) [ * ] keep 1- (fac)

View File

@ -48,3 +48,10 @@ USE: test
[ -4.0 ] [ -4.0 truncate ] unit-test [ -4.0 ] [ -4.0 truncate ] unit-test
[ -4.0 ] [ -4.0 floor ] unit-test [ -4.0 ] [ -4.0 floor ] unit-test
[ -4.0 ] [ -4.0 ceiling ] unit-test [ -4.0 ] [ -4.0 ceiling ] unit-test
[ t ] [ 0.0/0.0 0.0/0.0 = ] unit-test
[ t ] [ -0.0 -0.0 = ] unit-test
[ f ] [ 0.0 -0.0 = ] unit-test
[ t ] [ 0.0 zero? ] unit-test
[ t ] [ -0.0 zero? ] unit-test

View File

@ -101,3 +101,7 @@ unit-test
[ { 0 1 1 0 } ] [ [ -10 [ , ] each-bit ] { } make ] unit-test [ { 0 1 1 0 } ] [ [ -10 [ , ] each-bit ] { } make ] unit-test
[ -351382792 ] [ -43922849 3 shift ] unit-test [ -351382792 ] [ -43922849 3 shift ] unit-test
[ t ] [ 0 zero? ] unit-test
[ f ] [ 30 zero? ] unit-test
[ t ] [ 0 >bignum zero? ] unit-test

View File

@ -22,7 +22,7 @@ namespaces queues sequences vectors ;
DEFER: next-thread DEFER: next-thread
: do-sleep ( -- continuation ) : do-sleep ( -- continuation )
sleep-queue* dup sleep-time dup 0 = sleep-queue* dup sleep-time dup zero?
[ drop pop cdr ] [ nip io-multiplex next-thread ] if ; [ drop pop cdr ] [ nip io-multiplex next-thread ] if ;
: next-thread ( -- continuation ) : next-thread ( -- continuation )

View File

@ -10,7 +10,7 @@ GENERIC: summary ( object -- string )
0 > "a positive " "a negative " ? ; 0 > "a positive " "a negative " ? ;
M: integer summary M: integer summary
dup sign-string over 2 mod 0 = "even " "odd " ? dup sign-string over 2 mod zero? "even " "odd " ?
rot class word-name append3 ; rot class word-name append3 ;
M: real summary M: real summary
@ -72,7 +72,7 @@ M: word summary ( word -- )
: format-sheet ( sheet -- list ) : format-sheet ( sheet -- list )
#! We use an idiom to notify format-column if it is #! We use an idiom to notify format-column if it is
#! formatting the last column. #! formatting the last column.
dup length reverse-slice [ 0 = format-column ] 2map dup length reverse-slice [ zero? format-column ] 2map
flip [ " " join ] map ; flip [ " " join ] map ;
DEFER: describe DEFER: describe

View File

@ -93,7 +93,7 @@ M: object each-slot ( obj quot -- )
[ >r 2dup r> heap-stat-step ] each-object ; [ >r 2dup r> heap-stat-step ] each-object ;
: heap-stat. ( { instances bytes type } -- ) : heap-stat. ( { instances bytes type } -- )
dup first 0 = [ dup first zero? [
dup third type>class pprint ": " write dup third type>class pprint ": " write
dup second pprint " bytes, " write dup second pprint " bytes, " write
dup first pprint " instances" print dup first pprint " instances" print

View File

@ -128,7 +128,7 @@ M: document-elt prev-elt* 3drop 0 ;
: history-prev ( -- ) : history-prev ( -- )
#! Call this in the line editor scope. #! Call this in the line editor scope.
history-index get dup 0 = [ history-index get dup zero? [
drop drop
] [ ] [
dup history-length = [ commit-history ] when dup history-length = [ commit-history ] when

View File

@ -37,7 +37,7 @@ SYMBOL: write-tasks
: (io-error) err_no strerror throw ; : (io-error) err_no strerror throw ;
: check-null ( n -- ) 0 = [ (io-error) ] when ; : check-null ( n -- ) zero? [ (io-error) ] when ;
: io-error ( n -- ) 0 < [ (io-error) ] when ; : io-error ( n -- ) 0 < [ (io-error) ] when ;
@ -126,7 +126,7 @@ GENERIC: task-container ( task -- vector )
] if ; ] if ;
: timeout? ( port -- ? ) : timeout? ( port -- ? )
port-cutoff dup 0 = not swap millis < and ; port-cutoff dup zero? not swap millis < and ;
: handle-fdset ( fdset tasks -- ) : handle-fdset ( fdset tasks -- )
[ [
@ -169,7 +169,7 @@ GENERIC: task-container ( task -- vector )
: refill ( port -- ? ) : refill ( port -- ? )
#! Return f if there is a recoverable error #! Return f if there is a recoverable error
dup buffer-length 0 = [ dup buffer-length zero? [
dup (refill) dup 0 >= [ dup (refill) dup 0 >= [
swap n>buffer t swap n>buffer t
] [ ] [
@ -259,7 +259,7 @@ C: write-task ( port -- task )
[ >r <io-task> r> set-delegate ] keep ; [ >r <io-task> r> set-delegate ] keep ;
M: write-task do-io-task M: write-task do-io-task
io-task-port dup buffer-length 0 = over port-error or [ io-task-port dup buffer-length zero? over port-error or [
0 swap buffer-reset t 0 swap buffer-reset t
] [ ] [
write-step f write-step f

View File

@ -110,7 +110,7 @@ C: io-callback ( -- callback )
pick over r> -rot >r >r GetQueuedCompletionStatus r> r> ; pick over r> -rot >r >r GetQueuedCompletionStatus r> r> ;
: overlapped>callback ( overlapped -- callback ) : overlapped>callback ( overlapped -- callback )
indirect-pointer-value dup 0 = [ indirect-pointer-value dup zero? [
drop f drop f
] [ ] [
<alien> overlapped-ext-user-data get-io-callback <alien> overlapped-ext-user-data get-io-callback

View File

@ -55,12 +55,12 @@ SYMBOL: socket
AF_INET over set-sockaddr-in-family ; AF_INET over set-sockaddr-in-family ;
: bind-socket ( port socket -- ) : bind-socket ( port socket -- )
swap setup-sockaddr "sockaddr-in" c-size wsa-bind 0 = [ swap setup-sockaddr "sockaddr-in" c-size wsa-bind zero? [
handle-socket-error handle-socket-error
] unless ; ] unless ;
: listen-socket ( socket -- ) : listen-socket ( socket -- )
20 wsa-listen 0 = [ handle-socket-error ] unless ; 20 wsa-listen zero? [ handle-socket-error ] unless ;
: sockaddr> ( sockaddr -- port host ) : sockaddr> ( sockaddr -- port host )
dup sockaddr-in-port ntohs swap sockaddr-in-addr inet-ntoa ; dup sockaddr-in-port ntohs swap sockaddr-in-addr inet-ntoa ;

View File

@ -72,7 +72,7 @@ SYMBOL: cutoff
out-buffer get buffer-length 0 > [ flush-output ] when ; out-buffer get buffer-length 0 > [ flush-output ] when ;
M: integer do-write ( int -- ) M: integer do-write ( int -- )
out-buffer get [ buffer-capacity 0 = [ flush-output ] when ] keep out-buffer get [ buffer-capacity zero? [ flush-output ] when ] keep
>r ch>string r> >buffer ; >r ch>string r> >buffer ;
M: string do-write ( str -- ) M: string do-write ( str -- )
@ -96,7 +96,7 @@ M: string do-write ( str -- )
dup in-buffer get n>buffer update-file-pointer ; dup in-buffer get n>buffer update-file-pointer ;
: consume-input ( count -- str ) : consume-input ( count -- str )
in-buffer get buffer-length 0 = [ fill-input ] when in-buffer get buffer-length zero? [ fill-input ] when
in-buffer get buffer-size min in-buffer get buffer-size min
dup in-buffer get buffer-first-n dup in-buffer get buffer-first-n
swap in-buffer get buffer-consume ; swap in-buffer get buffer-consume ;
@ -105,11 +105,11 @@ M: string do-write ( str -- )
dup length 0 > [ >string ] [ drop f ] if ; dup length 0 > [ >string ] [ drop f ] if ;
: do-read-count ( sbuf count -- str ) : do-read-count ( sbuf count -- str )
dup 0 = [ dup zero? [
drop >string drop >string
] [ ] [
dup consume-input dup consume-input
dup length dup 0 = [ dup length dup zero? [
3drop >string-or-f 3drop >string-or-f
] [ ] [
>r swap r> - >r swap [ swap nappend ] keep r> do-read-count >r swap r> - >r swap [ swap nappend ] keep r> do-read-count
@ -130,7 +130,7 @@ M: win32-stream stream-read ( count stream -- str )
M: win32-stream stream-read1 ( stream -- str ) M: win32-stream stream-read1 ( stream -- str )
win32-stream-this [ win32-stream-this [
1 consume-input dup length 0 = [ drop f ] when first 1 consume-input dup length zero? [ drop f ] when first
] bind ; ] bind ;
M: win32-stream stream-readln ( stream -- str ) M: win32-stream stream-readln ( stream -- str )