From 455fbac64f101b05f7eaca89b84470569e4df3fd Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Tue, 19 Jan 2016 23:18:03 -0800 Subject: 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. --- sandbox/009-sandbox-trace.mu | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'sandbox/009-sandbox-trace.mu') 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 [ 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 [ } ] -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 [ { 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 } -- cgit 1.4.1-2-gfad0 #n154'>154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179