about summary refs log tree commit diff stats
path: root/baremetal/shell/print.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-02-27 07:21:29 -0800
committerKartik K. Agaram <vc@akkartik.com>2021-02-27 07:21:29 -0800
commit03178cde6fd47f4eebb49852199681355bff5a14 (patch)
treeb72acc9b3258b4641e60d5b932d6c861ca975512 /baremetal/shell/print.mu
parenta9e0cb7cc9da462c6e7886edfb554d7266e84c18 (diff)
downloadmu-03178cde6fd47f4eebb49852199681355bff5a14.tar.gz
7818 - baremetal/shell: parse numbers
Diffstat (limited to 'baremetal/shell/print.mu')
-rw-r--r--baremetal/shell/print.mu12
1 files changed, 12 insertions, 0 deletions
diff --git a/baremetal/shell/print.mu b/baremetal/shell/print.mu
index f8e9de31..13605fef 100644
--- a/baremetal/shell/print.mu
+++ b/baremetal/shell/print.mu
@@ -3,6 +3,12 @@ fn print-cell _in: (addr handle cell), out: (addr stream byte) {
   var in/eax: (addr handle cell) <- copy _in
   var in-addr/eax: (addr cell) <- lookup *in
   var in-type/ecx: (addr int) <- get in-addr, type
+  compare *in-type, 1/number
+  {
+    break-if-!=
+    print-number in-addr, out
+    return
+  }
   compare *in-type, 2/symbol
   {
     break-if-!=
@@ -26,3 +32,9 @@ fn print-symbol _in: (addr cell), out: (addr stream byte) {
     loop
   }
 }
+
+fn print-number _in: (addr cell), out: (addr stream byte) {
+  var in/esi: (addr cell) <- copy _in
+  var val/eax: (addr float) <- get in, number-data
+  write-float-decimal-approximate out, *val, 3/precision
+}