@@ -1,106 +0,0 @@
1−#include <idris_rts.h>
2−
3−void plus(VM* vm, VAL* oldbase) {
4− INITFRAME;
5− RESERVE(2);
6− ADDTOP(2);
7−
8− switch(TAG(LOC(0))) {
9− case 0:
10− PROJECT(vm, LOC(0), 2, 0);
11− RVAL = LOC(1);
12− TOPBASE(0);
13− REBASE;
14− break;
15− case 1:
16− PROJECT(vm, LOC(0), 2, 1);
17− RESERVE(2);
18− TOP(0) = LOC(2);
19− TOP(1) = LOC(1);
20− STOREOLD;
21− BASETOP(0);
22− ADDTOP(2);
23− CALL(plus);
24− LOC(3) = RVAL;
25− RVAL = MKCON(vm, 1, 1, LOC(3));
26− TOPBASE(0);
27− REBASE;
28− break;
29− }
30−}
31−
32−void natToInt(VM* vm, VAL* oldbase) {
33− INITFRAME;
34− RESERVE(3);
35− ADDTOP(3);
36−
37− switch(TAG(LOC(0))) {
38− case 0:
39− PROJECT(vm, LOC(0), 2, 0);
40− RVAL = MKINT(0);
41− TOPBASE(0);
42− REBASE;
43− break;
44− case 1:
45− PROJECT(vm, LOC(0), 1, 1);
46− RESERVE(1);
47− TOP(0) = LOC(1);
48− STOREOLD;
49− BASETOP(0);
50− ADDTOP(1);
51− CALL(natToInt);
52− LOC(2) = RVAL;
53− RVAL = ADD(LOC(2), MKINT(1));
54− TOPBASE(0);
55− REBASE;
56− break;
57− }
58−}
59−
60−int do_main(VM* vm, VAL* oldbase) {
61− INITFRAME;
62− RESERVE(2);
63− ADDTOP(2);
64−
65− LOC(0) = MKCON(vm, 0, 0);
66− LOC(0) = MKCON(vm, 1, 1, LOC(0));
67− LOC(0) = MKCON(vm, 1, 1, LOC(0));
68−
69− dumpVal(LOC(0));
70− printf("\n");
71−
72− LOC(1) = MKCON(vm, 0, 0);
73− LOC(1) = MKCON(vm, 1, 1, LOC(1));
74− LOC(1) = MKCON(vm, 1, 1, LOC(1));
75−
76− RESERVE(2);
77− TOP(0) = LOC(0);
78− TOP(1) = LOC(1);
79−
80− STOREOLD;
81− BASETOP(0);
82− ADDTOP(2);
83− CALL(plus);
84− LOC(0) = RVAL;
85−
86− RESERVE(1);
87− TOP(0) = LOC(0);
88− SLIDE(vm, 1);
89− TOPBASE(1);
90− TAILCALL(natToInt);
91−/* STOREOLD;
92− BASETOP(0);
93− ADDTOP(1);
94− CALL(natToInt);
95− TOPBASE(0);
96− REBASE; */
97−}
98−
99−int main() {
100− VM* vm = init_vm(100,100);
101−
102− do_main(vm, NULL);
103− printf("%ld\n", GETINT(RVAL));
104−
105− printf("%d %d %d\n", vm->valstack, vm->valstack_base, vm->valstack_top);
106−}