is the call trace of `(to-num three)` (old version) simply:
Typer call trace ---------------- +- to-num
Compiler Eval trace
---------------------------------------------------------------------------- [Ln 1, cl 1] +- Call: (plus[9] three[6] two[7]) [Ln 15, cl 30] |+- Case: case x[1] | succ z => [Ln 15, cl 15] |:+- Call: (succ[5] (plus[3] z[0] y[1])) [Ln 15, cl 15] |:|+- Var: succ[5]
or (new version)
Typer call trace ---------------- +- to-num[10] |+- to-num[2] |:+- to-num[2] |:|+- to-num[2]
Compiler Eval trace
---------------------------------------------------------------------------- [Ln 1, cl 1] +- Call: (to-num[10] three[6]) [Ln 1, cl 1] |+- Var: to-num[10] [Ln 1, cl 8] |:+- Var: three[6] [Ln 10, cl 14] |:|+- Case: case x[0] | succ y => [Ln 9, cl 32] |:|:+- Call: (_+_[41] 1 (to-num[2] y[0])) [Ln 9, cl 32] |:|:|+- Var: _+_[41] [Ln 9, cl 18] |:|:|:+- Imm: 1 [Ln 9, cl 23] |:|:|:|+- Call: (to-num[2] y[0]) [Ln 9, cl 23] |:|:|:|:+- Var: to-num[2] [Ln 9, cl 30] |:|:|:|:|+- Var: y[0] [Ln 10, cl 14] |:|:|:|:|:+- Case: case x[0] | succ y => [Ln 9, cl 32] |:|:|:|:|:|+- Call: (_+_[41] 1 (to-num[2] y[0])) [Ln 9, cl 32] |:|:|:|:|:|:+- Var: _+_[41] [Ln 9, cl 18] |:|:|:|:|:|:|+- Imm: 1 [Ln 9, cl 23] |:|:|:|:|:|:|:+- Call: (to-num[2] y[0]) [Ln 9, cl 23] |:|:|:|:|:|:|:|+- Var: to-num[2] [Ln 9, cl 30] |:|:|:|:|:|:|:|:+- Var: y[0] [Ln 10, cl 14] |:|:|:|:|:|:|:|:|+- Case: case x[0] | succ y => [Ln 9, cl 32] |:|:|:|:|:|:|:|:|:+- Call: (_+_[41] 1 (to-num[2] y[0])) [Ln 9, cl 32] |:|:|:|:|:|:|:|:|:|+- Var: _+_[41] [Ln 9, cl 18] |:|:|:|:|:|:|:|:|:|:+- Imm: 1 [Ln 9, cl 23] |:|:|:|:|:|:|:|:|:|:|+- Call: (to-num[2] y[0]) [Ln 9, cl 23] |:|:|:|:|:|:|:|:|:|:|:+- Var: to-num[2] [Ln 9, cl 30] |:|:|:|:|:|:|:|:|:|:|:|+- Var: y[0] [Ln 10, cl 14] |:|:|:|:|:|:|:|:|:|:|:|:+- Case: case x[0] | succ y => [Ln 10, cl 13] |:|:|:|:|:|:|:|:|:|:|:|:|+- Imm: 0
============================================================================
I like the second version because I can see the recursion taking place.