9 - shuffle operand type tag to after operand value

This organization should permit multiple metadata tags beyond just type.
Starting to feel some pain from code not being DRY.
Issues that took debugging: a poor search-and-replace, and shuffling offset in convert-braces.
This commit is contained in:
Kartik K. Agaram 2014-07-31 01:47:32 -07:00
parent c41a0c2739
commit b90a10d265
2 changed files with 209 additions and 209 deletions

20
mu.arc
View File

@ -18,7 +18,7 @@
(= function*.name body))) (= function*.name body)))
(mac m (loc) (mac m (loc)
`(memory* (,loc 1))) `(memory* (,loc 0)))
(def run (instrs (o fn-args) (o fn-oargs)) (def run (instrs (o fn-args) (o fn-oargs))
(ret result nil (ret result nil
@ -38,7 +38,7 @@
literal literal
(= (m oarg.0) arg.0) (= (m oarg.0) arg.0)
add add
;? (do (prn "add " arg.0.1 arg.1.1) ;? (do (prn "add " (m arg.0) (m arg.1))
(= (m oarg.0) (= (m oarg.0)
(+ (m arg.0) (m arg.1))) (+ (m arg.0) (m arg.1)))
;? (prn "add2")) ;? (prn "add2"))
@ -92,15 +92,15 @@
(m fn-args.idx))) (m fn-args.idx)))
otype otype
(= (m oarg.0) (= (m oarg.0)
((fn-oargs arg.0) 0)) ((fn-oargs arg.0) 1))
jmp jmp
(do (= pc (+ pc arg.0.1)) ; relies on continue still incrementing (bug) (do (= pc (+ pc arg.0.0)) ; relies on continue still incrementing (bug)
;? (prn "jumping to " pc) ;? (prn "jumping to " pc)
(continue)) (continue))
jif jif
(when (is t (m arg.0)) (when (is t (m arg.0))
;? (prn "jumping to " arg.1.1) (= pc (+ pc arg.1.0)) ; relies on continue still incrementing (bug)
(= pc (+ pc arg.1.1)) ; relies on continue still incrementing (bug) ;? (prn "jumping to " pc)
(continue)) (continue))
copy copy
(= (m oarg.0) (m arg.0)) (= (m oarg.0) (m arg.0))
@ -168,22 +168,22 @@
(do (do
(assert:is oarg nil) (assert:is oarg nil)
(assert:is arg nil) (assert:is arg nil)
(yield `(jmp (offset ,(close-offset pc locs))))) (yield `(jmp (,(close-offset pc locs) offset))))
breakif breakif
(do (do
;? (prn "breakif: " instr) ;? (prn "breakif: " instr)
(assert:is oarg nil) (assert:is oarg nil)
(yield `(jif ,arg.0 (offset ,(close-offset pc locs))))) (yield `(jif ,arg.0 (,(close-offset pc locs) offset))))
continue continue
(do (do
(assert:is oarg nil) (assert:is oarg nil)
(assert:is arg nil) (assert:is arg nil)
(yield `(jmp (offset ,(- stack.0 pc))))) (yield `(jmp (,(- stack.0 pc) offset))))
continueif continueif
(do (do
;? (prn "continueif: " instr) ;? (prn "continueif: " instr)
(assert:is oarg nil) (assert:is oarg nil)
(yield `(jif ,arg.0 (offset ,(- stack.0 pc))))) (yield `(jif ,arg.0 (,(- stack.0 pc) offset))))
;else ;else
(yield instr)))) (yield instr))))
(++ pc))))))) (++ pc)))))))

398
mu.arc.t
View File

@ -2,16 +2,16 @@
(clear) (clear)
(add-fns '((test1 (add-fns '((test1
((integer 1) <- literal 1)))) ((1 integer) <- literal 1))))
(run function*!test1) (run function*!test1)
(if (~iso memory* (obj 1 1)) (if (~iso memory* (obj 1 1))
(prn "F - 'literal' writes a literal value (its lone 'arg' after the instruction name) to a location in memory (an address) specified by its lone 'oarg' or output arg before the arrow")) (prn "F - 'literal' writes a literal value (its lone 'arg' after the instruction name) to a location in memory (an address) specified by its lone 'oarg' or output arg before the arrow"))
(clear) (clear)
(add-fns '((test1 (add-fns '((test1
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) <- add (integer 1) (integer 2))))) ((3 integer) <- add (1 integer) (2 integer)))))
(run function*!test1) (run function*!test1)
(if (~iso memory* (obj 1 1 2 3 3 4)) (if (~iso memory* (obj 1 1 2 3 3 4))
(prn "F - 'add' operates on two addresses")) (prn "F - 'add' operates on two addresses"))
@ -19,10 +19,10 @@
(clear) (clear)
(add-fns (add-fns
'((test1 '((test1
((integer 3) <- add (integer 1) (integer 2))) ((3 integer) <- add (1 integer) (2 integer)))
(main (main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
(test1)))) (test1))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -32,12 +32,12 @@
(clear) (clear)
(add-fns (add-fns
'((test1 '((test1
((integer 3) <- add (integer 1) (integer 2)) ((3 integer) <- add (1 integer) (2 integer))
(reply) (reply)
((integer 4) <- literal 34)) ((4 integer) <- literal 34))
(main (main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
(test1)))) (test1))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -48,15 +48,15 @@
(clear) (clear)
(add-fns (add-fns
'((test1 '((test1
((integer 4) <- arg) ((4 integer) <- arg)
((integer 5) <- arg) ((5 integer) <- arg)
((integer 3) <- add (integer 4) (integer 5)) ((3 integer) <- add (4 integer) (5 integer))
(reply) (reply)
((integer 4) <- literal 34)) ((4 integer) <- literal 34))
(main (main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
(test1 (integer 1) (integer 2)) (test1 (1 integer) (2 integer))
))) )))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -69,15 +69,15 @@
(clear) (clear)
(add-fns (add-fns
'((test1 '((test1
((integer 5) <- arg 1) ((5 integer) <- arg 1)
((integer 4) <- arg 0) ((4 integer) <- arg 0)
((integer 3) <- add (integer 4) (integer 5)) ((3 integer) <- add (4 integer) (5 integer))
(reply) (reply)
((integer 4) <- literal 34)) ((4 integer) <- literal 34))
(main (main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
(test1 (integer 1) (integer 2)) (test1 (1 integer) (2 integer))
))) )))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -90,15 +90,15 @@
(clear) (clear)
(add-fns (add-fns
'((test1 '((test1
((integer 4) <- arg) ((4 integer) <- arg)
((integer 5) <- arg) ((5 integer) <- arg)
((integer 6) <- add (integer 4) (integer 5)) ((6 integer) <- add (4 integer) (5 integer))
(reply (integer 6)) (reply (6 integer))
((integer 4) <- literal 34)) ((4 integer) <- literal 34))
(main (main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) <- test1 (integer 1) (integer 2))))) ((3 integer) <- test1 (1 integer) (2 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 1 2 3 3 4 (if (~iso memory* (obj 1 1 2 3 3 4
@ -109,15 +109,15 @@
(clear) (clear)
(add-fns (add-fns
'((test1 '((test1
((integer 4) <- arg) ((4 integer) <- arg)
((integer 5) <- arg) ((5 integer) <- arg)
((integer 6) <- add (integer 4) (integer 5)) ((6 integer) <- add (4 integer) (5 integer))
(reply (integer 6) (integer 5)) (reply (6 integer) (5 integer))
((integer 4) <- literal 34)) ((4 integer) <- literal 34))
(main (main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) (integer 7) <- test1 (integer 1) (integer 2))))) ((3 integer) (7 integer) <- test1 (1 integer) (2 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 1 2 3 3 4 7 3 (if (~iso memory* (obj 1 1 2 3 3 4 7 3
@ -128,9 +128,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) <- sub (integer 1) (integer 2))))) ((3 integer) <- sub (1 integer) (2 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 1 2 3 3 -2)) (if (~iso memory* (obj 1 1 2 3 3 -2))
@ -139,9 +139,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 2) ((1 integer) <- literal 2)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) <- mul (integer 1) (integer 2))))) ((3 integer) <- mul (1 integer) (2 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 2 2 3 3 6)) (if (~iso memory* (obj 1 2 2 3 3 6))
@ -150,9 +150,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 8) ((1 integer) <- literal 8)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) <- div (integer 1) (integer 2))))) ((3 integer) <- div (1 integer) (2 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 8 2 3 3 (/ real.8 3))) (if (~iso memory* (obj 1 8 2 3 3 (/ real.8 3)))
@ -161,9 +161,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 8) ((1 integer) <- literal 8)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) (integer 4) <- idiv (integer 1) (integer 2))))) ((3 integer) (4 integer) <- idiv (1 integer) (2 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 8 2 3 3 2 4 2)) (if (~iso memory* (obj 1 8 2 3 3 2 4 2))
@ -172,9 +172,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((boolean 1) <- literal t) ((1 boolean) <- literal t)
((boolean 2) <- literal nil) ((2 boolean) <- literal nil)
((boolean 3) <- and (boolean 1) (boolean 2))))) ((3 boolean) <- and (1 boolean) (2 boolean)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 t 2 nil 3 nil)) (if (~iso memory* (obj 1 t 2 nil 3 nil))
@ -183,9 +183,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((boolean 1) <- literal 4) ((1 boolean) <- literal 4)
((boolean 2) <- literal 3) ((2 boolean) <- literal 3)
((boolean 3) <- lt (boolean 1) (boolean 2))))) ((3 boolean) <- lt (1 boolean) (2 boolean)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 4 2 3 3 nil)) (if (~iso memory* (obj 1 4 2 3 3 nil))
@ -194,9 +194,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((boolean 1) <- literal 4) ((1 boolean) <- literal 4)
((boolean 2) <- literal 3) ((2 boolean) <- literal 3)
((boolean 3) <- le (boolean 1) (boolean 2))))) ((3 boolean) <- le (1 boolean) (2 boolean)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 4 2 3 3 nil)) (if (~iso memory* (obj 1 4 2 3 3 nil))
@ -205,9 +205,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((boolean 1) <- literal 4) ((1 boolean) <- literal 4)
((boolean 2) <- literal 4) ((2 boolean) <- literal 4)
((boolean 3) <- le (boolean 1) (boolean 2))))) ((3 boolean) <- le (1 boolean) (2 boolean)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 4 2 4 3 t)) (if (~iso memory* (obj 1 4 2 4 3 t))
@ -216,9 +216,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((boolean 1) <- literal 4) ((1 boolean) <- literal 4)
((boolean 2) <- literal 5) ((2 boolean) <- literal 5)
((boolean 3) <- le (boolean 1) (boolean 2))))) ((3 boolean) <- le (1 boolean) (2 boolean)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 4 2 5 3 t)) (if (~iso memory* (obj 1 4 2 5 3 t))
@ -227,9 +227,9 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 8) ((1 integer) <- literal 8)
(jmp (offset 1)) (jmp (1 offset))
((integer 2) <- literal 3) ((2 integer) <- literal 3)
(reply)))) (reply))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -239,11 +239,11 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 8) ((1 integer) <- literal 8)
(jmp (offset 1)) (jmp (1 offset))
((integer 2) <- literal 3) ((2 integer) <- literal 3)
(reply) (reply)
((integer 3) <- literal 34)))) ((3 integer) <- literal 34))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 8)) (if (~iso memory* (obj 1 8))
@ -252,13 +252,13 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 1) ((2 integer) <- literal 1)
((boolean 3) <- eq (integer 1) (integer 2)) ((3 boolean) <- eq (1 integer) (2 integer))
(jif (boolean 3) (offset 1)) (jif (3 boolean) (1 offset))
((integer 2) <- literal 3) ((2 integer) <- literal 3)
(reply) (reply)
((integer 3) <- literal 34)))) ((3 integer) <- literal 34))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 1 2 1 3 t)) (if (~iso memory* (obj 1 1 2 1 3 t))
@ -267,13 +267,13 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((boolean 3) <- eq (integer 1) (integer 2)) ((3 boolean) <- eq (1 integer) (2 integer))
(jif (boolean 3) (offset 1)) (jif (3 boolean) (1 offset))
((integer 4) <- literal 3) ((4 integer) <- literal 3)
(reply) (reply)
((integer 3) <- literal 34)))) ((3 integer) <- literal 34))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 1 2 2 3 nil 4 3)) (if (~iso memory* (obj 1 1 2 2 3 nil 4 3))
@ -282,14 +282,14 @@
(clear) (clear)
(add-fns (add-fns
'((main '((main
((integer 1) <- literal 2) ((1 integer) <- literal 2)
((integer 2) <- literal 1) ((2 integer) <- literal 1)
((integer 2) <- add (integer 2) (integer 2)) ((2 integer) <- add (2 integer) (2 integer))
((boolean 3) <- eq (integer 1) (integer 2)) ((3 boolean) <- eq (1 integer) (2 integer))
(jif (boolean 3) (offset -3)) (jif (3 boolean) (-3 offset))
((integer 4) <- literal 3) ((4 integer) <- literal 3)
(reply) (reply)
((integer 3) <- literal 34)))) ((3 integer) <- literal 34))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 2 2 4 3 nil 4 3)) (if (~iso memory* (obj 1 2 2 4 3 nil 4 3))
@ -298,18 +298,18 @@
(clear) (clear)
(add-fns (add-fns
'((test1 '((test1
((type 4) <- otype 0) ((4 type) <- otype 0)
((type 5) <- literal integer) ((5 type) <- literal integer)
((boolean 6) <- neq (type 4) (type 5)) ((6 boolean) <- neq (4 type) (5 type))
(jif (boolean 6) (offset 3)) (jif (6 boolean) (3 offset))
((integer 7) <- arg) ((7 integer) <- arg)
((integer 8) <- arg) ((8 integer) <- arg)
((integer 9) <- add (integer 7) (integer 8)) ((9 integer) <- add (7 integer) (8 integer))
(reply (integer 9))) (reply (9 integer)))
(main (main
((integer 1) <- literal 1) ((1 integer) <- literal 1)
((integer 2) <- literal 3) ((2 integer) <- literal 3)
((integer 3) <- test1 (integer 1) (integer 2))))) ((3 integer) <- test1 (1 integer) (2 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj 1 1 2 3 3 4 (if (~iso memory* (obj 1 1 2 3 3 4
@ -320,25 +320,25 @@
(clear) (clear)
(add-fns (add-fns
'((add-fn '((add-fn
((type 4) <- otype 0) ((4 type) <- otype 0)
((type 5) <- literal integer) ((5 type) <- literal integer)
((boolean 6) <- neq (type 4) (type 5)) ((6 boolean) <- neq (4 type) (5 type))
(jif (boolean 6) (offset 4)) (jif (6 boolean) (4 offset))
((integer 7) <- arg) ((7 integer) <- arg)
((integer 8) <- arg) ((8 integer) <- arg)
((integer 9) <- add (integer 7) (integer 8)) ((9 integer) <- add (7 integer) (8 integer))
(reply (integer 9)) (reply (9 integer))
((type 5) <- literal boolean) ((5 type) <- literal boolean)
((boolean 6) <- neq (type 4) (type 5)) ((6 boolean) <- neq (4 type) (5 type))
(jif (boolean 6) (offset 6)) (jif (6 boolean) (6 offset))
((boolean 7) <- arg) ((7 boolean) <- arg)
((boolean 8) <- arg) ((8 boolean) <- arg)
((boolean 9) <- or (boolean 7) (boolean 8)) ((9 boolean) <- or (7 boolean) (8 boolean))
(reply (boolean 9))) (reply (9 boolean)))
(main (main
((boolean 1) <- literal t) ((1 boolean) <- literal t)
((boolean 2) <- literal t) ((2 boolean) <- literal t)
((boolean 3) <- add-fn (boolean 1) (boolean 2))))) ((3 boolean) <- add-fn (1 boolean) (2 boolean)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj ; first call to add-fn (if (~iso memory* (obj ; first call to add-fn
@ -350,28 +350,28 @@
(clear) (clear)
(add-fns (add-fns
'((add-fn '((add-fn
((type 4) <- otype 0) ((4 type) <- otype 0)
((type 5) <- literal integer) ((5 type) <- literal integer)
((boolean 6) <- neq (type 4) (type 5)) ((6 boolean) <- neq (4 type) (5 type))
(jif (boolean 6) (offset 4)) (jif (6 boolean) (4 offset))
((integer 7) <- arg) ((7 integer) <- arg)
((integer 8) <- arg) ((8 integer) <- arg)
((integer 9) <- add (integer 7) (integer 8)) ((9 integer) <- add (7 integer) (8 integer))
(reply (integer 9)) (reply (9 integer))
((type 5) <- literal boolean) ((5 type) <- literal boolean)
((boolean 6) <- neq (type 4) (type 5)) ((6 boolean) <- neq (4 type) (5 type))
(jif (boolean 6) (offset 6)) (jif (6 boolean) (6 offset))
((boolean 7) <- arg) ((7 boolean) <- arg)
((boolean 8) <- arg) ((8 boolean) <- arg)
((boolean 9) <- or (boolean 7) (boolean 8)) ((9 boolean) <- or (7 boolean) (8 boolean))
(reply (boolean 9))) (reply (9 boolean)))
(main (main
((boolean 1) <- literal t) ((1 boolean) <- literal t)
((boolean 2) <- literal t) ((2 boolean) <- literal t)
((boolean 3) <- add-fn (boolean 1) (boolean 2)) ((3 boolean) <- add-fn (1 boolean) (2 boolean))
((integer 10) <- literal 3) ((10 integer) <- literal 3)
((integer 11) <- literal 4) ((11 integer) <- literal 4)
((integer 12) <- add-fn (integer 10) (integer 11))))) ((12 integer) <- add-fn (10 integer) (11 integer)))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
(if (~iso memory* (obj ; first call to add-fn (if (~iso memory* (obj ; first call to add-fn
@ -382,88 +382,88 @@
4 'integer 5 'integer 6 nil 7 3 8 4 9 7)) 4 'integer 5 'integer 6 nil 7 3 8 4 9 7))
(prn "F - different calls can exercise different clauses of the same function")) (prn "F - different calls can exercise different clauses of the same function"))
(if (~iso (convert-braces '(((integer 1) <- literal 4) (if (~iso (convert-braces '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
{ begin ; 'begin' is just a hack because racket turns curlies into parens { begin ; 'begin' is just a hack because racket turns curlies into parens
((boolean 4) <- neq (integer 1) (integer 3)) ((4 boolean) <- neq (1 integer) (3 integer))
(breakif (boolean 4)) (breakif (4 boolean))
((integer 5) <- literal 34) ((5 integer) <- literal 34)
} }
(reply))) (reply)))
'(((integer 1) <- literal 4) '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
((boolean 4) <- neq (integer 1) (integer 3)) ((4 boolean) <- neq (1 integer) (3 integer))
(jif (boolean 4) (offset 1)) (jif (4 boolean) (1 offset))
((integer 5) <- literal 34) ((5 integer) <- literal 34)
(reply))) (reply)))
(prn "F - convert-braces replaces breakif with a jif to after the next close curly")) (prn "F - convert-braces replaces breakif with a jif to after the next close curly"))
(if (~iso (convert-braces '(((integer 1) <- literal 4) (if (~iso (convert-braces '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
{ begin { begin
(break) (break)
} }
(reply))) (reply)))
'(((integer 1) <- literal 4) '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
(jmp (offset 0)) (jmp (0 offset))
(reply))) (reply)))
(prn "F - convert-braces works for degenerate blocks")) (prn "F - convert-braces works for degenerate blocks"))
(if (~iso (convert-braces '(((integer 1) <- literal 4) (if (~iso (convert-braces '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
{ begin { begin
((boolean 4) <- neq (integer 1) (integer 3)) ((4 boolean) <- neq (1 integer) (3 integer))
(breakif (boolean 4)) (breakif (4 boolean))
{ begin { begin
((integer 5) <- literal 34) ((5 integer) <- literal 34)
} }
} }
(reply))) (reply)))
'(((integer 1) <- literal 4) '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
((boolean 4) <- neq (integer 1) (integer 3)) ((4 boolean) <- neq (1 integer) (3 integer))
(jif (boolean 4) (offset 1)) (jif (4 boolean) (1 offset))
((integer 5) <- literal 34) ((5 integer) <- literal 34)
(reply))) (reply)))
(prn "F - convert-braces balances curlies when converting break")) (prn "F - convert-braces balances curlies when converting break"))
(if (~iso (convert-braces '(((integer 1) <- literal 4) (if (~iso (convert-braces '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
{ begin { begin
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
{ begin { begin
((boolean 4) <- neq (integer 1) (integer 3)) ((4 boolean) <- neq (1 integer) (3 integer))
} }
(continueif (boolean 4)) (continueif (4 boolean))
((integer 5) <- literal 34) ((5 integer) <- literal 34)
} }
(reply))) (reply)))
'(((integer 1) <- literal 4) '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
((integer 3) <- add (integer 2) (integer 2)) ((3 integer) <- add (2 integer) (2 integer))
((boolean 4) <- neq (integer 1) (integer 3)) ((4 boolean) <- neq (1 integer) (3 integer))
(jif (boolean 4) (offset -3)) (jif (4 boolean) (-3 offset))
((integer 5) <- literal 34) ((5 integer) <- literal 34)
(reply))) (reply)))
(prn "F - convert-braces balances curlies when converting continue")) (prn "F - convert-braces balances curlies when converting continue"))
(clear) (clear)
(add-fns `((main ,@(convert-braces '(((integer 1) <- literal 4) (add-fns `((main ,@(convert-braces '(((1 integer) <- literal 4)
((integer 2) <- literal 1) ((2 integer) <- literal 1)
{ begin { begin
((integer 2) <- add (integer 2) (integer 2)) ((2 integer) <- add (2 integer) (2 integer))
{ begin { begin
((boolean 3) <- neq (integer 1) (integer 2)) ((3 boolean) <- neq (1 integer) (2 integer))
} }
(continueif (boolean 3)) (continueif (3 boolean))
((integer 4) <- literal 34) ((4 integer) <- literal 34)
} }
(reply)))))) (reply))))))
(run function*!main) (run function*!main)
@ -472,15 +472,15 @@
(prn "F - continue correctly loops")) (prn "F - continue correctly loops"))
(clear) (clear)
(add-fns `((main ,@(convert-braces '(((integer 1) <- literal 4) (add-fns `((main ,@(convert-braces '(((1 integer) <- literal 4)
((integer 2) <- literal 2) ((2 integer) <- literal 2)
{ begin { begin
((integer 2) <- add (integer 2) (integer 2)) ((2 integer) <- add (2 integer) (2 integer))
{ begin { begin
((boolean 3) <- neq (integer 1) (integer 2)) ((3 boolean) <- neq (1 integer) (2 integer))
} }
(continueif (boolean 3)) (continueif (3 boolean))
((integer 4) <- literal 34) ((4 integer) <- literal 34)
} }
(reply)))))) (reply))))))
(run function*!main) (run function*!main)