about summary refs log tree commit diff stats
path: root/sandbox/009-sandbox-trace.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-01-19 23:18:03 -0800
committerKartik K. Agaram <vc@akkartik.com>2016-01-19 23:18:03 -0800
commit455fbac64f101b05f7eaca89b84470569e4df3fd (patch)
tree32cfd5b092ad86086e4d15992bb10fd06a12bf13 /sandbox/009-sandbox-trace.mu
parent7163e18a774781c62f0c0542e4cb9037f6a71d22 (diff)
downloadmu-455fbac64f101b05f7eaca89b84470569e4df3fd.tar.gz
2576 - distinguish allocated addresses from others
This is the one major refinement on the C programming model I'm planning
to introduce in mu. Instead of Rust's menagerie of pointer types and
static checking, I want to introduce just one new type, and use it to
perform ref-counting at runtime.

So far all we're doing is updating new's interface. The actual
ref-counting implementation is next.

One implication: I might sometimes need duplicate implementations for a
recipe with allocated vs vanilla addresses of the same type. So far it
seems I can get away with just always passing in allocated addresses;
the situations when you want to pass an unallocated address to a recipe
should be few and far between.
Diffstat (limited to 'sandbox/009-sandbox-trace.mu')
-rw-r--r--sandbox/009-sandbox-trace.mu44
1 files changed, 22 insertions, 22 deletions
diff --git a/sandbox/009-sandbox-trace.mu b/sandbox/009-sandbox-trace.mu
index 45759b75..5c9c6714 100644
--- a/sandbox/009-sandbox-trace.mu
+++ b/sandbox/009-sandbox-trace.mu
@@ -4,12 +4,12 @@ scenario sandbox-click-on-code-toggles-app-trace [
   trace-until 100/app  # trace too long
   assume-screen 40/width, 10/height
   # run a stash instruction
-  1:address:array:character <- new [stash [abc]]
+  1:address:shared:array:character <- new [stash [abc]]
   assume-console [
     press F4
   ]
-  2:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character
-  event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data
+  2:address:shared:programming-environment-data <- new-programming-environment screen:address:shared:screen, 1:address:shared:array:character
+  event-loop screen:address:shared:screen, console:address:shared:console, 2:address:shared:programming-environment-data
   screen-should-contain [
     .                     run (F4)           .
     .                                        .
@@ -24,9 +24,9 @@ scenario sandbox-click-on-code-toggles-app-trace [
     left-click 4, 21
   ]
   run [
-    event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data
+    event-loop screen:address:shared:screen, console:address:shared:console, 2:address:shared:programming-environment-data
     4:character/cursor-icon <- copy 9251/␣
-    print screen:address:screen, 4:character/cursor-icon
+    print screen:address:shared:screen, 4:character/cursor-icon
   ]
   # trace now printed and cursor shouldn't have budged
   screen-should-contain [
@@ -54,8 +54,8 @@ scenario sandbox-click-on-code-toggles-app-trace [
     left-click 4, 25
   ]
   run [
-    event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data
-    print screen:address:screen, 4:character/cursor-icon
+    event-loop screen:address:shared:screen, console:address:shared:console, 2:address:shared:programming-environment-data
+    print screen:address:shared:screen, 4:character/cursor-icon
   ]
   # trace hidden again
   screen-should-contain [
@@ -73,13 +73,13 @@ scenario sandbox-shows-app-trace-and-result [
   trace-until 100/app  # trace too long
   assume-screen 40/width, 10/height
   # run a stash instruction and some code
-  1:address:array:character <- new [stash [abc]
+  1:address:shared:array:character <- new [stash [abc]
 add 2, 2]
   assume-console [
     press F4
   ]
-  2:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character
-  event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data
+  2:address:shared:programming-environment-data <- new-programming-environment screen:address:shared:screen, 1:address:shared:array:character
+  event-loop screen:address:shared:screen, console:address:shared:console, 2:address:shared:programming-environment-data
   screen-should-contain [
     .                     run (F4)           .
     .                                        .
@@ -96,7 +96,7 @@ add 2, 2]
     left-click 4, 21
   ]
   run [
-    event-loop screen:address:screen, console:address:console, 2:address:programming-environment-data
+    event-loop screen:address:shared:screen, console:address:shared:console, 2:address:shared:programming-environment-data
   ]
   # trace now printed above result
   screen-should-contain [
@@ -114,18 +114,18 @@ add 2, 2]
 ]
 
 container sandbox-data [
-  trace:address:array:character
+  trace:address:shared:array:character
   display-trace?:boolean
 ]
 
 # replaced in a later layer
-recipe! update-sandbox sandbox:address:sandbox-data -> sandbox:address:sandbox-data [
+recipe! update-sandbox sandbox:address:shared:sandbox-data -> sandbox:address:shared:sandbox-data [
   local-scope
   load-ingredients
-  data:address:array:character <- get *sandbox, data:offset
-  response:address:address:array:character <- get-address *sandbox, response:offset
-  trace:address:address:array:character <- get-address *sandbox, trace:offset
-  fake-screen:address:address:screen <- get-address *sandbox, screen:offset
+  data:address:shared:array:character <- get *sandbox, data:offset
+  response:address:address:shared:array:character <- get-address *sandbox, response:offset
+  trace:address:address:shared:array:character <- get-address *sandbox, trace:offset
+  fake-screen:address:address:shared:screen <- get-address *sandbox, screen:offset
   *response, _, *fake-screen, *trace <- run-interactive data
 ]
 
@@ -137,14 +137,14 @@ after <global-touch> [
     click-column:number <- get *t, column:offset
     on-sandbox-side?:boolean <- greater-or-equal click-column, sandbox-left-margin
     break-unless on-sandbox-side?
-    first-sandbox:address:sandbox-data <- get *env, sandbox:offset
+    first-sandbox:address:shared:sandbox-data <- get *env, sandbox:offset
     break-unless first-sandbox
     first-sandbox-begins:number <- get *first-sandbox, starting-row-on-screen:offset
     click-row:number <- get *t, row:offset
     below-sandbox-editor?:boolean <- greater-or-equal click-row, first-sandbox-begins
     break-unless below-sandbox-editor?
     # identify the sandbox whose code is being clicked on
-    sandbox:address:sandbox-data <- find-click-in-sandbox-code env, click-row
+    sandbox:address:shared:sandbox-data <- find-click-in-sandbox-code env, click-row
     break-unless sandbox
     # toggle its display-trace? property
     x:address:boolean <- get-address *sandbox, display-trace?:offset
@@ -158,7 +158,7 @@ after <global-touch> [
   }
 ]
 
-recipe find-click-in-sandbox-code env:address:programming-environment-data, click-row:number -> sandbox:address:sandbox-data [
+recipe find-click-in-sandbox-code env:address:shared:programming-environment-data, click-row:number -> sandbox:address:shared:sandbox-data [
   local-scope
   load-ingredients
   # assert click-row >= sandbox.starting-row-on-screen
@@ -168,7 +168,7 @@ recipe find-click-in-sandbox-code env:address:programming-environment-data, clic
   assert clicked-on-sandboxes?, [extract-sandbox called on click to sandbox editor]
   # while click-row < sandbox.next-sandbox.starting-row-on-screen
   {
-    next-sandbox:address:sandbox-data <- get *sandbox, next-sandbox:offset
+    next-sandbox:address:shared:sandbox-data <- get *sandbox, next-sandbox:offset
     break-unless next-sandbox
     next-start:number <- get *next-sandbox, starting-row-on-screen:offset
     found?:boolean <- lesser-than click-row, next-start
@@ -194,7 +194,7 @@ after <render-sandbox-results> [
   {
     display-trace?:boolean <- get *sandbox, display-trace?:offset
     break-unless display-trace?
-    sandbox-trace:address:array:character <- get *sandbox, trace:offset
+    sandbox-trace:address:shared:array:character <- get *sandbox, trace:offset
     break-unless sandbox-trace  # nothing to print; move on
     row, screen <- render screen, sandbox-trace, left, right, 245/grey, row
   }