From 3d1c4216ede8c628558c9fe700fb2be1aa08b473 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Mon, 2 Nov 2020 21:24:53 -0800 Subject: 7162 --- html/apps/factorial.mu.html | 84 +++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 44 deletions(-) (limited to 'html/apps/factorial.mu.html') diff --git a/html/apps/factorial.mu.html b/html/apps/factorial.mu.html index 823fcf3b..e982c54b 100644 --- a/html/apps/factorial.mu.html +++ b/html/apps/factorial.mu.html @@ -75,52 +75,48 @@ if ('onhashchange' in window) { 16 # 17 # Compare apps/factorial4.subx 18 -19 fn factorial n: int -> result/eax: int { +19 fn factorial n: int -> _/eax: int { 20 compare n, 1 -21 { -22 break-if-> -23 # n <= 1; return 1 -24 result <- copy 1 +21 # if (n <= 1) return 1 +22 { +23 break-if-> +24 return 1 25 } -26 { -27 break-if-<= -28 # n > 1; return n * factorial(n-1) -29 var tmp/ecx: int <- copy n -30 tmp <- decrement -31 result <- factorial tmp -32 result <- multiply n -33 } -34 } -35 -36 fn test-factorial { -37 var result/eax: int <- factorial 5 -38 check-ints-equal result, 0x78, "F - test-factorial" -39 } -40 -41 fn main args-on-stack: (addr array (addr array byte)) -> exit-status/ebx: int { -42 var args/eax: (addr array addr array byte) <- copy args-on-stack -43 # len = length(args) -44 var len/ecx: int <- length args -45 $main-body: { -46 # if (len <= 1) return factorial(5) -47 compare len, 1 -48 { -49 break-if-> -50 var tmp/eax: int <- factorial 5 -51 exit-status <- copy tmp -52 break $main-body -53 } -54 # if (args[1] == "test") run-tests() -55 var tmp2/ecx: (addr addr array byte) <- index args, 1 -56 var tmp3/eax: boolean <- string-equal? *tmp2, "test" -57 compare tmp3, 0 -58 { -59 break-if-= -60 run-tests -61 exit-status <- copy 0 # TODO: get at Num-test-failures somehow -62 } -63 } -64 } +26 # n > 1; return n * factorial(n-1) +27 var tmp/ecx: int <- copy n +28 tmp <- decrement +29 var result/eax: int <- factorial tmp +30 result <- multiply n +31 return result +32 } +33 +34 fn test-factorial { +35 var result/eax: int <- factorial 5 +36 check-ints-equal result, 0x78, "F - test-factorial" +37 } +38 +39 fn main args-on-stack: (addr array (addr array byte)) -> _/ebx: int { +40 var args/eax: (addr array addr array byte) <- copy args-on-stack +41 # len = length(args) +42 var len/ecx: int <- length args +43 # if (len <= 1) return factorial(5) +44 compare len, 1 +45 { +46 break-if-> +47 var exit-status/eax: int <- factorial 5 +48 return exit-status +49 } +50 # if (args[1] == "test") run-tests() +51 var tmp2/ecx: (addr addr array byte) <- index args, 1 +52 var tmp3/eax: boolean <- string-equal? *tmp2, "test" +53 compare tmp3, 0 +54 { +55 break-if-= +56 run-tests +57 # TODO: get at Num-test-failures somehow +58 } +59 return 0 +60 } -- cgit 1.4.1-2-gfad0