cmp: fix & and | logic

It simply didn't work before, except for =.
This commit is contained in:
Virgil Dupras 2020-04-05 17:36:07 -04:00
parent 74a32db5cc
commit fca0e79da3

View File

@ -6,25 +6,33 @@
( n1 f -- f ) ( n1 f -- f )
: <>} SWAP DROP ; : <>} SWAP DROP ;
( n1 f n2 -- n1 cmp )
: |CMP : _|&
SWAP IF DROP 1 EXIT THEN ( n1 true ) ( n1 n2 cell )
OVER SWAP ( n1 n1 n2 ) >R >R DUP R> R> ( n1 n1 n2 cell )
CMP @ EXECUTE ( n1 f )
; ;
: &CMP ( n1 f n2 -- n1 f )
SWAP NOT IF DROP 0 EXIT THEN ( n1 false ) : _|
OVER SWAP ( n1 n1 n2 ) CREATE , DOES>
CMP ( n1 f n2 cell )
ROT IF 2DROP 1 EXIT THEN ( n1 true )
_|&
;
: _&
CREATE , DOES>
( n1 f n2 cell )
ROT NOT IF 2DROP 0 EXIT THEN ( n1 true )
_|&
; ;
( All words below have this signature: ( All words below have this signature:
n1 f n2 -- n1 f ) n1 f n2 -- n1 f )
: |= |CMP NOT ; ' = _| |=
: &= &CMP NOT ; ' = _& &=
: |< |CMP -1 = ; ' > _| |>
: &< &CMP -1 = ; ' > _& &>
: |> |CMP 1 = ; ' < _| |<
: &> &CMP 1 = ; ' < _& &<