@@ -22,18 +22,12 @@ VAL MKBIGI(int val) {
22 return MKINT((i_int)val);
22 return MKINT((i_int)val);
25−static mpz_t * big(BigInt * v) {
26− return (mpz_t*)(v->big);
29−#define BIG(x) big((BigInt*)(x))
31static BigInt * allocBig(VM * vm) {
25static BigInt * allocBig(VM * vm) {
32 idris_requireAlloc(vm, IDRIS_MAXGMP);
26 idris_requireAlloc(vm, IDRIS_MAXGMP);
33 BigInt * cl = iallocate(vm, sizeof(*cl) + sizeof(mpz_t), 0);
27 BigInt * cl = iallocate(vm, sizeof(*cl) + sizeof(mpz_t), 0);
34 idris_doneAlloc(vm);
28 idris_doneAlloc(vm);
35 SETTY(cl, CT_BIGINT);
29 SETTY(cl, CT_BIGINT);
36− mpz_init(*big(cl));
30+ mpz_init(*getmpz(cl));
37 return cl;
31 return cl;
@@ -43,39 +37,39 @@ VAL MKBIGC(VM* vm, char* val) {
45 BigInt * cl = allocBig(vm);
39 BigInt * cl = allocBig(vm);
46− mpz_set_str(*big(cl), val, 10);
40+ mpz_set_str(*getmpz(cl), val, 10);
47 return (VAL)cl;
41 return (VAL)cl;
51VAL MKBIGM(VM* vm, void* ibig) {
45VAL MKBIGM(VM* vm, void* ibig) {
52 BigInt * cl = allocBig(vm);
46 BigInt * cl = allocBig(vm);
53− mpz_set(*big(cl), *((mpz_t*)ibig));
47+ mpz_set(*getmpz(cl), *((mpz_t*)ibig));
54 return (VAL)cl;
48 return (VAL)cl;
57VAL MKBIGMc(VM* vm, void* ibig) {
51VAL MKBIGMc(VM* vm, void* ibig) {
58 BigInt * cl = allocBig(vm);
52 BigInt * cl = allocBig(vm);
59− mpz_init_set(*big(cl), *((mpz_t*)ibig));
53+ mpz_init_set(*getmpz(cl), *((mpz_t*)ibig));
60 return (VAL)cl;
54 return (VAL)cl;
63VAL MKBIGUI(VM* vm, unsigned long val) {
57VAL MKBIGUI(VM* vm, unsigned long val) {
64 BigInt * cl = allocBig(vm);
58 BigInt * cl = allocBig(vm);
65− mpz_init_set_ui(*big(cl), val);
59+ mpz_init_set_ui(*getmpz(cl), val);
66 return (VAL)cl;
60 return (VAL)cl;
69VAL MKBIGSI(VM* vm, signed long val) {
63VAL MKBIGSI(VM* vm, signed long val) {
70 BigInt * cl = allocBig(vm);
64 BigInt * cl = allocBig(vm);
71− mpz_init_set_si(*big(cl), val);
65+ mpz_init_set_si(*getmpz(cl), val);
72 return (VAL)cl;
66 return (VAL)cl;
75static BigInt * getbig(VM * vm, VAL x) {
69static BigInt * getbig(VM * vm, VAL x) {
76 if (ISINT(x)) {
70 if (ISINT(x)) {
77 BigInt * cl = allocBig(vm);
71 BigInt * cl = allocBig(vm);
78− mpz_set_si(*big(cl), GETINT(x));
72+ mpz_set_si(*getmpz(cl), GETINT(x));
79 return cl;
73 return cl;
81 switch(GETTY(x)) {
75 switch(GETTY(x)) {
@@ -91,62 +85,62 @@ static BigInt * getbig(VM * vm, VAL x) {
92VAL bigAdd(VM* vm, VAL x, VAL y) {
86VAL bigAdd(VM* vm, VAL x, VAL y) {
93 BigInt * cl = allocBig(vm);
87 BigInt * cl = allocBig(vm);
94− mpz_add(*big(cl), *big(getbig(vm,x)), *big(getbig(vm,y)));
88+ mpz_add(*getmpz(cl), *getmpz(getbig(vm,x)), *getmpz(getbig(vm,y)));
95 return (VAL)cl;
89 return (VAL)cl;
98VAL bigSub(VM* vm, VAL x, VAL y) {
92VAL bigSub(VM* vm, VAL x, VAL y) {
99 BigInt * cl = allocBig(vm);
93 BigInt * cl = allocBig(vm);
100− mpz_sub(*big(cl), *big(getbig(vm,x)), *big(getbig(vm,y)));
94+ mpz_sub(*getmpz(cl), *getmpz(getbig(vm,x)), *getmpz(getbig(vm,y)));
101 return (VAL)cl;
95 return (VAL)cl;
104VAL bigMul(VM* vm, VAL x, VAL y) {
98VAL bigMul(VM* vm, VAL x, VAL y) {
105 BigInt * cl = allocBig(vm);
99 BigInt * cl = allocBig(vm);
106− mpz_mul(*big(cl), *big(getbig(vm,x)), *big(getbig(vm,y)));
100+ mpz_mul(*getmpz(cl), *getmpz(getbig(vm,x)), *getmpz(getbig(vm,y)));
107 return (VAL)cl;
101 return (VAL)cl;
110VAL bigDiv(VM* vm, VAL x, VAL y) {
104VAL bigDiv(VM* vm, VAL x, VAL y) {
111 BigInt * cl = allocBig(vm);
105 BigInt * cl = allocBig(vm);
112− mpz_tdiv_q(*big(cl), *big(getbig(vm,x)), *big(getbig(vm,y)));
106+ mpz_tdiv_q(*getmpz(cl), *getmpz(getbig(vm,x)), *getmpz(getbig(vm,y)));
113 return (VAL)cl;
107 return (VAL)cl;
116VAL bigMod(VM* vm, VAL x, VAL y) {
110VAL bigMod(VM* vm, VAL x, VAL y) {
117 BigInt * cl = allocBig(vm);
111 BigInt * cl = allocBig(vm);
118− mpz_tdiv_r(*big(cl), *big(getbig(vm,x)), *big(getbig(vm,y)));
112+ mpz_tdiv_r(*getmpz(cl), *getmpz(getbig(vm,x)), *getmpz(getbig(vm,y)));
119 return (VAL)cl;
113 return (VAL)cl;
122VAL bigAnd(VM* vm, VAL x, VAL y) {
116VAL bigAnd(VM* vm, VAL x, VAL y) {
123 BigInt * cl = allocBig(vm);
117 BigInt * cl = allocBig(vm);
124− mpz_and(*big(cl), *big(getbig(vm,x)), *big(getbig(vm,y)));
118+ mpz_and(*getmpz(cl), *getmpz(getbig(vm,x)), *getmpz(getbig(vm,y)));
125 return (VAL)cl;
119 return (VAL)cl;
128VAL bigOr(VM* vm, VAL x, VAL y) {
122VAL bigOr(VM* vm, VAL x, VAL y) {
129 BigInt * cl = allocBig(vm);
123 BigInt * cl = allocBig(vm);
130− mpz_ior(*big(cl), *big(getbig(vm,x)), *big(getbig(vm,y)));
124+ mpz_ior(*getmpz(cl), *getmpz(getbig(vm,x)), *getmpz(getbig(vm,y)));
131 return (VAL)cl;
125 return (VAL)cl;
134VAL bigShiftLeft(VM* vm, VAL x, VAL y) {
128VAL bigShiftLeft(VM* vm, VAL x, VAL y) {
135 BigInt * cl = allocBig(vm);
129 BigInt * cl = allocBig(vm);
136− mpz_mul_2exp(*big(cl), *big(getbig(vm,x)), GETINT(y));
130+ mpz_mul_2exp(*getmpz(cl), *getmpz(getbig(vm,x)), GETINT(y));
137 return (VAL)cl;
131 return (VAL)cl;
141VAL bigLShiftRight(VM* vm, VAL x, VAL y) {
135VAL bigLShiftRight(VM* vm, VAL x, VAL y) {
142 BigInt * cl = allocBig(vm);
136 BigInt * cl = allocBig(vm);
143− mpz_fdiv_q_2exp(*big(cl), *big(getbig(vm,x)), GETINT(y));
137+ mpz_fdiv_q_2exp(*getmpz(cl), *getmpz(getbig(vm,x)), GETINT(y));
144 return (VAL)cl;
138 return (VAL)cl;
147VAL bigAShiftRight(VM* vm, VAL x, VAL y) {
141VAL bigAShiftRight(VM* vm, VAL x, VAL y) {
148 BigInt * cl = allocBig(vm);
142 BigInt * cl = allocBig(vm);
149− mpz_fdiv_q_2exp(*big(cl), *big(getbig(vm,x)), GETINT(y));
143+ mpz_fdiv_q_2exp(*getmpz(cl), *getmpz(getbig(vm,x)), GETINT(y));
150 return (VAL)cl;
144 return (VAL)cl;
@@ -266,29 +260,29 @@ VAL idris_bigMod(VM* vm, VAL x, VAL y) {
266int bigEqConst(VAL x, int c) {
260int bigEqConst(VAL x, int c) {
267 if (ISINT(x)) { return (GETINT(x) == c); }
261 if (ISINT(x)) { return (GETINT(x) == c); }
269− int rv = mpz_cmp_si(*BIG(x), c);
263+ int rv = mpz_cmp_si(GETMPZ(x), c);
270 return (rv == 0);
264 return (rv == 0);
274VAL bigEq(VM* vm, VAL x, VAL y) {
268VAL bigEq(VM* vm, VAL x, VAL y) {
275− return MKINT((i_int)(mpz_cmp(*BIG(x), *BIG(y)) == 0));
269+ return MKINT((i_int)(mpz_cmp(GETMPZ(x), GETMPZ(y)) == 0));
278VAL bigLt(VM* vm, VAL x, VAL y) {
272VAL bigLt(VM* vm, VAL x, VAL y) {
279− return MKINT((i_int)(mpz_cmp(*BIG(x), *BIG(y)) < 0));
273+ return MKINT((i_int)(mpz_cmp(GETMPZ(x), GETMPZ(y)) < 0));
282VAL bigGt(VM* vm, VAL x, VAL y) {
276VAL bigGt(VM* vm, VAL x, VAL y) {
283− return MKINT((i_int)(mpz_cmp(*BIG(x), *BIG(y)) > 0));
277+ return MKINT((i_int)(mpz_cmp(GETMPZ(x), GETMPZ(y)) > 0));
286VAL bigLe(VM* vm, VAL x, VAL y) {
280VAL bigLe(VM* vm, VAL x, VAL y) {
287− return MKINT((i_int)(mpz_cmp(*BIG(x), *BIG(y)) <= 0));
281+ return MKINT((i_int)(mpz_cmp(GETMPZ(x), GETMPZ(y)) <= 0));
290VAL bigGe(VM* vm, VAL x, VAL y) {
284VAL bigGe(VM* vm, VAL x, VAL y) {
291− return MKINT((i_int)(mpz_cmp(*BIG(x), *BIG(y)) >= 0));
285+ return MKINT((i_int)(mpz_cmp(GETMPZ(x), GETMPZ(y)) >= 0));
294VAL idris_bigEq(VM* vm, VAL x, VAL y) {
288VAL idris_bigEq(VM* vm, VAL x, VAL y) {
@@ -340,7 +334,7 @@ VAL idris_castBigInt(VM* vm, VAL i) {
340 if (ISINT(i)) {
334 if (ISINT(i)) {
341 return i;
335 return i;
343− return MKINT((i_int)(mpz_get_ui(*BIG(i))));
337+ return MKINT((i_int)(mpz_get_ui(GETMPZ(i))));
@@ -348,14 +342,14 @@ VAL idris_castBigFloat(VM* vm, VAL i) {
348 if (ISINT(i)) {
342 if (ISINT(i)) {
349 return MKFLOAT(vm, GETINT(i));
343 return MKFLOAT(vm, GETINT(i));
351− return MKFLOAT(vm, mpz_get_d(*BIG(i)));
345+ return MKFLOAT(vm, mpz_get_d(GETMPZ(i)));
355VAL idris_castFloatBig(VM* vm, VAL f) {
349VAL idris_castFloatBig(VM* vm, VAL f) {
356 double val = GETFLOAT(f);
350 double val = GETFLOAT(f);
357 BigInt * cl = allocBig(vm);
351 BigInt * cl = allocBig(vm);
358− mpz_init_set_d(*big(cl), val);
352+ mpz_init_set_d(*getmpz(cl), val);
359 return (VAL)cl;
353 return (VAL)cl;
@@ -364,7 +358,7 @@ VAL idris_castStrBig(VM* vm, VAL i) {
366VAL idris_castBigStr(VM* vm, VAL i) {
360VAL idris_castBigStr(VM* vm, VAL i) {
367− char* str = mpz_get_str(NULL, 10, *big(getbig(vm, i)));
361+ char* str = mpz_get_str(NULL, 10, *getmpz(getbig(vm, i)));
368 return MKSTR(vm, str);
362 return MKSTR(vm, str);