on 496cf41 help sign in
Idris-dev/iif/ctest.c
106 lines 2.0 kB history raw
1#include <idris_rts.h>
3void plus(VM* vm, VAL* oldbase) {
4 INITFRAME;
5 RESERVE(2);
6 ADDTOP(2);
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 }
32void natToInt(VM* vm, VAL* oldbase) {
33 INITFRAME;
34 RESERVE(3);
35 ADDTOP(3);
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 }
60int do_main(VM* vm, VAL* oldbase) {
61 INITFRAME;
62 RESERVE(2);
63 ADDTOP(2);
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));
69 dumpVal(LOC(0));
70 printf("\n");
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));
76 RESERVE(2);
77 TOP(0) = LOC(0);
78 TOP(1) = LOC(1);
80 STOREOLD;
81 BASETOP(0);
82 ADDTOP(2);
83 CALL(plus);
84 LOC(0) = RVAL;
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; */
99int main() {
100 VM* vm = init_vm(100,100);
102 do_main(vm, NULL);
103 printf("%ld\n", GETINT(RVAL));
105 printf("%d %d %d\n", vm->valstack, vm->valstack_base, vm->valstack_top);