about summary refs log tree commit diff stats
path: root/shell/global.mu
diff options
context:
space:
mode:
Diffstat (limited to 'shell/global.mu')
-rw-r--r--shell/global.mu12
1 files changed, 11 insertions, 1 deletions
diff --git a/shell/global.mu b/shell/global.mu
index 68b584ea..f5d513c5 100644
--- a/shell/global.mu
+++ b/shell/global.mu
@@ -130,7 +130,7 @@ fn append-global _self: (addr global-table), name: (addr array byte), value: (ha
   copy-handle value, curr-value-ah
 }
 
-fn lookup-symbol-in-globals _sym: (addr cell), out: (addr handle cell), _globals: (addr global-table), trace: (addr trace), screen-cell: (addr handle cell) {
+fn lookup-symbol-in-globals _sym: (addr cell), out: (addr handle cell), _globals: (addr global-table), trace: (addr trace), screen-cell: (addr handle cell), keyboard-cell: (addr handle cell) {
   var sym/eax: (addr cell) <- copy _sym
   var sym-name-ah/eax: (addr handle stream byte) <- get sym, text-data
   var _sym-name/eax: (addr stream byte) <- lookup *sym-name-ah
@@ -160,6 +160,16 @@ fn lookup-symbol-in-globals _sym: (addr cell), out: (addr handle cell), _globals
     copy-object screen-cell, out
     return
   }
+  # if sym is "keyboard" and keyboard-cell exists, return it
+  {
+    var sym-is-keyboard?/eax: boolean <- stream-data-equal? sym-name, "keyboard"
+    compare sym-is-keyboard?, 0/false
+    break-if-=
+    compare keyboard-cell, 0
+    break-if-=
+    copy-object keyboard-cell, out
+    return
+  }
   # otherwise error "unbound symbol: ", sym
   var stream-storage: (stream byte 0x40)
   var stream/ecx: (addr stream byte) <- address stream-storage