11 - enhance the language with types
The types aren't actually used yet. That comes later.
This commit is contained in:
parent
f9ff24be5a
commit
f4bc8c3148
16
mu.arc
16
mu.arc
|
@ -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)
|
||||
|
|
66
mu.arc.t
66
mu.arc.t
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue