shithub: sl

Download patch

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)