factorial.toy revision 1.3
1# Simple recursive factorial implementation, roughly equivalent to:
2#
3#  int factorial (int arg)
4#  {
5#     if (arg < 2)
6#       return arg
7#     return arg * factorial (arg - 1)
8#  }
9
10# Initial state:
11# stack: [arg]
12
13# 0:
14DUP
15# stack: [arg, arg]
16
17# 1:
18PUSH_CONST 2
19# stack: [arg, arg, 2]
20
21# 2:
22BINARY_COMPARE_LT
23# stack: [arg, (arg < 2)]
24
25# 3:
26JUMP_ABS_IF_TRUE 9
27# stack: [arg]
28
29# 4:
30DUP
31# stack: [arg, arg]
32
33# 5:
34PUSH_CONST 1
35# stack: [arg, arg, 1]
36
37# 6:
38BINARY_SUBTRACT
39# stack: [arg,  (arg - 1)
40
41# 7:
42RECURSE
43# stack: [arg, factorial(arg - 1)]
44
45# 8:
46BINARY_MULT
47# stack: [arg * factorial(arg - 1)]
48
49# 9:
50RETURN
51