on master help sign in
Fixes for shifting Integer

It was using GETBIG and GETINT on the same value, which can't both be right. Fixed so that the second argument is treated as an Int. Also fixed the idris_gmp.h declarations.

commit1ecb649ca65450bb4da8d0fa253d1bc6f70aa7d9 authorEdwin Brady <ecb10@st-andrews.ac.uk> dateFri 29 Dec 2017, 22:18 (9 years ago) parent78b9234
2 files changed+5−4
rts/idris_gmp.c+3−3 rts/idris_gmp.h+2−1
rts/idris_gmp.c+3−3
@@ -344,7 +344,7 @@ VAL idris_bigShiftLeft(VM* vm, VAL x, VAL y) {
344344 if (ISINT(x) && ISINT(y)) {
345345 return INTOP(<<, x, y);
346346 } else {
347− return bigShiftLeft(vm, GETBIG(vm, x), GETBIG(vm, y));
347+ return bigShiftLeft(vm, GETBIG(vm, x), y);
348348 }
349349}
350350
@@ -352,7 +352,7 @@ VAL idris_bigAShiftRight(VM* vm, VAL x, VAL y) {
352352 if (ISINT(x) && ISINT(y)) {
353353 return INTOP(>>, x, y);
354354 } else {
355− return bigAShiftRight(vm, GETBIG(vm, x), GETBIG(vm, y));
355+ return bigAShiftRight(vm, GETBIG(vm, x), y);
356356 }
357357}
358358
@@ -360,7 +360,7 @@ VAL idris_bigLShiftRight(VM* vm, VAL x, VAL y) {
360360 if (ISINT(x) && ISINT(y)) {
361361 return INTOP(>>, x, y);
362362 } else {
363− return bigLShiftRight(vm, GETBIG(vm, x), GETBIG(vm, y));
363+ return bigLShiftRight(vm, GETBIG(vm, x), y);
364364 }
365365}
366366
rts/idris_gmp.h+2−1
@@ -43,7 +43,8 @@ VAL idris_castBigStr(VM* vm, VAL i);
4343VAL idris_bigAnd(VM* vm, VAL x, VAL y);
4444VAL idris_bigOr(VM* vm, VAL x, VAL y);
4545VAL idris_bigShiftLeft(VM* vm, VAL x, VAL y);
46−VAL idris_bigShiftRight(VM* vm, VAL x, VAL y);
46+VAL idris_bigAShiftRight(VM* vm, VAL x, VAL y);
47+VAL idris_bigLShiftRight(VM* vm, VAL x, VAL y);
4748
4849uint64_t idris_truncBigB64(const mpz_t bi);
4950