21 - new boolean type
This commit is contained in:
parent
d17e8291ef
commit
a5e757e1ab
19
mu.arc
19
mu.arc
|
@ -4,7 +4,8 @@
|
|||
(= types* (obj
|
||||
integer (obj size 1)
|
||||
location (obj size 1)
|
||||
address (obj size 1)))
|
||||
address (obj size 1)
|
||||
boolean (obj size 1)))
|
||||
(= memory* (table))
|
||||
(= function* (table)))
|
||||
(clear)
|
||||
|
@ -58,6 +59,18 @@
|
|||
(trunc:/ (memory* arg.0.1) (memory* arg.1.1))
|
||||
(memory* oarg.1.1)
|
||||
(mod (memory* arg.0.1) (memory* arg.1.1)))
|
||||
and
|
||||
(= (memory* oarg.0.1)
|
||||
(and (memory* arg.0.1) (memory* arg.1.1)))
|
||||
or
|
||||
(= (memory* oarg.0.1)
|
||||
(and (memory* arg.0.1) (memory* arg.1.1)))
|
||||
not
|
||||
(= (memory* oarg.0.1)
|
||||
(not (memory* arg.0.1)))
|
||||
eq
|
||||
(= (memory* oarg.0.1)
|
||||
(iso (memory* arg.0.1) (memory* arg.1.1)))
|
||||
arg
|
||||
(let idx (if arg
|
||||
arg.0
|
||||
|
@ -72,8 +85,8 @@
|
|||
(do (= pc (+ pc arg.0.1)) ; relies on continue still incrementing (bug)
|
||||
;? (prn "jumping to " pc)
|
||||
(continue))
|
||||
jifz
|
||||
(when (is 0 (memory* arg.0.1))
|
||||
jif
|
||||
(when (is t (memory* arg.0.1))
|
||||
;? (prn "jumping to " arg.1.1)
|
||||
(= pc (+ pc arg.1.1)) ; relies on continue still incrementing (bug)
|
||||
(continue))
|
||||
|
|
37
mu.arc.t
37
mu.arc.t
|
@ -162,6 +162,17 @@
|
|||
(if (~iso memory* (obj 1 8 2 3 3 2 4 2))
|
||||
(prn "F - idiv works"))
|
||||
|
||||
(clear)
|
||||
(add-fns
|
||||
'((main
|
||||
((boolean 1) <- loadi t)
|
||||
((boolean 2) <- loadi nil)
|
||||
((boolean 3) <- and (boolean 1) (boolean 2)))))
|
||||
(run function*!main)
|
||||
;? (prn memory*)
|
||||
(if (~iso memory* (obj 1 t 2 nil 3 nil))
|
||||
(prn "F - and works"))
|
||||
|
||||
(clear)
|
||||
(add-fns
|
||||
'((main
|
||||
|
@ -190,36 +201,40 @@
|
|||
(clear)
|
||||
(add-fns
|
||||
'((main
|
||||
((integer 1) <- loadi 0)
|
||||
(jifz (integer 1) (offset 1))
|
||||
((integer 1) <- loadi 1)
|
||||
((integer 2) <- loadi 1)
|
||||
((boolean 3) <- eq (integer 1) (integer 2))
|
||||
(jif (boolean 3) (offset 1))
|
||||
((integer 2) <- loadi 3)
|
||||
(reply)
|
||||
((integer 3) <- loadi 34))))
|
||||
(run function*!main)
|
||||
;? (prn memory*)
|
||||
(if (~iso memory* (obj 1 0))
|
||||
(prn "F - jifz works"))
|
||||
(if (~iso memory* (obj 1 1 2 1 3 t))
|
||||
(prn "F - jif works"))
|
||||
|
||||
(clear)
|
||||
(add-fns
|
||||
'((main
|
||||
((integer 1) <- loadi 1)
|
||||
(jifz (integer 1) (offset 1))
|
||||
((integer 2) <- loadi 3)
|
||||
((integer 2) <- loadi 2)
|
||||
((boolean 3) <- eq (integer 1) (integer 2))
|
||||
(jif (boolean 3) (offset 1))
|
||||
((integer 4) <- loadi 3)
|
||||
(reply)
|
||||
((integer 3) <- loadi 34))))
|
||||
(run function*!main)
|
||||
;? (prn memory*)
|
||||
(if (~iso memory* (obj 1 1 2 3))
|
||||
(prn "F - jifz works - 2"))
|
||||
(if (~iso memory* (obj 1 1 2 2 3 nil 4 3))
|
||||
(prn "F - jif works - 2"))
|
||||
|
||||
(clear)
|
||||
(add-fns
|
||||
'((add-fn
|
||||
((integer 4) <- otype 0)
|
||||
((integer 5) <- loadi 0) ; type index corresponding to 'integer'
|
||||
((integer 6) <- sub (integer 4) (integer 5))
|
||||
(jifz (integer 6) (offset 1))
|
||||
((boolean 6) <- eq (integer 4) (integer 5))
|
||||
(jif (boolean 6) (offset 1))
|
||||
(reply)
|
||||
((integer 7) <- arg)
|
||||
((integer 8) <- arg)
|
||||
|
@ -233,5 +248,5 @@
|
|||
;? (prn memory*)
|
||||
(if (~iso memory* (obj 1 1 2 3 3 4
|
||||
; add-fn's temporaries
|
||||
4 0 5 0 6 0 7 1 8 3 9 4))
|
||||
4 0 5 0 6 t 7 1 8 3 9 4))
|
||||
(prn "F - user-defined function with clauses"))
|
||||
|
|
Loading…
Reference in New Issue