21 - new boolean type

This commit is contained in:
Kartik K. Agaram 2014-07-11 22:50:55 -07:00
parent d17e8291ef
commit a5e757e1ab
2 changed files with 42 additions and 14 deletions

19
mu.arc
View File

@ -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))

View File

@ -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"))