diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2014-07-17 09:21:27 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2014-07-17 09:21:27 -0700 |
commit | b794da7fe9b79f4e49ca5a5390f3e7f9b3bb7acb (patch) | |
tree | 9a87b40a21a55ca13395116f1b5be80e56d65042 /mu.arc.t | |
parent | 6215fec22513faaf31e01b6feee0aad59cb2560a (diff) | |
download | mu-b794da7fe9b79f4e49ca5a5390f3e7f9b3bb7acb.tar.gz |
28 - support 'continue'
We still haven't verified that the generated code is correct. Also, time to fix that bug in arc's continue.
Diffstat (limited to 'mu.arc.t')
-rw-r--r-- | mu.arc.t | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/mu.arc.t b/mu.arc.t index 43d4dce6..fb57a8bd 100644 --- a/mu.arc.t +++ b/mu.arc.t @@ -281,6 +281,22 @@ (clear) (add-fns + '((main + ((integer 1) <- loadi 2) + ((integer 2) <- loadi 1) + ((integer 2) <- add (integer 2) (integer 2)) + ((boolean 3) <- eq (integer 1) (integer 2)) + (jif (boolean 3) (offset -3)) + ((integer 4) <- loadi 3) + (reply) + ((integer 3) <- loadi 34)))) +(run function*!main) +;? (prn memory*) +(if (~iso memory* (obj 1 2 2 4 3 nil 4 3)) + (prn "F - 'jif' can take a negative offset to make backward jumps")) + +(clear) +(add-fns '((test1 ((type 4) <- otype 0) ((type 5) <- loadi 0) ; type index corresponding to 'integer' @@ -382,4 +398,58 @@ (jif (boolean 4) (offset 1)) ((integer 5) <- loadi 34) (reply))) - (prn "F - convert braces")) + (prn "F - convert-braces replaces breakif with a jif to after the next close curly")) + +(if (~iso (convert-braces '(((integer 1) <- loadi 4) + ((integer 2) <- loadi 2) + ((integer 3) <- add (integer 2) (integer 2)) + { begin + (break) + } + (reply))) + '(((integer 1) <- loadi 4) + ((integer 2) <- loadi 2) + ((integer 3) <- add (integer 2) (integer 2)) + (jmp (offset 0)) + (reply))) + (prn "F - convert-braces works for degenerate blocks")) + +(if (~iso (convert-braces '(((integer 1) <- loadi 4) + ((integer 2) <- loadi 2) + ((integer 3) <- add (integer 2) (integer 2)) + { begin + ((boolean 4) <- neq (integer 1) (integer 3)) + (breakif (boolean 4)) + { begin + ((integer 5) <- loadi 34) + } + } + (reply))) + '(((integer 1) <- loadi 4) + ((integer 2) <- loadi 2) + ((integer 3) <- add (integer 2) (integer 2)) + ((boolean 4) <- neq (integer 1) (integer 3)) + (jif (boolean 4) (offset 1)) + ((integer 5) <- loadi 34) + (reply))) + (prn "F - convert-braces balances curlies")) + +(if (~iso (convert-braces '(((integer 1) <- loadi 4) + ((integer 2) <- loadi 2) + ((integer 3) <- add (integer 2) (integer 2)) + { begin + { begin + ((boolean 4) <- neq (integer 1) (integer 3)) + } + (continueif (boolean 4)) + ((integer 5) <- loadi 34) + } + (reply))) + '(((integer 1) <- loadi 4) + ((integer 2) <- loadi 2) + ((integer 3) <- add (integer 2) (integer 2)) + ((boolean 4) <- neq (integer 1) (integer 3)) + (jif (boolean 4) (offset -2)) + ((integer 5) <- loadi 34) + (reply))) + (prn "F - convert-braces balances curlies")) |