on master help sign in
Calculate size allocation of BIGINT properly
commit3fe14c79f32b6451ad26842bfc0203b3102cbb1b authorEdwin Brady <ecb10@st-andrews.ac.uk> dateWed 7 Aug 2013, 17:54 (13 years ago) parentf226a47
1 file changed+24−33
rts/idris_gmp.c+24−33
rts/idris_gmp.c+24−33
@@ -10,9 +10,9 @@ VAL MKBIGI(int val) {
1010VAL MKBIGC(VM* vm, char* val) {
1111 mpz_t* bigint;
1212
13− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
13+ VAL cl = allocate(vm, sizeof(Closure) +
1414 sizeof(mpz_t), 0);
15− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
15+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
1616
1717 mpz_init(*bigint);
1818 mpz_set_str(*bigint, val, 10);
@@ -25,9 +25,9 @@ VAL MKBIGC(VM* vm, char* val) {
2525
2626VAL MKBIGM(VM* vm, void* big) {
2727 mpz_t* bigint;
28− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
28+ VAL cl = allocate(vm, sizeof(Closure) +
2929 sizeof(mpz_t), 0);
30− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
30+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
3131
3232 mpz_init(*bigint);
3333 mpz_set(*bigint, *((mpz_t*)big));
@@ -40,9 +40,9 @@ VAL MKBIGM(VM* vm, void* big) {
4040
4141VAL MKBIGMc(VM* vm, void* big) {
4242 mpz_t* bigint;
43− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
43+ VAL cl = allocate(vm, sizeof(Closure) +
4444 sizeof(mpz_t), 0);
45− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
45+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
4646
4747 mpz_init_set(*bigint, *((mpz_t*)big));
4848
@@ -54,9 +54,8 @@ VAL MKBIGMc(VM* vm, void* big) {
5454
5555VAL MKBIGUI(VM* vm, unsigned long val) {
5656 mpz_t* bigint;
57− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
58− sizeof(mpz_t), 0);
59− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
57+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
58+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
6059
6160 mpz_init_set_ui(*bigint, val);
6261
@@ -68,9 +67,8 @@ VAL MKBIGUI(VM* vm, unsigned long val) {
6867
6968VAL MKBIGSI(VM* vm, signed long val) {
7069 mpz_t* bigint;
71− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
72− sizeof(mpz_t), 0);
73− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
70+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
71+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
7472
7573 mpz_init_set_si(*bigint, val);
7674
@@ -83,9 +81,8 @@ VAL MKBIGSI(VM* vm, signed long val) {
8381VAL GETBIG(VM * vm, VAL x) {
8482 if (ISINT(x)) {
8583 mpz_t* bigint;
86− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
87− sizeof(mpz_t), 0);
88− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
84+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
85+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
8986
9087 mpz_init(*bigint);
9188 mpz_set_si(*bigint, GETINT(x));
@@ -101,9 +98,8 @@ VAL GETBIG(VM * vm, VAL x) {
10198
10299VAL bigAdd(VM* vm, VAL x, VAL y) {
103100 mpz_t* bigint;
104− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
105− sizeof(mpz_t), 0);
106− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
101+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
102+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
107103 mpz_add(*bigint, GETMPZ(x), GETMPZ(y));
108104 SETTY(cl, BIGINT);
109105 cl -> info.ptr = (void*)bigint;
@@ -112,9 +108,8 @@ VAL bigAdd(VM* vm, VAL x, VAL y) {
112108
113109VAL bigSub(VM* vm, VAL x, VAL y) {
114110 mpz_t* bigint;
115− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
116− sizeof(mpz_t), 0);
117− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
111+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
112+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
118113 mpz_sub(*bigint, GETMPZ(x), GETMPZ(y));
119114 SETTY(cl, BIGINT);
120115 cl -> info.ptr = (void*)bigint;
@@ -123,9 +118,8 @@ VAL bigSub(VM* vm, VAL x, VAL y) {
123118
124119VAL bigMul(VM* vm, VAL x, VAL y) {
125120 mpz_t* bigint;
126− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
127− sizeof(mpz_t), 0);
128− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
121+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
122+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
129123 mpz_mul(*bigint, GETMPZ(x), GETMPZ(y));
130124 SETTY(cl, BIGINT);
131125 cl -> info.ptr = (void*)bigint;
@@ -134,9 +128,8 @@ VAL bigMul(VM* vm, VAL x, VAL y) {
134128
135129VAL bigDiv(VM* vm, VAL x, VAL y) {
136130 mpz_t* bigint;
137− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
138− sizeof(mpz_t), 0);
139− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
131+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
132+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
140133 mpz_div(*bigint, GETMPZ(x), GETMPZ(y));
141134 SETTY(cl, BIGINT);
142135 cl -> info.ptr = (void*)bigint;
@@ -145,9 +138,8 @@ VAL bigDiv(VM* vm, VAL x, VAL y) {
145138
146139VAL bigMod(VM* vm, VAL x, VAL y) {
147140 mpz_t* bigint;
148− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
149− sizeof(mpz_t), 0);
150− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
141+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
142+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
151143 mpz_mod(*bigint, GETMPZ(x), GETMPZ(y));
152144 SETTY(cl, BIGINT);
153145 cl -> info.ptr = (void*)bigint;
@@ -320,9 +312,8 @@ VAL idris_castFloatBig(VM* vm, VAL f) {
320312 double val = GETFLOAT(f);
321313
322314 mpz_t* bigint;
323− VAL cl = allocate(vm, sizeof(ClosureType) + sizeof(void*) +
324− sizeof(mpz_t), 0);
325− bigint = (mpz_t*)(((char*)cl) + sizeof(ClosureType) + sizeof(void*));
315+ VAL cl = allocate(vm, sizeof(Closure) + sizeof(mpz_t), 0);
316+ bigint = (mpz_t*)(((char*)cl) + sizeof(Closure));
326317
327318 mpz_init_set_d(*bigint, val);
328319