about summary refs log tree commit diff stats
path: root/shell/main.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-04-15 19:56:16 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-04-15 19:56:16 -0700
commit04da8ff8b0f3941f98123f821156ff445bfdb153 (patch)
tree2bd1ddfe2443ee75f3f7b55843d948ed7d6efe35 /shell/main.mu
parent613b1d5734cf119494ef5921ec86bd6cf5e3e6ea (diff)
downloadmu-04da8ff8b0f3941f98123f821156ff445bfdb153.tar.gz
add some structure to the serialization format
Diffstat (limited to 'shell/main.mu')
-rw-r--r--shell/main.mu18
1 files changed, 16 insertions, 2 deletions
diff --git a/shell/main.mu b/shell/main.mu
index 831c7f09..47028035 100644
--- a/shell/main.mu
+++ b/shell/main.mu
@@ -50,12 +50,24 @@ fn load-sandbox data-disk: (addr disk), _self: (addr sandbox) {
     break-if-!=
     return
   }
+  # sandbox = assoc(initial-root, 'sandbox)
+  var sandbox-literal-storage: (handle cell)
+  var sandbox-literal-ah/eax: (addr handle cell) <- address sandbox-literal-storage
+  new-symbol sandbox-literal-ah, "sandbox"
+  var sandbox-literal/eax: (addr cell) <- lookup *sandbox-literal-ah
+  var sandbox-cell-storage: (handle cell)
+  var sandbox-cell-ah/edx: (addr handle cell) <- address sandbox-cell-storage
+  lookup-symbol sandbox-literal, sandbox-cell-ah, *initial-root, 0/no-globals, 0/no-trace, 0/no-screen, 0/no-keyboard
   # print: cell -> stream
-  print-cell initial-root, s, 0/no-trace
+  print-cell sandbox-cell-ah, s, 0/no-trace
   # stream -> gap-buffer
   load-gap-buffer-from-stream data, s
 }
 
+# Save state as an alist of alists:
+#   ((globals . ((a . (fn ...))
+#                ...))
+#    (sandbox . ...))
 fn store-sandbox data-disk: (addr disk), _self: (addr sandbox) {
   compare data-disk, 0/no-disk
   {
@@ -67,6 +79,8 @@ fn store-sandbox data-disk: (addr disk), _self: (addr sandbox) {
   var data/eax: (addr gap-buffer) <- lookup *data-ah
   var stream-storage: (stream byte 0x200)
   var stream/edi: (addr stream byte) <- address stream-storage
-  emit-gap-buffer data, stream
+  write stream, "((sandbox . "
+  append-gap-buffer data, stream
+  write stream, "))"
   store-sector data-disk, 0/lba, stream
 }