https://github.com/akkartik/mu/blob/master/apps/factorial.mu
1
2
3
4
5
6
7
8
9
10
11
12
13
14 fn factorial n: int -> result/eax: int {
15 compare n, 1
16 {
17 break-if->
18
19 result <- copy 1
20 }
21 {
22 break-if-<=
23
24 var tmp/ecx: int <- copy n
25 tmp <- decrement
26 result <- factorial tmp
27 result <- multiply n
28 }
29 }
30
31 fn test-factorial {
32 var result/eax: int <- factorial 5
33 check-ints-equal result, 0x78, "F - test-factorial"
34 }
35
36 fn main args-on-stack: (addr array (addr array byte)) -> exit-status/ebx: int {
37 var args/eax: (addr array addr array byte) <- copy args-on-stack
38
39 var len/ecx: int <- length args
40 $main-body: {
41
42 compare len, 1
43 {
44 break-if->
45 var tmp/eax: int <- factorial 5
46 exit-status <- copy tmp
47 break $main-body
48 }
49
50 var tmp2/ecx: (addr addr array byte) <- index args, 1
51 var tmp3/eax: boolean <- string-equal? *tmp2, "test"
52 compare tmp3, 0
53 {
54 break-if-=
55 run-tests
56 exit-status <- copy 0
57 }
58 }
59 }