ref: 2e844090ac7f45601babede208cd9560b6f472b5
parent: 53b8237c1af6a8764d760357f98e77c2fbc7100c
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Feb 2 22:05:58 EST 2025
operators: less casting
--- a/src/operators.c
+++ b/src/operators.c
@@ -228,15 +228,15 @@
// this is safe because if a had been bigger than INT64_MAX,
// we would already have concluded that it's bigger than b.
if(btag == T_INT64)
- return (int64_t)*(uint64_t*)a == *(int64_t*)b;
+ return *(int64_t*)b >= 0 && *(uint64_t*)a == *(uint64_t*)b;
if(btag == T_DOUBLE)
- return *(uint64_t*)a == (uint64_t)(int64_t)*(double*)b;
+ return *(double*)b >= 0 && *(uint64_t*)a == (uint64_t)*(double*)b;
if(btag == T_MPINT)
return mpcmp(uvtomp(*(uint64_t*)a, cmpmpint), *(mpint**)b) == 0;
}
if(atag == T_INT64){
if(btag == T_UINT64)
- return *(int64_t*)a == (int64_t)*(uint64_t*)b;
+ return *(int64_t*)a >= 0 && *(uint64_t*)a == *(uint64_t*)b;
if(btag == T_DOUBLE)
return *(int64_t*)a == (int64_t)*(double*)b;
if(btag == T_MPINT)
@@ -244,15 +244,15 @@
}
if(btag == T_UINT64){
if(atag == T_INT64)
- return (int64_t)*(uint64_t*)b == *(int64_t*)a;
+ return *(int64_t*)a >= 0 && *(uint64_t*)b == *(uint64_t*)a;
if(atag == T_DOUBLE)
- return *(uint64_t*)b == (uint64_t)(int64_t)*(double*)a;
+ return *(double*)a >= 0 && *(uint64_t*)b == (uint64_t)*(double*)a;
if(atag == T_MPINT)
return mpcmp(*(mpint**)a, uvtomp(*(uint64_t*)b, cmpmpint)) == 0;
}
if(btag == T_INT64){
if(atag == T_UINT64)
- return *(int64_t*)b == (int64_t)*(uint64_t*)a;
+ return *(int64_t*)b >= 0 && *(uint64_t*)b == *(uint64_t*)a;
if(atag == T_DOUBLE)
return *(int64_t*)b == (int64_t)*(double*)a;
if(atag == T_MPINT)