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:
|
; 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)
|
||||||
|
|
66
mu.arc.t
66
mu.arc.t
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user