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

View File

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