11 - enhance the language with types

The types aren't actually used yet. That comes later.
This commit is contained in:
Kartik K. Agaram 2014-07-10 22:08:08 -07:00
parent f9ff24be5a
commit f4bc8c3148
2 changed files with 42 additions and 40 deletions

16
mu.arc
View File

@ -1,7 +1,9 @@
; things that a future assembler will need separate memory for: ; things that a future assembler will need separate memory for:
; code; types; args channel ; code; types; args channel
(def clear () (def clear ()
(= types* (table)) (= types* (obj
integer (obj size 1)
address (obj size 1)))
(= memory* (table)) (= memory* (table))
(= function* (table))) (= function* (table)))
(clear) (clear)
@ -23,14 +25,14 @@
;? (prn op " " oarg) ;? (prn op " " oarg)
(case op (case op
loadi loadi
(= (memory* oarg.0) arg.0) (= (memory* oarg.0.1) arg.0)
add add
(= (memory* oarg.0) (= (memory* oarg.0.1)
(+ (memory* arg.0) (memory* arg.1))) (+ (memory* arg.0.1) (memory* arg.1.1)))
read read
(= (memory* oarg.0) (= (memory* oarg.0.1)
; hardcoded channel for now ; hardcoded channel for now
(memory* pop.fn-args)) (memory* pop.fn-args.1))
reply reply
(= returned (annotate 'result arg)) (= returned (annotate 'result arg))
; else user-defined function ; else user-defined function
@ -38,7 +40,7 @@
;? (prn "== " memory*) ;? (prn "== " memory*)
(each o oarg (each o oarg
;? (prn o) ;? (prn o)
(= memory*.o (memory* pop.results)))) (= (memory* o.1) (memory* pop.results.1))))
))))) )))))
;? (prn "return") ;? (prn "return")
rep.returned) rep.returned)

View File

@ -2,9 +2,9 @@
(clear) (clear)
(add-fns '((test1 (add-fns '((test1
(1 <- loadi 1) ((integer 1) <- loadi 1)
(2 <- loadi 3) ((integer 2) <- loadi 3)
(3 <- add 1 2)))) ((integer 3) <- add (integer 1) (integer 2)))))
(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 - load and add instructions work")) (prn "F - load and add instructions work"))
@ -12,10 +12,10 @@
(clear) (clear)
(add-fns (add-fns
'((add-fn '((add-fn
(3 <- add 1 2)) ((integer 3) <- add (integer 1) (integer 2)))
(main (main
(1 <- loadi 1) ((integer 1) <- loadi 1)
(2 <- loadi 3) ((integer 2) <- loadi 3)
(add-fn)))) (add-fn))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -25,12 +25,12 @@
(clear) (clear)
(add-fns (add-fns
'((add-fn '((add-fn
(3 <- add 1 2) ((integer 3) <- add (integer 1) (integer 2))
(reply) (reply)
(4 <- loadi 34)) ((integer 4) <- loadi 34))
(main (main
(1 <- loadi 1) ((integer 1) <- loadi 1)
(2 <- loadi 3) ((integer 2) <- loadi 3)
(add-fn)))) (add-fn))))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -41,15 +41,15 @@
(clear) (clear)
(add-fns (add-fns
'((add-fn '((add-fn
(4 <- read) ((integer 4) <- read)
(5 <- read) ((integer 5) <- read)
(3 <- add 4 5) ((integer 3) <- add (integer 4) (integer 5))
(reply) (reply)
(4 <- loadi 34)) ((integer 4) <- loadi 34))
(main (main
(1 <- loadi 1) ((integer 1) <- loadi 1)
(2 <- loadi 3) ((integer 2) <- loadi 3)
(add-fn 1 2) (add-fn (integer 1) (integer 2))
))) )))
(run function*!main) (run function*!main)
;? (prn memory*) ;? (prn memory*)
@ -61,15 +61,15 @@
(clear) (clear)
(add-fns (add-fns
'((add-fn '((add-fn
(4 <- read) ((integer 4) <- read)
(5 <- read) ((integer 5) <- read)
(6 <- add 4 5) ((integer 6) <- add (integer 4) (integer 5))
(reply 6) (reply (integer 6))
(4 <- loadi 34)) ((integer 4) <- loadi 34))
(main (main
(1 <- loadi 1) ((integer 1) <- loadi 1)
(2 <- loadi 3) ((integer 2) <- loadi 3)
(3 <- add-fn 1 2)))) ((integer 3) <- add-fn (integer 1) (integer 2)))))
(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
@ -80,15 +80,15 @@
(clear) (clear)
(add-fns (add-fns
'((add-fn '((add-fn
(4 <- read) ((integer 4) <- read)
(5 <- read) ((integer 5) <- read)
(6 <- add 4 5) ((integer 6) <- add (integer 4) (integer 5))
(reply 6 5) (reply (integer 6) (integer 5))
(4 <- loadi 34)) ((integer 4) <- loadi 34))
(main (main
(1 <- loadi 1) ((integer 1) <- loadi 1)
(2 <- loadi 3) ((integer 2) <- loadi 3)
(3 7 <- add-fn 1 2)))) ((integer 3) (integer 7) <- add-fn (integer 1) (integer 2)))))
(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