about summary refs log tree commit diff stats
path: root/apps/tile/value-stack.mu
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-11-02 19:50:34 -0800
committerKartik Agaram <vc@akkartik.com>2020-11-02 19:50:52 -0800
commita3f779158626b9ad3c81959b85cbfbbce17425fd (patch)
tree10c9da6ee8783a2ed2a3e6e928fb5d70024d1bcc /apps/tile/value-stack.mu
parent951c3f4c92358d3962154a4ef24a19366ea8a619 (diff)
downloadmu-a3f779158626b9ad3c81959b85cbfbbce17425fd.tar.gz
7159 - explicitly use 'return' everywhere
https://github.com/akkartik/mu/issues/45#issuecomment-719990879, task 2.
Diffstat (limited to 'apps/tile/value-stack.mu')
-rw-r--r--apps/tile/value-stack.mu147
1 files changed, 67 insertions, 80 deletions
diff --git a/apps/tile/value-stack.mu b/apps/tile/value-stack.mu
index 8da8c920..9515b7fa 100644
--- a/apps/tile/value-stack.mu
+++ b/apps/tile/value-stack.mu
@@ -83,15 +83,13 @@ fn push-value-stack _self: (addr value-stack), val: (addr value) {
   increment *top-addr
 }
 
-fn pop-int-from-value-stack _self: (addr value-stack) -> val/eax: int {
-$pop-int-from-value-stack:body: {
+fn pop-int-from-value-stack _self: (addr value-stack) -> _/eax: int {
   var self/esi: (addr value-stack) <- copy _self
   var top-addr/ecx: (addr int) <- get self, top
   {
     compare *top-addr, 0
     break-if->
-    val <- copy -1
-    break $pop-int-from-value-stack:body
+    return -1
   }
   decrement *top-addr
   var data-ah/edx: (addr handle array value) <- get self, data
@@ -100,145 +98,134 @@ $pop-int-from-value-stack:body: {
   var dest-offset/edx: (offset value) <- compute-offset data, top
   var result-addr/eax: (addr value) <- index data, dest-offset
   var result-addr2/eax: (addr int) <- get result-addr, int-data
-  val <- copy *result-addr2
-}
+  return *result-addr2
 }
 
-fn value-stack-empty? _self: (addr value-stack) -> result/eax: boolean {
-$value-stack-empty?:body: {
+fn value-stack-empty? _self: (addr value-stack) -> _/eax: boolean {
   var self/esi: (addr value-stack) <- copy _self
   var top/eax: (addr int) <- get self, top
   compare *top, 0
   {
     break-if-!=
-    result <- copy 1  # true
-    break $value-stack-empty?:body
+    return 1  # true
   }
-  result <- copy 0  # false
-}
+  return 0  # false
 }
 
-fn value-stack-length _self: (addr value-stack) -> result/eax: int {
+fn value-stack-length _self: (addr value-stack) -> _/eax: int {
   var self/esi: (addr value-stack) <- copy _self
   var top-addr/eax: (addr int) <- get self, top
-  result <- copy *top-addr
+  return *top-addr
 }
 
-fn value-stack-max-width _self: (addr value-stack) -> result/eax: int {
+fn value-stack-max-width _self: (addr value-stack) -> _/eax: int {
   var self/esi: (addr value-stack) <- copy _self
   var data-ah/edi: (addr handle array value) <- get self, data
   var _data/eax: (addr array value) <- lookup *data-ah
   var data/edi: (addr array value) <- copy _data
   var top-addr/ecx: (addr int) <- get self, top
   var i/ebx: int <- copy 0
-  var out: int
+  var result: int
   {
     compare i, *top-addr
     break-if->=
     var o/edx: (offset value) <- compute-offset data, i
     var v/edx: (addr value) <- index data, o
     var w/eax: int <- value-width v, 1  # top-level=true
-    # if (w > out) w = out
+    # if (w > result) w = result
     {
-      compare w, out
+      compare w, result
       break-if-<=
-      copy-to out, w
+      copy-to result, w
     }
     i <- increment
     loop
   }
-  result <- copy out
+  return result
 }
 
-fn value-width _v: (addr value), top-level: boolean -> result/eax: int {
-  var out/edi: int <- copy 0
-  $value-width:core: {
-    var v/esi: (addr value) <- copy _v
-    var type/eax: (addr int) <- get v, type
-    {
-      compare *type, 0  # int
-      break-if-!=
-      var v-int/edx: (addr int) <- get v, int-data
-      var _out/eax: int <- decimal-size *v-int
-      out <- copy _out
-      break $value-width:core
-    }
-    {
-      compare *type, 1  # string
-      break-if-!=
-      var s-ah/eax: (addr handle array byte) <- get v, text-data
-      var s/eax: (addr array byte) <- lookup *s-ah
-      compare s, 0
-      break-if-=
-      var _out/eax: int <- length s
-      out <- copy _out
-      compare out, 0xd  # max string size
-      {
-        break-if-<=
-        out <- copy 0xd
-      }
-      # if it's a nested string, include space for quotes
-      # we don't do this for the top-level, where the quotes will overflow
-      # into surrounding padding.
-      compare top-level, 0  # false
-      {
-        break-if-!=
-        out <- add 2
-      }
-      break $value-width:core
-    }
+fn value-width _v: (addr value), top-level: boolean -> _/eax: int {
+  var v/esi: (addr value) <- copy _v
+  var type/eax: (addr int) <- get v, type
+  {
+    compare *type, 0  # int
+    break-if-!=
+    var v-int/edx: (addr int) <- get v, int-data
+    var result/eax: int <- decimal-size *v-int
+    return result
+  }
+  {
+    compare *type, 1  # string
+    break-if-!=
+    var s-ah/eax: (addr handle array byte) <- get v, text-data
+    var s/eax: (addr array byte) <- lookup *s-ah
+    compare s, 0
+    break-if-=
+    var result/eax: int <- length s
+    compare result, 0xd  # max string size
     {
-      compare *type, 2  # array
-      break-if-!=
-      var a-ah/eax: (addr handle array value) <- get v, array-data
-      var a/eax: (addr array value) <- lookup *a-ah
-      compare a, 0
-      break-if-=
-      var _out/eax: int <- array-width a
-      out <- copy _out
-      break $value-width:core
+      break-if-<=
+      result <- copy 0xd
     }
+    # if it's a nested string, include space for quotes
+    # we don't do this for the top-level, where the quotes will overflow
+    # into surrounding padding.
+    compare top-level, 0  # false
     {
-      compare *type, 3  # file handle
       break-if-!=
-      var f-ah/eax: (addr handle buffered-file) <- get v, file-data
-      var f/eax: (addr buffered-file) <- lookup *f-ah
-      compare f, 0
-      break-if-=
-      # TODO
-      out <- copy 4
-      break $value-width:core
+      result <- add 2
     }
+    return result
+  }
+  {
+    compare *type, 2  # array
+    break-if-!=
+    var a-ah/eax: (addr handle array value) <- get v, array-data
+    var a/eax: (addr array value) <- lookup *a-ah
+    compare a, 0
+    break-if-=
+    var result/eax: int <- array-width a
+    return result
+  }
+  {
+    compare *type, 3  # file handle
+    break-if-!=
+    var f-ah/eax: (addr handle buffered-file) <- get v, file-data
+    var f/eax: (addr buffered-file) <- lookup *f-ah
+    compare f, 0
+    break-if-=
+    # TODO: visualizing file handles
+    return 4
   }
-  result <- copy out
+  return 0
 }
 
 # keep sync'd with render-array
-fn array-width _a: (addr array value) -> result/eax: int {
+fn array-width _a: (addr array value) -> _/eax: int {
   var a/esi: (addr array value) <- copy _a
   var max/ecx: int <- length a
   var i/eax: int <- copy 0
-  var out/edi: int <- copy 0
+  var result/edi: int <- copy 0
   {
     compare i, max
     break-if->=
     {
       compare i, 0
       break-if-=
-      out <- increment  # for space
+      result <- increment  # for space
     }
     var off/ecx: (offset value) <- compute-offset a, i
     var x/ecx: (addr value) <- index a, off
     {
       var w/eax: int <- value-width x, 0
-      out <- add w
+      result <- add w
     }
     i <- increment
     loop
   }
-  result <- copy out
   # we won't add 2 for surrounding brackets since we don't surround arrays in
   # spaces like other value types
+  return result
 }
 
 fn save-lines in-h: (handle array (handle array byte)), _out-ah: (addr handle array value) {