about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--mu.arc17
-rw-r--r--mu.arc.t16
2 files changed, 16 insertions, 17 deletions
diff --git a/mu.arc b/mu.arc
index c01bcdde..2ade5175 100644
--- a/mu.arc
+++ b/mu.arc
@@ -2,18 +2,17 @@
 ;   code; types; args channel
 (def clear ()
   (= types* (obj
-              integer (obj size 1)
-              type (obj size 1)
-              location (obj size 1)
-              address (obj size 1)
-              boolean (obj size 1)))
+              type (obj size 1  record nil array nil address nil)
+              location (obj size 1  record nil array nil address nil)
+              integer (obj size 1  record nil array nil address nil)
+              boolean (obj size 1  record nil array nil address nil)
+              integer-array (obj array t  elem 'integer)  ; array of ints, size in front
+              integer-address (obj size 1 address t  elem 'integer)  ; pointer to int
+              ))
   (= memory* (table))
   (= function* (table)))
 (clear)
 
-; just a convenience until we get an assembler
-(= type* (obj integer 0 type 1 location 2 address 3 boolean 4))
-
 (def add-fns (fns)
   (each (name . body) fns
     (= function*.name body)))
@@ -90,7 +89,7 @@
                      (memory* fn-args.idx.1)))
               otype
                 (= (memory* oarg.0.1)
-                   (type* (otypes arg.0)))
+                   (otypes arg.0))
               jmp
                 (do (= pc (+ pc arg.0.1))  ; relies on continue still incrementing (bug)
 ;?                     (prn "jumping to " pc)
diff --git a/mu.arc.t b/mu.arc.t
index a347ac9f..4dd85a7c 100644
--- a/mu.arc.t
+++ b/mu.arc.t
@@ -299,7 +299,7 @@
 (add-fns
   '((test1
       ((type 4) <- otype 0)
-      ((type 5) <- loadi 0)  ; type index corresponding to 'integer'
+      ((type 5) <- loadi integer)
       ((boolean 6) <- neq (type 4) (type 5))
       (jif (boolean 6) (offset 3))
       ((integer 7) <- arg)
@@ -314,21 +314,21 @@
 ;? (prn memory*)
 (if (~iso memory* (obj 1 1  2 3                     3 4
                          ; add-fn's temporaries
-                         4 0  5 0  6 nil  7 1  8 3  9 4))
+                         4 'integer  5 'integer  6 nil  7 1  8 3  9 4))
   (prn "F - an example function that checks that its args are integers"))
 
 (clear)
 (add-fns
   '((add-fn
       ((type 4) <- otype 0)
-      ((type 5) <- loadi 0)  ; type index corresponding to 'integer'
+      ((type 5) <- loadi integer)
       ((boolean 6) <- neq (type 4) (type 5))
       (jif (boolean 6) (offset 4))
       ((integer 7) <- arg)
       ((integer 8) <- arg)
       ((integer 9) <- add (integer 7) (integer 8))
       (reply (integer 9))
-      ((type 5) <- loadi 4)  ; second clause: is otype 0 a boolean?
+      ((type 5) <- loadi boolean)
       ((boolean 6) <- neq (type 4) (type 5))
       (jif (boolean 6) (offset 6))
       ((boolean 7) <- arg)
@@ -344,21 +344,21 @@
 (if (~iso memory* (obj ; first call to add-fn
                        1 t  2 t                     3 t
                          ; add-fn's temporaries
-                         4 4  5 4  6 nil  7 t  8 t  9 t))
+                         4 'boolean  5 'boolean  6 nil  7 t  8 t  9 t))
   (prn "F - an example function that can do different things (dispatch) based on the type of its args or oargs"))
 
 (clear)
 (add-fns
   '((add-fn
       ((type 4) <- otype 0)
-      ((type 5) <- loadi 0)  ; type index corresponding to 'integer'
+      ((type 5) <- loadi integer)
       ((boolean 6) <- neq (type 4) (type 5))
       (jif (boolean 6) (offset 4))
       ((integer 7) <- arg)
       ((integer 8) <- arg)
       ((integer 9) <- add (integer 7) (integer 8))
       (reply (integer 9))
-      ((type 5) <- loadi 4)  ; second clause: is otype 0 a boolean?
+      ((type 5) <- loadi boolean)
       ((boolean 6) <- neq (type 4) (type 5))
       (jif (boolean 6) (offset 6))
       ((boolean 7) <- arg)
@@ -379,7 +379,7 @@
                        ; second call to add-fn
                        10 3  11 4                   12 7
                          ; temporaries for most recent call to add-fn
-                         4 0  5 0  6 nil  7 3  8 4  9 7))
+                         4 'integer  5 'integer  6 nil  7 3  8 4  9 7))
   (prn "F - different calls can exercise different clauses of the same function"))
 
 (if (~iso (convert-braces '(((integer 1) <- loadi 4)