diff options
-rw-r--r-- | mu.arc | 19 | ||||
-rw-r--r-- | mu.arc.t | 37 |
2 files changed, 42 insertions, 14 deletions
diff --git a/mu.arc b/mu.arc index d0f83099..d556e30a 100644 --- a/mu.arc +++ b/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)) diff --git a/mu.arc.t b/mu.arc.t index 8150f4a1..4c24d0c5 100644 --- a/mu.arc.t +++ b/mu.arc.t @@ -165,6 +165,17 @@ (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 ((integer 1) <- loadi 8) (jmp (offset 1)) ((integer 2) <- loadi 3) @@ -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")) |