diff options
Diffstat (limited to 'shell/eval.mu')
-rw-r--r-- | shell/eval.mu | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/shell/eval.mu b/shell/eval.mu index e69de29b..b8284426 100644 --- a/shell/eval.mu +++ b/shell/eval.mu @@ -0,0 +1,26 @@ +fn evaluate _in: (addr handle cell), out: (addr handle cell), trace: (addr trace) { + trace-text trace, "eval", "evaluate" + trace-lower trace + var in/eax: (addr handle cell) <- copy _in + var in-addr/eax: (addr cell) <- lookup *in + { + var is-nil?/eax: boolean <- is-nil? in-addr + compare is-nil?, 0/false + break-if-= + # nil is a literal + copy-object _in, out + trace-higher trace + return + } + var in-type/ecx: (addr int) <- get in-addr, type + compare *in-type, 1/number + { + break-if-!= + # numbers are literals + copy-object _in, out + trace-higher trace + return + } + copy-object _in, out + trace-higher trace +} |