about summary refs log tree commit diff stats
path: root/edit.mu
diff options
context:
space:
mode:
Diffstat (limited to 'edit.mu')
-rw-r--r--edit.mu61
1 files changed, 46 insertions, 15 deletions
diff --git a/edit.mu b/edit.mu
index 0bbe5ca9..5042313f 100644
--- a/edit.mu
+++ b/edit.mu
@@ -1949,21 +1949,51 @@ recipe run-sandboxes [
   in:address:array:character <- editor-contents recipes:address:editor-data
   recipe-warnings:address:address:array:character <- get-address env:address:programming-environment-data/deref, recipe-warnings:offset
   recipe-warnings:address:address:array:character/deref <- reload in:address:array:character
-  # run contents of right editor (sandbox), turn into a new sandbox-data
-  new-sandbox:address:sandbox-data <- new sandbox-data:type
-  data:address:address:array:character <- get-address new-sandbox:address:sandbox-data/deref, data:offset
-  data:address:address:array:character/deref <- editor-contents current-sandbox:address:editor-data
-  response:address:address:array:character <- get-address new-sandbox:address:sandbox-data/deref, response:offset
-  warnings:address:address:array:character <- get-address new-sandbox:address:sandbox-data/deref, warnings:offset
-  response:address:address:array:character/deref, warnings:address:address:array:character/deref <- run-interactive data:address:address:array:character/deref
-  next:address:address:sandbox-data <- get-address new-sandbox:address:sandbox-data/deref, next-sandbox:offset
-  # push to head of sandbox list
-  dest:address:address:sandbox-data <- get-address env:address:programming-environment-data/deref, sandbox:offset
-  next:address:address:sandbox-data/deref <- copy dest:address:address:sandbox-data/deref
-  dest:address:address:sandbox-data/deref <- copy new-sandbox:address:sandbox-data
-  # clear sandbox editor
-  init:address:address:duplex-list <- get-address current-sandbox:address:editor-data/deref, data:offset
-  init:address:address:duplex-list/deref <- push-duplex 167:literal/§, 0:literal/tail
+  # check contents of right editor (sandbox)
+  {
+    sandbox-contents:address:array:character <- editor-contents current-sandbox:address:editor-data
+    break-unless sandbox-contents:address:array:character
+    # if contents exist, run them and turn them into a new sandbox-data
+    new-sandbox:address:sandbox-data <- new sandbox-data:type
+    data:address:address:array:character <- get-address new-sandbox:address:sandbox-data/deref, data:offset
+    data:address:address:array:character/deref <- copy sandbox-contents:address:array:character
+    # push to head of sandbox list
+    dest:address:address:sandbox-data <- get-address env:address:programming-environment-data/deref, sandbox:offset
+    next:address:address:sandbox-data <- get-address new-sandbox:address:sandbox-data/deref, next-sandbox:offset
+    next:address:address:sandbox-data/deref <- copy dest:address:address:sandbox-data/deref
+    dest:address:address:sandbox-data/deref <- copy new-sandbox:address:sandbox-data
+    # clear sandbox editor
+    init:address:address:duplex-list <- get-address current-sandbox:address:editor-data/deref, data:offset
+    init:address:address:duplex-list/deref <- push-duplex 167:literal/§, 0:literal/tail
+  }
+  # rerun other sandboxes
+  curr:address:sandbox-data <- get env:address:programming-environment-data/deref, sandbox:offset
+  {
+    break-unless curr:address:sandbox-data
+#?     clear-screen 0:literal #? 1
+#?     show-screen 0:literal #? 1
+#?     wait-for-some-interaction #? 1
+    data:address:address:array:character <- get-address curr:address:sandbox-data/deref, data:offset
+#?     print-string 0:literal, data:address:address:array:character/deref #? 1
+#?     show-screen 0:literal #? 1
+#?     wait-for-some-interaction #? 1
+    response:address:address:array:character <- get-address curr:address:sandbox-data/deref, response:offset
+    warnings:address:address:array:character <- get-address curr:address:sandbox-data/deref, warnings:offset
+    response:address:address:array:character/deref, warnings:address:address:array:character/deref <- run-interactive data:address:address:array:character/deref
+#?     show-screen 0:literal #? 1
+#?     wait-for-some-interaction #? 1
+#?     print-string 0:literal, response:address:address:array:character/deref #? 1
+#?     $print response:address:address:array:character/deref #? 1
+#?     show-screen 0:literal #? 1
+#?     wait-for-some-interaction #? 1
+#?     # $ mu test edit.mu run-instruction-and-print-warnings #? 1
+#?     open-console #? 1
+#?     print-string 0:literal, warnings:address:address:array:character/deref #? 1
+#?     wait-for-some-interaction #? 1
+#?     close-console #? 1
+    curr:address:sandbox-data <- get curr:address:sandbox-data/deref, next-sandbox:offset
+    loop
+  }
 ]
 
 scenario run-instruction-and-print-warnings [
@@ -2027,6 +2057,7 @@ recipe editor-contents [
   # skip § sentinel
   assert curr:address:duplex-list, [editor without data is illegal; must have at least a sentinel]
   curr:address:duplex-list <- next-duplex curr:address:duplex-list
+  reply-unless curr:address:duplex-list, 0:literal
   {
     break-unless curr:address:duplex-list
     c:character <- get curr:address:duplex-list/deref, value:offset