From 35e061384978c8be4847b7c5461d26f67053d5b7 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 30 May 2021 18:31:28 -0700 Subject: shell: raise errors when loading code on boot --- shell/global.mu | 26 +++++++++++++------------- shell/sandbox.mu | 19 ++++++++++++++++--- 2 files changed, 29 insertions(+), 16 deletions(-) (limited to 'shell') diff --git a/shell/global.mu b/shell/global.mu index 6e0ff806..860deea6 100644 --- a/shell/global.mu +++ b/shell/global.mu @@ -68,37 +68,37 @@ fn load-globals in: (addr handle cell), self: (addr global-table) { var remaining-ah/esi: (addr handle cell) <- copy in { var _remaining/eax: (addr cell) <- lookup *remaining-ah - var remaining/ecx: (addr cell) <- copy _remaining + var remaining/ebx: (addr cell) <- copy _remaining var done?/eax: boolean <- nil? remaining compare done?, 0/false break-if-!= #? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "b", 2/fg 0/bg var curr-ah/eax: (addr handle cell) <- get remaining, left - var curr/eax: (addr cell) <- lookup *curr-ah + var _curr/eax: (addr cell) <- lookup *curr-ah + var curr/ecx: (addr cell) <- copy _curr remaining-ah <- get remaining, right - { - draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, " ", 2/fg 0/bg - var name-ah/ecx: (addr handle cell) <- get curr, left - var name/eax: (addr cell) <- lookup *name-ah - var name-data-ah/eax: (addr handle stream byte) <- get name, text-data - var name-data/eax: (addr stream byte) <- lookup *name-data-ah - rewind-stream name-data - draw-stream-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, name-data, 3/fg, 0/bg - } + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, " ", 2/fg 0/bg + var name-ah/eax: (addr handle cell) <- get curr, left + var name/eax: (addr cell) <- lookup *name-ah + var name-data-ah/eax: (addr handle stream byte) <- get name, text-data + var _name-data/eax: (addr stream byte) <- lookup *name-data-ah + var name-data/edx: (addr stream byte) <- copy _name-data + rewind-stream name-data + draw-stream-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, name-data, 3/fg, 0/bg var value-ah/eax: (addr handle cell) <- get curr, right var value/eax: (addr cell) <- lookup *value-ah var value-data-ah/eax: (addr handle stream byte) <- get value, text-data var _value-data/eax: (addr stream byte) <- lookup *value-data-ah var value-data/ecx: (addr stream byte) <- copy _value-data var value-gap-buffer-storage: (handle gap-buffer) - var value-gap-buffer-ah/edx: (addr handle gap-buffer) <- address value-gap-buffer-storage + var value-gap-buffer-ah/edi: (addr handle gap-buffer) <- address value-gap-buffer-storage allocate value-gap-buffer-ah var value-gap-buffer/eax: (addr gap-buffer) <- lookup *value-gap-buffer-ah initialize-gap-buffer value-gap-buffer, 0x1000/4KB #? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "w", 2/fg 0/bg load-gap-buffer-from-stream value-gap-buffer, value-data #? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "x", 2/fg 0/bg - read-evaluate-and-move-to-globals value-gap-buffer-ah, self + read-evaluate-and-move-to-globals value-gap-buffer-ah, self, name-data #? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "y", 2/fg 0/bg loop } diff --git a/shell/sandbox.mu b/shell/sandbox.mu index 87cebfe6..abae14e7 100644 --- a/shell/sandbox.mu +++ b/shell/sandbox.mu @@ -666,7 +666,7 @@ fn run _in-ah: (addr handle gap-buffer), out: (addr stream byte), globals: (addr mark-lines-dirty trace } -fn read-evaluate-and-move-to-globals _in-ah: (addr handle gap-buffer), globals: (addr global-table) { +fn read-evaluate-and-move-to-globals _in-ah: (addr handle gap-buffer), globals: (addr global-table), definition-name: (addr stream byte) { var in-ah/eax: (addr handle gap-buffer) <- copy _in-ah var in/eax: (addr gap-buffer) <- lookup *in-ah var read-result-h: (handle cell) @@ -675,7 +675,6 @@ fn read-evaluate-and-move-to-globals _in-ah: (addr handle gap-buffer), globals: var trace/edx: (addr trace) <- address trace-storage initialize-trace trace, 1/only-errors, 0x10/capacity, 0/visible read-cell in, read-result-ah, trace - clear-trace trace macroexpand read-result-ah, globals, trace var nil-storage: (handle cell) var nil-ah/eax: (addr handle cell) <- address nil-storage @@ -683,8 +682,22 @@ fn read-evaluate-and-move-to-globals _in-ah: (addr handle gap-buffer), globals: var eval-result-storage: (handle cell) var eval-result/edi: (addr handle cell) <- address eval-result-storage debug-print "^", 4/fg, 0/bg - clear-trace trace evaluate read-result-ah, eval-result, *nil-ah, globals, trace, 0/no-screen-cell, 0/no-keyboard-cell, 1/call-number + { + var error?/eax: boolean <- has-errors? trace + compare error?, 0/false + break-if-= + set-cursor-position 0/screen, 0x40/x, 0x18/y + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "error when loading definition for ", 4/fg 0/bg + rewind-stream definition-name + draw-stream-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, definition-name, 3/fg 0/bg + set-cursor-position 0/screen, 0x40/x, 0x19/y + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "see trace in grey at top-left", 7/fg 0/bg + dump-trace trace # will print from 0, 0 + { + loop + } + } debug-print "$", 4/fg, 0/bg move-gap-buffer-to-global globals, read-result-ah, _in-ah } -- cgit 1.4.1-2-gfad0 .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
sig pixel screen: (addr screen), x: int, y: int, color: int
sig read-key kbd: (addr keyboard) -> _/eax: byte
sig draw-grapheme screen: (addr screen), g: grapheme, x: int, y: int, color: int
sig cursor-position screen: (addr screen) -> _/eax: int, _/ecx: int
sig clear-stream f: (addr stream _)
sig rewind-stream f: (addr stream _)
sig write f: (addr stream byte), s: (addr array byte)
sig append-byte f: (addr stream byte), n: int
sig read-byte s: (addr stream byte) -> _/eax: byte
sig stream-empty? s: (addr stream _) -> _/eax: boolean