diff options
-rw-r--r-- | mu.arc | 29 | ||||
-rw-r--r-- | mu.arc.t | 6 |
2 files changed, 19 insertions, 16 deletions
diff --git a/mu.arc b/mu.arc index 87c69eaf..27b5fd9f 100644 --- a/mu.arc +++ b/mu.arc @@ -12,19 +12,22 @@ (each instr instrs (unless returned ;? (prn instr) - (let (oarg1 <- op arg1 arg2) instr -;? (prn op) - (case op - loadi - (= memory*.oarg1 arg1) - add - (= memory*.oarg1 - (+ memory*.arg1 memory*.arg2)) - return - (set returned) - ; else user-defined function - (run function*.op) - )))) + (let delim (or (pos '<- instr) -1) + (with (oarg (cut instr 0 delim) + op (instr (+ delim 1)) + arg (cut instr (+ delim 2))) +;? (prn op) + (case op + loadi + (= (memory* oarg.0) arg.0) + add + (= (memory* oarg.0) + (+ (memory* arg.0) (memory* arg.1))) + return + (set returned) + ; else user-defined function + (run function*.op) + ))))) ;? (prn "return") ) diff --git a/mu.arc.t b/mu.arc.t index ff63ebdc..fd9c0946 100644 --- a/mu.arc.t +++ b/mu.arc.t @@ -16,7 +16,7 @@ (main (1 <- loadi 1) (2 <- loadi 3) - (_ <- add-fn)))) + (add-fn)))) (run function*!main) ;? (prn memory*) (if (~iso memory* (obj 1 1 2 3 3 4)) @@ -26,12 +26,12 @@ (add-fns '((add-fn (3 <- add 1 2) - (_ <- return) + (return) (4 <- loadi 34)) (main (1 <- loadi 1) (2 <- loadi 3) - (_ <- add-fn)))) + (add-fn)))) (run function*!main) ;? (prn memory*) (if (~iso memory* (obj 1 1 2 3 3 4)) |