diff options
Diffstat (limited to 'apps/factorial.mu')
-rw-r--r-- | apps/factorial.mu | 56 |
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 } |