about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-01-05 23:57:19 -0800
committerKartik K. Agaram <vc@akkartik.com>2015-01-05 23:57:19 -0800
commitafadac25a40513f785634e989dff332f5861d65c (patch)
treedfee57c2b942a33a69f32e3556e35ceee0d04d53
parent08878e3b6a5bf6f5856464ddc865dca59cc19b67 (diff)
downloadmu-afadac25a40513f785634e989dff332f5861d65c.tar.gz
505 - simplify tagged-value
I could swear there was an issue earlier where tagged-values had to
contain pointers for some core function. But I can't find it anymore.
Ok, assume we can store primitives in it and pointers only for
aggregates (and-records and arrays).
-rw-r--r--channel.mu9
-rw-r--r--mu.arc2
-rw-r--r--mu.arc.t63
3 files changed, 32 insertions, 42 deletions
diff --git a/channel.mu b/channel.mu
index 854ab858..9c5ca0f2 100644
--- a/channel.mu
+++ b/channel.mu
@@ -13,9 +13,8 @@
     (print-primitive (("\n" literal)))
     ; 'box' n into a dynamically typed 'tagged value' because that's what
     ; channels take
-    (n2:integer-address <- new integer:literal)
-    (n2:integer-address/deref <- copy n:integer)
-    (n3:tagged-value-address <- init-tagged-value integer-address:literal n2:integer-address)
+    (n2:integer <- copy n:integer)
+    (n3:tagged-value-address <- init-tagged-value integer:literal n2:integer)
     (chan:channel-address/deref <- write chan:channel-address n3:tagged-value-address/deref)
     (n:integer <- add n:integer 1:literal)
     (loop)
@@ -30,10 +29,10 @@
     ; read a tagged value from the channel
     (x:tagged-value chan:channel-address/deref <- read chan:channel-address)
     ; unbox the tagged value into an integer
-    (n2:integer-address <- maybe-coerce x:tagged-value integer-address:literal)
+    (n2:integer <- maybe-coerce x:tagged-value integer:literal)
     ; other threads might get between these prints
     (print-primitive (("consume: " literal)))
-    (print-primitive n2:integer-address/deref)
+    (print-primitive n2:integer)
     (print-primitive (("\n" literal)))
     (loop)
   }
diff --git a/mu.arc b/mu.arc
index a99dd8cb..e96a500d 100644
--- a/mu.arc
+++ b/mu.arc
@@ -1410,6 +1410,8 @@
   (result:tagged-value-address <- get-address base:list-address/deref car:offset)
   (reply result:tagged-value-address))
 
+; create a list out of a list of args
+; only integers for now
 (init-fn init-list
   (default-space:space-address <- new space:literal 30:literal)
   ; new-list = curr = new list
diff --git a/mu.arc.t b/mu.arc.t
index 9d588c87..9f979535 100644
--- a/mu.arc.t
+++ b/mu.arc.t
@@ -2764,9 +2764,8 @@
 (add-code
   '((function main [
       (1:channel-address <- init-channel 3:literal)
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       (5:integer <- get 1:channel-address/deref first-full:offset)
       (6:integer <- get 1:channel-address/deref first-free:offset)
@@ -2790,12 +2789,11 @@
 (add-code
   '((function main [
       (1:channel-address <- init-channel 3:literal)
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       (5:tagged-value 1:channel-address/deref <- read 1:channel-address)
-      (7:integer-address <- maybe-coerce 5:tagged-value integer-address:literal)
+      (7:integer <- maybe-coerce 5:tagged-value integer:literal)
       (8:integer <- get 1:channel-address/deref first-full:offset)
       (9:integer <- get 1:channel-address/deref first-free:offset)
      ])))
@@ -2803,7 +2801,7 @@
 ;? (= dump-trace* (obj blacklist '("sz" "m" "setm" "addr" "array-len" "cvt0" "cvt1")))
 (run 'main)
 ;? (prn int-canon.memory*)
-(if (~is memory*.7 memory*.2)
+(if (~is memory*.7 34)
   (prn "F - 'read' returns written value"))
 (if (or (~is 1 memory*.8)
         (~is 1 memory*.9))
@@ -2816,9 +2814,8 @@
       ; channel with 1 slot
       (1:channel-address <- init-channel 1:literal)
       ; write a value
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       ; first-free will now be 1
       (5:integer <- get 1:channel-address/deref first-free:offset)
@@ -2843,9 +2840,8 @@
       ; channel with 1 slot
       (1:channel-address <- init-channel 1:literal)
       ; write a value
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       ; read one value
       (_ 1:channel-address/deref <- read 1:channel-address)
@@ -2885,9 +2881,8 @@
 (add-code
   '((function main [
       (1:channel-address <- init-channel 3:literal)
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       (5:boolean <- empty? 1:channel-address/deref)
       (6:boolean <- full? 1:channel-address/deref)
@@ -2904,9 +2899,8 @@
 (add-code
   '((function main [
       (1:channel-address <- init-channel 1:literal)
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       (5:boolean <- empty? 1:channel-address/deref)
       (6:boolean <- full? 1:channel-address/deref)
@@ -2923,9 +2917,8 @@
 (add-code
   '((function main [
       (1:channel-address <- init-channel 3:literal)
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       (_ 1:channel-address/deref <- read 1:channel-address)
@@ -2944,9 +2937,8 @@
 (add-code
   '((function main [
       (1:channel-address <- init-channel 3:literal)
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       (_ 1:channel-address/deref <- read 1:channel-address)
       (5:boolean <- empty? 1:channel-address/deref)
@@ -2990,9 +2982,8 @@
 (add-code
   '((function main [
       (1:channel-address <- init-channel 1:literal)
-      (2:integer-address <- new integer:literal)
-      (2:integer-address/deref <- copy 34:literal)
-      (3:tagged-value <- save-type 2:integer-address)
+      (2:integer <- copy 34:literal)
+      (3:tagged-value <- save-type 2:integer)
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
       ; channel has capacity 1, but receives a second write
       (1:channel-address/deref <- write 1:channel-address 3:tagged-value)
@@ -3024,10 +3015,9 @@
      ])
     (function producer [
       (default-space:space-address <- new space:literal 30:literal)
-      (n:integer-address <- new integer:literal)
-      (n:integer-address/deref <- copy 24:literal)
+      (n:integer <- copy 24:literal)
       (ochan:channel-address <- next-input)
-      (x:tagged-value <- save-type n:integer-address)
+      (x:tagged-value <- save-type n:integer)
       (ochan:channel-address/deref <- write ochan:channel-address x:tagged-value)
      ])))
 ;? (set dump-trace*)
@@ -3037,7 +3027,7 @@
 ;? (prn memory*)
 (each routine completed-routines*
   (aif rep.routine!error (prn "error - " it)))
-(if (~is 24 (memory* memory*.2))  ; location 1 contains tagged-value *x above
+(if (~is 24 memory*.2)  ; location 1 contains tagged-value x above
   (prn "F - channels are meant to be shared between routines"))
 ;? (quit)
 
@@ -3052,15 +3042,14 @@
      ])
     (function producer [
       (default-space:space-address <- new space:literal 30:literal)
-      (n:integer-address <- new integer:literal)
-      (n:integer-address/deref <- copy 24:literal)
-      (x:tagged-value <- save-type n:integer-address)
+      (n:integer <- copy 24:literal)
+      (x:tagged-value <- save-type n:integer)
       (1:channel-address/space:global/deref <- write 1:channel-address/space:global x:tagged-value)
      ])))
 (run 'consumer)
 (each routine completed-routines*
   (aif rep.routine!error (prn "error - " it)))
-(if (~is 24 (memory* memory*.2))  ; location 1 contains tagged-value *x above
+(if (~is 24 memory*.2)  ; location 1 contains tagged-value x above
   (prn "F - channels are meant to be shared between routines"))
 
 )  ; section 100