about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--apps/factorial.mu26
1 files changed, 22 insertions, 4 deletions
diff --git a/apps/factorial.mu b/apps/factorial.mu
index c9e241aa..164a7d45 100644
--- a/apps/factorial.mu
+++ b/apps/factorial.mu
@@ -1,8 +1,26 @@
+# usage is finicky for now:
+#   ./translate_mu apps/factorial.mu
+#   ./a.elf test  # any args? run tests
+#   ./a.elf       # no args? run factorial(5)
 fn main args: (addr array kernel-string) -> exit-status/ebx: int {
-#?   run-tests
-#?   result <- copy 0
-  var tmp/eax: int <- factorial 5
-  exit-status <- copy tmp
+  var a/eax: (addr array kernel-string) <- copy args
+  var tmp/ecx: int <- length a
+  $main-body: {
+    compare tmp, 1
+    # if (len(args) != 1) run-tests()
+    {
+      break-if-=
+      run-tests
+      exit-status <- copy 0
+      break $main-body
+    }
+    # if (len(args) == 1) factorial(5)
+    {
+      break-if-!=
+      var tmp/eax: int <- factorial 5
+      exit-status <- copy tmp
+    }
+  }
 }
 
 fn factorial n: int -> result/eax: int {