v / examples / wasm_codegen / factorial.v
33 lines · 31 sloc · 503 bytes · eeaaff218bbe695c655a6380963e2f82deadcb94
Raw
1import wasm
2
3fn main() {
4 mut m := wasm.Module{}
5 mut fac := m.new_function('fac', [.i64_t], [.i64_t])
6 {
7 fac.local_get(0)
8 fac.eqz(.i64_t)
9 bif := fac.c_if([], [.i64_t])
10 {
11 fac.i64_const(1)
12 }
13 fac.c_else(bif)
14 {
15 {
16 fac.local_get(0)
17 }
18 {
19 fac.local_get(0)
20 fac.i64_const(1)
21 fac.sub(.i64_t)
22 fac.call('fac')
23 }
24 fac.mul(.i64_t)
25 }
26 fac.c_end(bif)
27 }
28 m.commit(fac, true)
29 print(m.compile().bytestr())
30
31 // v run factorial.v > a.wasm
32 // wasmer a.wasm -i fac 5
33}
34