@@ -7,7 +7,7 @@ void plus(VM* vm, VAL* oldbase) {
77
88 switch(TAG(LOC(0))) {
99 case 0:
10−// PROJECT(vm, LOC(0), 2, 0);
10+ PROJECT(vm, LOC(0), 2, 0);
1111 RVAL = LOC(1);
1212 TOPBASE(0);
1313 REBASE;
@@ -36,7 +36,7 @@ void natToInt(VM* vm, VAL* oldbase) {
3636
3737 switch(TAG(LOC(0))) {
3838 case 0:
39− // PROJECT(vm, LOC(0), 2, 0);
39+ PROJECT(vm, LOC(0), 2, 0);
4040 RVAL = MKINT(0);
4141 TOPBASE(0);
4242 REBASE;
@@ -57,10 +57,8 @@ void natToInt(VM* vm, VAL* oldbase) {
5757 }
5858}
5959
60−int main() {
60+int do_main(VM* vm, VAL* oldbase) {
6161 INITFRAME;
62− VM* vm = init_vm(100,100);
63−
6462 RESERVE(2);
6563 ADDTOP(2);
6664
@@ -87,13 +85,22 @@ int main() {
8785
8886 RESERVE(1);
8987 TOP(0) = LOC(0);
90− STOREOLD;
88+ SLIDE(vm, 1);
89+ TOPBASE(1);
90+ TAILCALL(natToInt);
91+/* STOREOLD;
9192 BASETOP(0);
9293 ADDTOP(1);
9394 CALL(natToInt);
94− LOC(0) = RVAL;
95+ TOPBASE(0);
96+ REBASE; */
97+}
98+
99+int main() {
100+ VM* vm = init_vm(100,100);
95101
96− printf("%ld\n", GETINT(LOC(0)));
102+ do_main(vm, NULL);
103+ printf("%ld\n", GETINT(RVAL));
97104
98− printf("%d %d\n", vm->valstack, vm->valstack_base);
105+ printf("%d %d %d\n", vm->valstack, vm->valstack_base, vm->valstack_top);
99106}