ref: 6e44f3442f1aaf7ef3a201e365529d25c9cecc6c
parent: 1dc8deebc22a54ef966eb9d23efa9682e185ee01
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon Apr 7 16:22:50 EDT 2025
mp → bignum
--- a/src/builtins.c
+++ b/src/builtins.c
@@ -258,7 +258,7 @@
BUILTIN("bignum?", bignump)
{
argcount(nargs, 1);
- return ismp(args[0]) ? sl_t : sl_nil;
+ return isbignum(args[0]) ? sl_t : sl_nil;
}
BUILTIN("fixnum", fixnum)
--- a/src/cvalues.c
+++ b/src/cvalues.c
@@ -198,7 +198,7 @@
else if(isrune(a))
r = torune(a);
else if(iscvalue(a))
- r = conv_to_u32(a, cv_data(ptr(a)), T_MP);
+ r = conv_to_u32(a, cv_data(ptr(a)), T_BIGNUM);
else if(isubnum(a)){
sl_fx v = ubnumval(a);
r = conv_to_u32(a, &v, ubnumtype(a));
@@ -332,7 +332,7 @@
num_ctor_init(utf8, u8int, T_U8)
static void
-cvalue_mp_init(sl_type *type, sl_v a, void *dest)
+cvalue_bignum_init(sl_type *type, sl_v a, void *dest)
{
mpint *n;
USED(type);
@@ -340,11 +340,11 @@
n = vtomp(numval(a), nil);
else if(isubnum(a)){
uintptr v = ubnumval(a);
- n = conv_to_mp(a, &v, ubnumtype(a));
+ n = conv_to_bignum(a, &v, ubnumtype(a));
}else if(iscvalue(a)){
sl_cv *cv = ptr(a);
void *p = cv_data(cv);
- n = conv_to_mp(a, p, cv_numtype(cv));
+ n = conv_to_bignum(a, p, cv_numtype(cv));
}else
type_error("num", a);
*((mpint**)dest) = n;
@@ -357,22 +357,22 @@
args = sl.sp-1;
}else
argcount(nargs, 1);
- sl_v cv = cvalue(sl_mptype, sizeof(mpint*));
- cvalue_mp_init(sl_mptype, args[0], cvalue_data(cv));
+ sl_v cv = cvalue(sl_bignumtype, sizeof(mpint*));
+ cvalue_bignum_init(sl_bignumtype, args[0], cvalue_data(cv));
return cv;
}
sl_v
-mk_mp(mpint *n)
+mk_bignum(mpint *n)
{
- sl_v cv = cvalue(sl_mptype, sizeof(mpint*));
+ sl_v cv = cvalue(sl_bignumtype, sizeof(mpint*));
*(mpint**)cvalue_data(cv) = n;
return cv;
}
static void
-free_mp(sl_v self)
+free_bignum(sl_v self)
{
mpint **s = value2c(mpint**, self);
if(*s != mpzero && *s != mpone && *s != mptwo)
@@ -379,7 +379,7 @@
mpfree(*s);
}
-static sl_cvtable mp_vtable = { nil, nil, free_mp, nil };
+static sl_cvtable mp_vtable = { nil, nil, free_bignum, nil };
sl_constfn
sl_v
@@ -931,7 +931,7 @@
{
if(fits_fixnum(Saccum))
return fixnum((sl_fx)Saccum);
- RETURN_NUM_AS(vtomp(Saccum, nil), mp);
+ RETURN_NUM_AS(vtomp(Saccum, nil), bignum);
}
#define ACCUM_DEFAULT 0
@@ -981,16 +981,16 @@
case T_S64:
i64 = *(s64int*)a;
if(i64 == INT64_MIN)
- return mk_mp(uvtomp((u64int)INT64_MAX+1, nil));
+ return mk_bignum(uvtomp((u64int)INT64_MAX+1, nil));
i64 = -i64;
i64neg:
- return fits_fixnum(i64) ? fixnum(i64) : mk_mp(vtomp(i64, nil));
+ return fits_fixnum(i64) ? fixnum(i64) : mk_bignum(vtomp(i64, nil));
case T_U64:
ui64 = *(u64int*)a;
if(ui64 >= (u64int)INT64_MAX+1){
mp = uvtomp(ui64, nil);
mp->sign = -1;
- return mk_mp(mp);
+ return mk_bignum(mp);
}
i64 = -(s64int)ui64;
goto i64neg;
@@ -997,10 +997,10 @@
case T_PTR:
// a pointer is not exactly a number
break;
- case T_MP:
+ case T_BIGNUM:
mp = mpcopy(*(mpint**)a);
mp->sign = -mp->sign;
- return mk_mp(mp);
+ return mk_bignum(mp);
}
}
@@ -1129,13 +1129,13 @@
if(tb == T_PTR)
type_error("num", b);
- if(ta == T_MP){
- if(tb == T_MP){
+ if(ta == T_BIGNUM){
+ if(tb == T_BIGNUM){
if(mpsignif(*(mpint**)bptr) == 0)
goto div_error;
x = mpnew(0);
mpdiv(*(mpint**)aptr, *(mpint**)bptr, x, nil);
- return mk_mp(x);
+ return mk_bignum(x);
}else{
b64 = conv_to_s64(b, bptr, tb);
if(b64 == 0)
@@ -1142,7 +1142,7 @@
goto div_error;
x = tb == T_U64 ? uvtomp(b64, nil) : vtomp(b64, nil);
mpdiv(*(mpint**)aptr, x, x, nil);
- return mk_mp(x);
+ return mk_bignum(x);
}
}
if(ta == T_U64){
@@ -1195,12 +1195,12 @@
ptmp = aptr; aptr = bptr; bptr = ptmp;
}
// now a's type is larger than or same as b's
- if(ta == T_MP){
- if(tb == T_MP){
+ if(ta == T_BIGNUM){
+ if(tb == T_BIGNUM){
bmp = *(mpint**)bptr;
resmp = mpnew(0);
}else{
- bmp = conv_to_mp(b, bptr, tb);
+ bmp = conv_to_bignum(b, bptr, tb);
resmp = bmp;
}
b64 = 0;
@@ -1218,7 +1218,7 @@
case T_S64: return mk_s64(*(s64int*)aptr & (s64int)b64);
case T_U64: return mk_u64(*(u64int*)aptr & (u64int)b64);
case T_PTR: return mk_ptr(*(uintptr*)aptr & (uintptr)b64);
- case T_MP: mpand(*(mpint**)aptr, bmp, resmp); return mk_mp(resmp);
+ case T_BIGNUM: mpand(*(mpint**)aptr, bmp, resmp); return mk_bignum(resmp);
case T_FLOAT:
case T_DOUBLE: break;
}
@@ -1234,7 +1234,7 @@
case T_S64: return mk_s64(*(s64int*)aptr | (s64int)b64);
case T_U64: return mk_u64(*(u64int*)aptr | (u64int)b64);
case T_PTR: return mk_ptr(*(uintptr*)aptr | (uintptr)b64);
- case T_MP: mpor(*(mpint**)aptr, bmp, resmp); return mk_mp(resmp);
+ case T_BIGNUM: mpor(*(mpint**)aptr, bmp, resmp); return mk_bignum(resmp);
case T_FLOAT:
case T_DOUBLE: break;
}
@@ -1250,7 +1250,7 @@
case T_S64: return mk_s64(*(s64int*)aptr ^ (s64int)b64);
case T_U64: return mk_u64(*(u64int*)aptr ^ (u64int)b64);
case T_PTR: return mk_ptr(*(uintptr*)aptr ^ (uintptr)b64);
- case T_MP: mpxor(*(mpint**)aptr, bmp, resmp); return mk_mp(resmp);
+ case T_BIGNUM: mpxor(*(mpint**)aptr, bmp, resmp); return mk_bignum(resmp);
case T_FLOAT:
case T_DOUBLE: break;
}
@@ -1326,7 +1326,7 @@
case T_S64: return mk_s64(~*(s64int*)aptr);
case T_U64: return mk_u64(~*(u64int*)aptr);
case T_PTR: return mk_ptr(~*(uintptr*)aptr);
- case T_MP:; mpint *m = mpnew(0); mpnot(*(mpint**)aptr, m); return mk_mp(m);
+ case T_BIGNUM:; mpint *m = mpnew(0); mpnot(*(mpint**)aptr, m); return mk_bignum(m);
default: abort();
}
}
@@ -1362,7 +1362,7 @@
}else
return fits_fixnum(accum) ? fixnum(accum) : return_from_s64(accum);
}
- if(ismp(a)){
+ if(isbignum(a)){
aptr = cv_data(ptr(a));
mp = mpnew(0);
mpleft(*(mpint**)aptr, n, mp);
@@ -1390,7 +1390,7 @@
if(mp != nil){
n = mpsignif(mp);
if(n >= FIXNUM_BITS)
- return mk_mp(mp);
+ return mk_bignum(mp);
accum = mptov(mp);
mpfree(mp);
assert(fits_fixnum(accum));
@@ -1442,10 +1442,10 @@
mk_primtype(double, double);
mk_primtype(utf8, u8int);
- ctor_cv_intern(bignum, T_MP, mpint*);
- sl_mptype = get_type(sl_bignumsym);
- sl_mptype->init = cvalue_mp_init;
- sl_mptype->vtable = &mp_vtable;
+ ctor_cv_intern(bignum, T_BIGNUM, mpint*);
+ sl_bignumtype = get_type(sl_bignumsym);
+ sl_bignumtype->init = cvalue_bignum_init;
+ sl_bignumtype->vtable = &mp_vtable;
unboxedtypes[T_S8] = sl_s8type;
unboxedtypes[T_U8] = sl_u8type;
--- a/src/cvalues.h
+++ b/src/cvalues.h
@@ -53,7 +53,7 @@
sl_v mk_s64(s64int n);
sl_v mk_u64(u64int n);
sl_v mk_ptr(uintptr n);
-sl_v mk_mp(mpint *n);
+sl_v mk_bignum(mpint *n);
sl_v mk_float(float n);
sl_v mk_double(double n);
--- a/src/equal.c
+++ b/src/equal.c
@@ -338,7 +338,7 @@
case TAG_CVALUE:
cv = ptr(a);
data = cv_data(cv);
- if(cv->type == sl_mptype){
+ if(cv->type == sl_bignumtype){
len = mptobe(*(mpint**)data, nil, 0, (u8int**)&data);
h = memhash(data, len);
MEM_FREE(data);
--- a/src/operators.c
+++ b/src/operators.c
@@ -2,7 +2,7 @@
#include "operators.h"
mpint *
-conv_to_mp(sl_v v, void *data, sl_numtype tag)
+conv_to_bignum(sl_v v, void *data, sl_numtype tag)
{
switch(tag){
case T_S8: return itomp(*(s8int*)data, nil);
@@ -14,7 +14,7 @@
case T_S64: return vtomp(*(s64int*)data, nil);
case T_U64: return uvtomp(*(u64int*)data, nil);
case T_PTR: return uvtomp(*(uintptr*)data, nil);
- case T_MP: return mpcopy(*(mpint**)data);
+ case T_BIGNUM: return mpcopy(*(mpint**)data);
case T_FLOAT: return dtomp(*(float*)data, nil);
case T_DOUBLE: return dtomp(*(double*)data, nil);
}
@@ -40,7 +40,7 @@
return d;
case T_U64: return *(u64int*)data;
case T_PTR: return *(uintptr*)data;
- case T_MP: return mptod(*(mpint**)data);
+ case T_BIGNUM: return mptod(*(mpint**)data);
case T_FLOAT: return *(float*)data;
case T_DOUBLE: return *(double*)data;
}
@@ -63,7 +63,7 @@
case T_S64: return (ctype)*(s64int*)data; \
case T_U64: return (ctype)*(u64int*)data; \
case T_PTR: return (ctype)*(uintptr*)data; \
- case T_MP: return (ctype)mptov(*(mpint**)data); \
+ case T_BIGNUM: return (ctype)mptov(*(mpint**)data); \
case T_FLOAT: return (ctype)*(float*)data; \
case T_DOUBLE: return (ctype)*(double*)data; \
} \
@@ -92,7 +92,7 @@
case T_S64: return *(s64int*)data; break;
case T_U64: return *(u64int*)data; break;
case T_PTR: return *(uintptr*)data; break;
- case T_MP: return mptouv(*(mpint**)data); break;
+ case T_BIGNUM: return mptouv(*(mpint**)data); break;
case T_FLOAT:
if(*(float*)data >= 0)
return *(float*)data;
@@ -121,7 +121,7 @@
case T_S64: return *(s64int*)a < *(s64int*)b;
case T_U64: return *(u64int*)a < *(u64int*)b;
case T_PTR: return *(uintptr*)a < *(uintptr*)b;
- case T_MP: return mpcmp(*(mpint**)a, *(mpint**)b) < 0;
+ case T_BIGNUM: return mpcmp(*(mpint**)a, *(mpint**)b) < 0;
case T_FLOAT: return *(float*)a < *(float*)b;
case T_DOUBLE: return *(double*)a < *(double*)b;
}
@@ -142,7 +142,7 @@
case T_S64: return *(s64int*)a == *(s64int*)b;
case T_U64: return *(u64int*)a == *(u64int*)b;
case T_PTR: return *(uintptr*)a == *(uintptr*)b;
- case T_MP: return mpcmp(*(mpint**)a, *(mpint**)b) == 0;
+ case T_BIGNUM: return mpcmp(*(mpint**)a, *(mpint**)b) == 0;
case T_FLOAT: return *(float*)a == *(float*)b && !isnan(*(float*)a);
case T_DOUBLE: return *(double*)a == *(double*)b && !isnan(*(double*)b);
}
@@ -171,7 +171,7 @@
if(db < da)
return false;
- if(cmpmpint == nil && (atag == T_MP || btag == T_MP))
+ if(cmpmpint == nil && (atag == T_BIGNUM || btag == T_BIGNUM))
cmpmpint = mpnew(0);
if(atag == T_U64){
@@ -179,7 +179,7 @@
return *(s64int*)b >= 0 && *(u64int*)a < (u64int)*(s64int*)b;
if(btag == T_DOUBLE)
return db >= 0 ? *(u64int*)a < (u64int)*(double*)b : 0;
- if(btag == T_MP)
+ if(btag == T_BIGNUM)
return mpcmp(uvtomp(*(u64int*)a, cmpmpint), *(mpint**)b) < 0;
}
if(atag == T_S64){
@@ -187,19 +187,19 @@
return *(s64int*)a >= 0 && (u64int)*(s64int*)a < *(u64int*)b;
if(btag == T_DOUBLE)
return db == db ? *(s64int*)a < (s64int)*(double*)b : 0;
- if(btag == T_MP)
+ if(btag == T_BIGNUM)
return mpcmp(vtomp(*(s64int*)a, cmpmpint), *(mpint**)b) < 0;
}
if(btag == T_U64){
if(atag == T_DOUBLE)
return da >= 0 ? *(u64int*)b > (u64int)*(double*)a : 0;
- if(atag == T_MP)
+ if(atag == T_BIGNUM)
return mpcmp(*(mpint**)a, uvtomp(*(u64int*)b, cmpmpint)) < 0;
}
if(btag == T_S64){
if(atag == T_DOUBLE)
return da == da ? *(s64int*)b > (s64int)*(double*)a : 0;
- if(atag == T_MP)
+ if(atag == T_BIGNUM)
return mpcmp(*(mpint**)a, vtomp(*(s64int*)b, cmpmpint)) < 0;
}
return false;
@@ -230,7 +230,7 @@
if(da != db)
return false;
- if(cmpmpint == nil && (atag == T_MP || btag == T_MP))
+ if(cmpmpint == nil && (atag == T_BIGNUM || btag == T_BIGNUM))
cmpmpint = mpnew(0);
if(atag == T_U64){
@@ -240,7 +240,7 @@
return *(s64int*)b >= 0 && *(u64int*)a == *(u64int*)b;
if(btag == T_DOUBLE)
return *(double*)b >= 0 && *(u64int*)a == (u64int)*(double*)b;
- if(btag == T_MP)
+ if(btag == T_BIGNUM)
return mpcmp(uvtomp(*(u64int*)a, cmpmpint), *(mpint**)b) == 0;
}
if(atag == T_S64){
@@ -248,7 +248,7 @@
return *(s64int*)a >= 0 && *(u64int*)a == *(u64int*)b;
if(btag == T_DOUBLE)
return *(s64int*)a == (s64int)*(double*)b;
- if(btag == T_MP)
+ if(btag == T_BIGNUM)
return mpcmp(vtomp(*(s64int*)a, cmpmpint), *(mpint**)b) == 0;
}
if(btag == T_U64){
@@ -256,7 +256,7 @@
return *(s64int*)a >= 0 && *(u64int*)b == *(u64int*)a;
if(atag == T_DOUBLE)
return *(double*)a >= 0 && *(u64int*)b == (u64int)*(double*)a;
- if(atag == T_MP)
+ if(atag == T_BIGNUM)
return mpcmp(*(mpint**)a, uvtomp(*(u64int*)b, cmpmpint)) == 0;
}
if(btag == T_S64){
@@ -264,7 +264,7 @@
return *(s64int*)b >= 0 && *(u64int*)b == *(u64int*)a;
if(atag == T_DOUBLE)
return *(s64int*)b == (s64int)*(double*)a;
- if(atag == T_MP)
+ if(atag == T_BIGNUM)
return mpcmp(*(mpint**)a, vtomp(*(s64int*)b, cmpmpint)) == 0;
}
return true;
--- a/src/operators.h
+++ b/src/operators.h
@@ -4,7 +4,7 @@
u32int conv_to_u32(sl_v v, void *data, sl_numtype tag);
s64int conv_to_s64(sl_v v, void *data, sl_numtype tag);
u64int conv_to_u64(sl_v v, void *data, sl_numtype tag);
-mpint *conv_to_mp(sl_v v, void *data, sl_numtype tag);
+mpint *conv_to_bignum(sl_v v, void *data, sl_numtype tag);
double conv_to_double(sl_v v, void *data, sl_numtype tag);
#if defined(BITS64)
--- a/src/read.c
+++ b/src/read.c
@@ -84,7 +84,7 @@
if(fits_fixnum(i64))
*pval = fixnum(i64);
else if((m = strtomp(tok, &end, base, nil)) != nil)
- *pval = mk_mp(m);
+ *pval = mk_bignum(m);
else
return false;
}
--- a/src/sl.c
+++ b/src/sl.c
@@ -30,7 +30,7 @@
sl_v sl_s64sym, sl_u64sym, sl_ptrsym, sl_bignumsym;
sl_v sl_utf8sym, sl_runesym, sl_floatsym, sl_doublesym;
-sl_type *sl_mptype, *sl_builtintype;
+sl_type *sl_bignumtype, *sl_builtintype;
sl_type *sl_s8type, *sl_u8type;
sl_type *sl_s16type, *sl_u16type;
sl_type *sl_s32type, *sl_u32type;
--- a/src/sl.h
+++ b/src/sl.h
@@ -39,7 +39,7 @@
T_S64, T_U64,
T_PTR,
T_UNBOXED_NUM,
- T_MP = T_UNBOXED_NUM,
+ T_BIGNUM = T_UNBOXED_NUM,
T_FLOAT, T_DOUBLE,
}sl_numtype;
@@ -344,8 +344,8 @@
#define value2c(type, v) ((type)cvalue_data(v))
#define cv_numtype(cv) (cv_class(cv)->numtype)
-#define ismp(v) (iscvalue(v) && cv_numtype(ptr(v)) == T_MP)
-#define tomp(v) (*(mpint**)cv_data(ptr(v)))
+#define isbignum(v) (iscvalue(v) && cv_numtype(ptr(v)) == T_BIGNUM)
+#define tobignum(v) (*(mpint**)cv_data(ptr(v)))
#define BUILTIN(lname, cname) \
sl_v fn_builtin_##cname(sl_v *args, int nargs)
@@ -445,7 +445,7 @@
extern sl_v sl_s64sym, sl_u64sym, sl_ptrsym, sl_bignumsym;
extern sl_v sl_utf8sym, sl_runesym, sl_floatsym, sl_doublesym;
-extern sl_type *sl_mptype, *sl_builtintype;
+extern sl_type *sl_bignumtype, *sl_builtintype;
extern sl_type *sl_s8type, *sl_u8type;
extern sl_type *sl_s16type, *sl_u16type;
extern sl_type *sl_s32type, *sl_u32type;
--- a/src/sl_arith_any.h
+++ b/src/sl_arith_any.h
@@ -51,7 +51,7 @@
}
x = u64;
break;
- case T_MP:
+ case T_BIGNUM:
x = ACCUM_DEFAULT;
u64 = ACCUM_DEFAULT;
m = mpcopy(*(mpint**)a);
@@ -112,7 +112,7 @@
uvtomp(*(u64int*)a, m);
MP_OP(Maccum, m, Maccum);
continue;
- case T_MP:
+ case T_BIGNUM:
MP_OP(Maccum, *(mpint**)a, Maccum);
continue;
default:
@@ -134,7 +134,7 @@
}
}
mpfree(m);
- return mk_mp(Maccum);
+ return mk_bignum(Maccum);
}
down:
--- a/src/str.c
+++ b/src/str.c
@@ -350,10 +350,10 @@
num = numval(n);
else if(isubnum(n))
num = ubnumval(n);
- else if(ismp(n)){
+ else if(isbignum(n)){
if(radix != 16 && radix != 10 && radix != 8 && radix != 4 && radix != 2)
lerrorf(sl_errarg, "invalid radix with bignum");
- mpint *i = tomp(n);
+ mpint *i = tobignum(n);
char *s = mptoa(i, radix, nil, 0);
assert(s != nil);
if(radix == 16){ /* FFFF → ffff */
--- a/src/vm.h
+++ b/src/vm.h
@@ -1,8 +1,8 @@
#define fixnum_neg(x) ( \
i64 = -(s64int)(numval(x)), \
i64 == INT64_MIN \
- ? mk_mp(uvtomp((u64int)INT64_MAX+1, nil)) \
- : (fits_fixnum(i64) ? fixnum(i64) : mk_mp(vtomp(i64, nil))) \
+ ? mk_bignum(uvtomp((u64int)INT64_MAX+1, nil)) \
+ : (fits_fixnum(i64) ? fixnum(i64) : mk_bignum(vtomp(i64, nil))) \
)
OP(OP_LOADA0)