: spill@ ( n -- op ) spill-offset special-offset stack@ ;
: decr-stack-reg ( n -- )
- dup 0 = [ drop ] [ stack-reg swap SUB ] if ;
+ [ stack-reg swap SUB ] unless-zero ;
: incr-stack-reg ( n -- )
- dup 0 = [ drop ] [ stack-reg swap ADD ] if ;
+ [ stack-reg swap ADD ] unless-zero ;
: align-stack ( n -- n' ) 16 align ;
M: x86 immediate-store? immediate-comparand? ;
-M: x86 %load-immediate dup 0 = [ drop dup XOR ] [ MOV ] if ;
+M: x86 %load-immediate [ dup XOR ] [ MOV ] if-zero ;
M: x86 %load-reference
[ swap 0 MOV rc-absolute-cell rel-literal ]
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.c-types alien.data alien.strings
-combinators continuations destructors fry io io.backend
+assocs combinators continuations destructors fry io io.backend
io.directories io.encodings.binary io.files.info.unix
io.encodings.utf8 io.files io.pathnames io.files.types kernel
math.bitwise sequences system unix unix.stat vocabs.loader
M: unix copy-file ( from to -- )
[ normalize-path ] bi@
- [ call-next-method ]
+ [ call-next-method ]
[ [ file-permissions ] dip swap set-file-permissions ] 2bi ;
: with-unix-directory ( path quot -- )
void* deref [ drop f ] unless ;
: dirent-type>file-type ( ch -- type )
- {
- { DT_BLK [ +block-device+ ] }
- { DT_CHR [ +character-device+ ] }
- { DT_DIR [ +directory+ ] }
- { DT_LNK [ +symbolic-link+ ] }
- { DT_SOCK [ +socket+ ] }
- { DT_FIFO [ +fifo+ ] }
- { DT_REG [ +regular-file+ ] }
- { DT_WHT [ +whiteout+ ] }
- [ drop +unknown+ ]
- } case ;
+ H{
+ { $ DT_BLK +block-device+ }
+ { $ DT_CHR +character-device+ }
+ { $ DT_DIR +directory+ }
+ { $ DT_LNK +symbolic-link+ }
+ { $ DT_SOCK +socket+ }
+ { $ DT_FIFO +fifo+ }
+ { $ DT_REG +regular-file+ }
+ { $ DT_WHT +whiteout+ }
+ } at* [ drop +unknown+ ] unless ;
M: unix >directory-entry ( byte-array -- directory-entry )
{
] [ process>> . ] bi ;
: wait-for-success ( process -- )
- dup wait-for-process 0 =
- [ drop ] [ process-failed ] if ;
+ dup wait-for-process [ drop ] [ process-failed ] if-zero ;
: try-process ( desc -- )
run-process wait-for-success ;
1 - 8 * 0 swap 8 <range> ; inline
: reassemble-bytes ( range -- quot )
- [ dup 0 = [ drop [ ] ] [ '[ _ shift ] ] if ] map
+ [ [ [ ] ] [ '[ _ shift ] ] if-zero ] map
'[ [ _ spread ] [ bitor ] reduce-outputs ] ; inline
MACRO: reassemble-be ( n -- quot ) be-range reassemble-bytes ;
f f "twenty" "thirty" "forty" "fifty" "sixty"
"seventy" "eighty" "ninety"
} nth ;
-
+
: scale-numbers ( n -- str ) ! up to 10^99
{
f "thousand" "million" "billion" "trillion" "quadrillion"
: tens-place ( n -- str )
100 mod dup 20 >= [
10 /mod [ tens ] dip
- dup 0 = [ drop ] [ small-numbers "-" glue ] if
+ [ small-numbers "-" glue ] unless-zero
] [
- dup 0 = [ drop "" ] [ small-numbers ] if
+ [ "" ] [ small-numbers ] if-zero
] if ;
: 3digits>text ( n -- str )