about summary refs log tree commit diff stats
path: root/apps/factorial.mu
diff options
context:
space:
mode:
Diffstat (limited to 'apps/factorial.mu')
-rw-r--r--apps/factorial.mu56
1 files changed, 26 insertions, 30 deletions
diff --git a/apps/factorial.mu b/apps/factorial.mu
index 362b68c6..bb335b0a 100644
--- a/apps/factorial.mu
+++ b/apps/factorial.mu
@@ -16,21 +16,19 @@
 #
 # Compare apps/factorial4.subx
 
-fn factorial n: int -> result/eax: int {
+fn factorial n: int -> _/eax: int {
   compare n, 1
+  # if (n <= 1) return 1
   {
     break-if->
-    # n <= 1; return 1
-    result <- copy 1
-  }
-  {
-    break-if-<=
-    # n > 1; return n * factorial(n-1)
-    var tmp/ecx: int <- copy n
-    tmp <- decrement
-    result <- factorial tmp
-    result <- multiply n
+    return 1
   }
+  # n > 1; return n * factorial(n-1)
+  var tmp/ecx: int <- copy n
+  tmp <- decrement
+  var result/eax: int <- factorial tmp
+  result <- multiply n
+  return result
 }
 
 fn test-factorial {
@@ -38,27 +36,25 @@ fn test-factorial {
   check-ints-equal result, 0x78, "F - test-factorial"
 }
 
-fn main args-on-stack: (addr array (addr array byte)) -> exit-status/ebx: int {
+fn main args-on-stack: (addr array (addr array byte)) -> _/ebx: int {
   var args/eax: (addr array addr array byte) <- copy args-on-stack
   # len = length(args)
   var len/ecx: int <- length args
-  $main-body: {
-    # if (len <= 1) return factorial(5)
-    compare len, 1
-    {
-      break-if->
-      var tmp/eax: int <- factorial 5
-      exit-status <- copy tmp
-      break $main-body
-    }
-    # if (args[1] == "test") run-tests()
-    var tmp2/ecx: (addr addr array byte) <- index args, 1
-    var tmp3/eax: boolean <- string-equal? *tmp2, "test"
-    compare tmp3, 0
-    {
-      break-if-=
-      run-tests
-      exit-status <- copy 0  # TODO: get at Num-test-failures somehow
-    }
+  # if (len <= 1) return factorial(5)
+  compare len, 1
+  {
+    break-if->
+    var exit-status/eax: int <- factorial 5
+    return exit-status
+  }
+  # if (args[1] == "test") run-tests()
+  var tmp2/ecx: (addr addr array byte) <- index args, 1
+  var tmp3/eax: boolean <- string-equal? *tmp2, "test"
+  compare tmp3, 0
+  {
+    break-if-=
+    run-tests
+    # TODO: get at Num-test-failures somehow
   }
+  return 0
 }