ref: c92a5cae7db20bd30adf68b96e3ce63429fcb935
parent: 541946a4b943e6ac3054db05a0c7e3e7729f29f5
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Tue Nov 12 20:21:30 EST 2024
clean up and fix some of the types and type casts
--- a/3rd/mp/mpaux.c
+++ b/3rd/mp/mpaux.c
@@ -65,9 +65,9 @@
// guarantee at least n significant bits
void
-mpbits(mpint *b, int m)
+mpbits(mpint *b, uint32_t m)
{
- int n;
+ uint32_t n;
n = DIGITS(m);
if(b->size >= n){
@@ -153,7 +153,7 @@
}
// number of significant bits in mantissa
-int
+uint32_t
mpsignif(mpint *n)
{
int i, j;
@@ -172,10 +172,10 @@
}
// k, where n = 2**k * q for odd q
-int
+uint32_t
mplowbits0(mpint *n)
{
- int k, bit, digit;
+ uint32_t k, bit, digit;
mpdigit d;
assert(n->flags & MPnorm);
--- a/3rd/mp/mpdiv.c
+++ b/3rd/mp/mpdiv.c
@@ -20,9 +20,9 @@
// division by one or small powers of two
if(divisor->top == 1 && (divisor->p[0] & divisor->p[0]-1) == 0){
- vlong r = 0;
+ int64_t r = 0;
if(dividend->top > 0)
- r = (vlong)dividend->sign * (dividend->p[0] & divisor->p[0]-1);
+ r = (int64_t)dividend->sign * (dividend->p[0] & divisor->p[0]-1);
if(quotient != nil){
sign = divisor->sign;
for(s = 0; ((divisor->p[0] >> s) & 1) == 0; s++)
--- a/3rd/mp/mpfmt.c
+++ b/3rd/mp/mpfmt.c
@@ -1,21 +1,6 @@
#include "platform.h"
static int
-toencx(mpint *b, char *buf, int len, int (*enc)(char*, int, uchar*, int))
-{
- uchar *p;
- int n, rv;
-
- p = nil;
- n = mptobe(b, nil, 0, &p);
- if(n < 0)
- return -1;
- rv = (*enc)(buf, len, p, n);
- LLT_FREE(p);
- return rv;
-}
-
-static int
topow2(mpint *b, char *buf, int len, int s)
{
mpdigit *p, x;
@@ -104,7 +89,7 @@
{
mpdigit x, y;
char *out;
- int i, j;
+ uint32_t i, j;
if(len < 2)
return -1;
@@ -173,12 +158,6 @@
len--;
}
switch(base){
- case 64:
- rv = toencx(b, out, len, enc64);
- break;
- case 32:
- rv = toencx(b, out, len, enc32);
- break;
case 16:
rv = topow2(b, out, len, 4);
break;
--- a/3rd/mp/mplogic.c
+++ b/3rd/mp/mplogic.c
@@ -20,8 +20,7 @@
{
mpint *t;
mpdigit *dp1, *dp2, *dpo, d1, d2, d;
- int c1, c2, co;
- int i;
+ uint32_t c1, c2, co, i;
assert(((b1->flags | b2->flags | sum->flags) & MPtimesafe) == 0);
if(b1->sign < 0) fl ^= 0x03;
@@ -49,10 +48,10 @@
d2 = 0;
if(d1 != (mpdigit)-1) c1 = 0;
if(d2 != (mpdigit)-1) c2 = 0;
- if((fl & 2) != 0) d1 ^= -1;
- if((fl & 8) != 0) d2 ^= -1;
+ if((fl & 2) != 0) d1 ^= -(mpdigit)1;
+ if((fl & 8) != 0) d2 ^= -(mpdigit)1;
d = d1 | d2;
- if((fl & 32) != 0) d ^= -1;
+ if((fl & 32) != 0) d ^= -(mpdigit)1;
d += co;
if(d != 0) co = 0;
dpo[i] = d;
@@ -94,8 +93,8 @@
{
mpint *t;
mpdigit *dp1, *dp2, *dpo, d1, d2, d;
- int c1, c2, co;
- int i, fl;
+ uint32_t c1, c2, co, i;
+ int fl;
assert(((b1->flags | b2->flags | sum->flags) & MPtimesafe) == 0);
if(b2->top > b1->top){
@@ -129,72 +128,6 @@
if(co)
dpo[sum->top++] = co;
mpnorm(sum);
-}
-
-void
-mptrunc(mpint *b, int n, mpint *r)
-{
- int d, m, i, c;
-
- assert(((b->flags | r->flags) & MPtimesafe) == 0);
- mpbits(r, n);
- r->top = DIGITS(n);
- d = n / Dbits;
- m = n % Dbits;
- if(b->sign == -1){
- c = 1;
- for(i = 0; i < r->top; i++){
- if(i < b->top)
- r->p[i] = ~(b->p[i] - c);
- else
- r->p[i] = -1;
- if(r->p[i] != 0)
- c = 0;
- }
- if(m != 0)
- r->p[d] &= (1<<m) - 1;
- }else if(b->sign == 1){
- if(d >= b->top){
- mpassign(b, r);
- mpnorm(r);
- return;
- }
- if(b != r)
- for(i = 0; i < d; i++)
- r->p[i] = b->p[i];
- if(m != 0)
- r->p[d] = b->p[d] & (1<<m)-1;
- }
- r->sign = 1;
- mpnorm(r);
-}
-
-void
-mpxtend(mpint *b, int n, mpint *r)
-{
- int d, m, c, i;
-
- d = (n - 1) / Dbits;
- m = (n - 1) % Dbits;
- if(d >= b->top){
- mpassign(b, r);
- return;
- }
- mptrunc(b, n, r);
- mpbits(r, n);
- if((r->p[d] & 1<<m) == 0){
- mpnorm(r);
- return;
- }
- r->p[d] |= -(1<<m);
- r->sign = -1;
- c = 1;
- for(i = 0; i < r->top; i++){
- r->p[i] = ~(r->p[i] - c);
- if(r->p[i] != 0)
- c = 0;
- }
- mpnorm(r);
}
void
--- a/3rd/mp/mpright.c
+++ b/3rd/mp/mpright.c
@@ -4,7 +4,7 @@
void
mpright(mpint *b, int shift, mpint *res)
{
- int d, l, r, i;
+ uint32_t d, l, r, i;
mpdigit this, last;
res->sign = b->sign;
--- a/3rd/mp/mptobe.c
+++ b/3rd/mp/mptobe.c
@@ -4,9 +4,9 @@
// return number of bytes converted
// if p == nil, allocate and result array
int
-mptobe(mpint *b, uchar *p, uint n, uchar **pp)
+mptobe(mpint *b, uint8_t *p, uint32_t n, uint8_t **pp)
{
- uint m;
+ uint32_t m;
m = (mpsignif(b)+7)/8;
if(m == 0)
--- a/3rd/mp/mptober.c
+++ b/3rd/mp/mptober.c
@@ -1,7 +1,7 @@
#include "platform.h"
void
-mptober(mpint *b, uchar *p, int n)
+mptober(mpint *b, uint8_t *p, int n)
{
int i, j, m;
mpdigit x;
--- a/3rd/mp/mptod.c
+++ b/3rd/mp/mptod.c
@@ -5,13 +5,13 @@
double
mptod(mpint *a)
{
- u64int v;
+ uint64_t v;
mpdigit w, r;
int sf, i, n, m, s;
FPdbleword x;
if(a->top == 0) return 0.0;
- sf = mpsignif(a);
+ sf = (int)mpsignif(a);
if(sf > 1024) return a->sign < 0 ? D_NINF : D_PINF;
i = a->top - 1;
v = a->p[i];
@@ -49,7 +49,7 @@
return a->sign < 0 ? D_NINF : D_PINF;
}
x.lo = v;
- x.hi = (u32int)(v >> 32) & (1<<20) - 1 | (sf + 1022) << 20 | a->sign & 1U<<31;
+ x.hi = (uint32_t)(v >> 32) & (1<<20) - 1 | (sf + 1022) << 20 | a->sign & 1U<<31;
return x.x;
}
@@ -57,7 +57,7 @@
dtomp(double d, mpint *a)
{
FPdbleword x;
- uvlong v;
+ uint64_t v;
int e;
if(a == nil)
@@ -69,7 +69,7 @@
mpassign(mpzero, a);
return a;
}
- v = x.lo | (uvlong)(x.hi & (1<<20) - 1) << 32 | 1ULL<<52;
+ v = x.lo | (uint64_t)(x.hi & (1<<20) - 1) << 32 | 1ULL<<52;
if(e < 1075){
v += (1ULL<<(1074 - e)) - (~v >> (1075 - e) & 1);
v >>= 1075 - e;
--- a/3rd/mp/mptoi.c
+++ b/3rd/mp/mptoi.c
@@ -21,7 +21,7 @@
int
mptoi(mpint *b)
{
- uint x;
+ uint32_t x;
if(b->top==0)
return 0;
--- a/3rd/mp/mptoui.c
+++ b/3rd/mp/mptoui.c
@@ -6,7 +6,7 @@
*/
mpint*
-uitomp(uint i, mpint *b)
+uitomp(uint32_t i, mpint *b)
{
if(b == nil){
b = mpnew(0);
@@ -17,15 +17,15 @@
return mpnorm(b);
}
-uint
+uint32_t
mptoui(mpint *b)
{
- uint x;
+ uint32_t x;
x = *b->p;
if(b->sign < 0)
x = 0;
- else if(b->top > 1 || (sizeof(mpdigit) > sizeof(uint) && x > MAXUINT))
+ else if(b->top > 1 || (sizeof(mpdigit) > sizeof(uint32_t) && x > MAXUINT))
x = MAXUINT;
return x;
}
--- a/3rd/mp/mptouv.c
+++ b/3rd/mp/mptouv.c
@@ -1,13 +1,13 @@
#include "platform.h"
-#define VLDIGITS (int)(sizeof(vlong)/sizeof(mpdigit))
+#define VLDIGITS (int)(sizeof(int64_t)/sizeof(mpdigit))
/*
- * this code assumes that a vlong is an integral number of
+ * this code assumes that a int64_t is an integral number of
* mpdigits long.
*/
mpint*
-uvtomp(uvlong v, mpint *b)
+uvtomp(uint64_t v, mpint *b)
{
int s;
@@ -24,11 +24,11 @@
return mpnorm(b);
}
-uvlong
+uint64_t
mptouv(mpint *b)
{
- uvlong v;
- int s;
+ uint64_t v;
+ uint32_t s;
if(b->top == 0 || b->sign < 0)
return 0LL;
@@ -38,7 +38,7 @@
v = 0ULL;
for(s = 0; s < b->top; s++)
- v |= (uvlong)b->p[s]<<(s*sizeof(mpdigit)*8);
+ v |= (uint64_t)b->p[s]<<(s*sizeof(mpdigit)*8);
return v;
}
--- a/3rd/mp/mptov.c
+++ b/3rd/mp/mptov.c
@@ -1,16 +1,16 @@
#include "platform.h"
-#define VLDIGITS (int)(sizeof(vlong)/sizeof(mpdigit))
+#define VLDIGITS (int)(sizeof(int64_t)/sizeof(mpdigit))
/*
- * this code assumes that a vlong is an integral number of
+ * this code assumes that a int64_t is an integral number of
* mpdigits long.
*/
mpint*
-vtomp(vlong v, mpint *b)
+vtomp(int64_t v, mpint *b)
{
int s;
- uvlong uv;
+ uint64_t uv;
if(b == nil){
b = mpnew(VLDIGITS*Dbits);
@@ -26,11 +26,11 @@
return mpnorm(b);
}
-vlong
+int64_t
mptov(mpint *b)
{
- uvlong v;
- int s;
+ uint64_t v;
+ uint32_t s;
if(b->top == 0)
return 0LL;
@@ -37,14 +37,14 @@
if(b->top > VLDIGITS){
if(b->sign > 0)
- return (vlong)MAXVLONG;
+ return (int64_t)MAXVLONG;
else
- return (vlong)MINVLONG;
+ return (int64_t)MINVLONG;
}
v = 0ULL;
for(s = 0; s < b->top; s++)
- v |= (uvlong)b->p[s]<<(s*sizeof(mpdigit)*8);
+ v |= (uint64_t)b->p[s]<<(s*sizeof(mpdigit)*8);
if(b->sign > 0){
if(v > MAXVLONG)
@@ -53,8 +53,8 @@
if(v > MINVLONG)
v = MINVLONG;
else
- v = -(vlong)v;
+ v = -(int64_t)v;
}
- return (vlong)v;
+ return (int64_t)v;
}
--- a/3rd/mp/mpvecadd.c
+++ b/3rd/mp/mpvecadd.c
@@ -5,7 +5,7 @@
mpvecadd(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *sum)
{
int i;
- uint carry;
+ uint32_t carry;
mpdigit x, y;
carry = 0;
--- a/3rd/mp/u16.c
+++ b/3rd/mp/u16.c
@@ -24,11 +24,11 @@
}
int
-dec16(uchar *out, int lim, char *in, int n)
+dec16(uint8_t *out, int lim, char *in, int n)
{
int c, w = 0, i = 0;
- uchar *start = out;
- uchar *eout = out + lim;
+ uint8_t *start = out;
+ uint8_t *eout = out + lim;
while(n-- > 0){
c = dec16chr(*in++);
@@ -49,9 +49,9 @@
}
int
-enc16(char *out, int lim, uchar *in, int n)
+enc16(char *out, int lim, uint8_t *in, int n)
{
- uint c;
+ uint32_t c;
char *eout = out + lim;
char *start = out;
--- a/3rd/mp/u32.c
+++ /dev/null
@@ -1,143 +1,0 @@
-#include "platform.h"
-
-#define between(x,min,max) (((min-1-x) & (x-max-1))>>8)
-
-int
-enc32chr(int o)
-{
- int c;
-
- c = between(o, 0, 25) & ('A'+o);
- c |= between(o, 26, 31) & ('2'+(o-26));
- return c;
-}
-
-int
-dec32chr(int c)
-{
- int o;
-
- o = between(c, 'A', 'Z') & (1+(c-'A'));
- o |= between(c, 'a', 'z') & (1+(c-'a'));
- o |= between(c, '2', '7') & (1+26+(c-'2'));
- return o-1;
-}
-
-int
-dec32x(uchar *dest, int ndest, char *src, int nsrc, int (*chr)(int))
-{
- uchar *start;
- int i, j, u[8];
-
- if(ndest+1 < (5*nsrc+7)/8)
- return -1;
- start = dest;
- while(nsrc>=8){
- for(i=0; i<8; i++){
- j = chr(src[i]);
- if(j < 0)
- j = 0;
- u[i] = j;
- }
- *dest++ = (u[0]<<3) | (0x7 & (u[1]>>2));
- *dest++ = ((0x3 & u[1])<<6) | (u[2]<<1) | (0x1 & (u[3]>>4));
- *dest++ = ((0xf & u[3])<<4) | (0xf & (u[4]>>1));
- *dest++ = ((0x1 & u[4])<<7) | (u[5]<<2) | (0x3 & (u[6]>>3));
- *dest++ = ((0x7 & u[6])<<5) | u[7];
- src += 8;
- nsrc -= 8;
- }
- if(nsrc > 0){
- if(nsrc == 1 || nsrc == 3 || nsrc == 6)
- return -1;
- for(i=0; i<nsrc; i++){
- j = chr(src[i]);
- if(j < 0)
- j = 0;
- u[i] = j;
- }
- *dest++ = (u[0]<<3) | (0x7 & (u[1]>>2));
- if(nsrc == 2)
- goto out;
- *dest++ = ((0x3 & u[1])<<6) | (u[2]<<1) | (0x1 & (u[3]>>4));
- if(nsrc == 4)
- goto out;
- *dest++ = ((0xf & u[3])<<4) | (0xf & (u[4]>>1));
- if(nsrc == 5)
- goto out;
- *dest++ = ((0x1 & u[4])<<7) | (u[5]<<2) | (0x3 & (u[6]>>3));
- }
-out:
- return dest-start;
-}
-
-int
-enc32x(char *dest, int ndest, uchar *src, int nsrc, int (*chr)(int))
-{
- char *start;
- int j;
-
- if(ndest <= (8*nsrc+4)/5)
- return -1;
- start = dest;
- while(nsrc>=5){
- j = (0x1f & (src[0]>>3));
- *dest++ = chr(j);
- j = (0x1c & (src[0]<<2)) | (0x03 & (src[1]>>6));
- *dest++ = chr(j);
- j = (0x1f & (src[1]>>1));
- *dest++ = chr(j);
- j = (0x10 & (src[1]<<4)) | (0x0f & (src[2]>>4));
- *dest++ = chr(j);
- j = (0x1e & (src[2]<<1)) | (0x01 & (src[3]>>7));
- *dest++ = chr(j);
- j = (0x1f & (src[3]>>2));
- *dest++ = chr(j);
- j = (0x18 & (src[3]<<3)) | (0x07 & (src[4]>>5));
- *dest++ = chr(j);
- j = (0x1f & (src[4]));
- *dest++ = chr(j);
- src += 5;
- nsrc -= 5;
- }
- if(nsrc){
- j = (0x1f & (src[0]>>3));
- *dest++ = chr(j);
- j = (0x1c & (src[0]<<2));
- if(nsrc == 1)
- goto out;
- j |= (0x03 & (src[1]>>6));
- *dest++ = chr(j);
- j = (0x1f & (src[1]>>1));
- *dest++ = chr(j);
- j = (0x10 & (src[1]<<4));
- if(nsrc == 2)
- goto out;
- j |= (0x0f & (src[2]>>4));
- *dest++ = chr(j);
- j = (0x1e & (src[2]<<1));
- if(nsrc == 3)
- goto out;
- j |= (0x01 & (src[3]>>7));
- *dest++ = chr(j);
- j = (0x1f & (src[3]>>2));
- *dest++ = chr(j);
- j = (0x18 & (src[3]<<3));
-out:
- *dest++ = chr(j);
- }
- *dest = 0;
- return dest-start;
-}
-
-int
-enc32(char *dest, int ndest, uchar *src, int nsrc)
-{
- return enc32x(dest, ndest, src, nsrc, enc32chr);
-}
-
-int
-dec32(uchar *dest, int ndest, char *src, int nsrc)
-{
- return dec32x(dest, ndest, src, nsrc, dec32chr);
-}
--- a/3rd/mp/u64.c
+++ /dev/null
@@ -1,141 +1,0 @@
-#include "platform.h"
-
-#define between(x,min,max) (((min-1-x) & (x-max-1))>>8)
-
-int
-enc64chr(int o)
-{
- int c;
-
- c = between(o, 0, 25) & ('A'+o);
- c |= between(o, 26, 51) & ('a'+(o-26));
- c |= between(o, 52, 61) & ('0'+(o-52));
- c |= between(o, 62, 62) & ('+');
- c |= between(o, 63, 63) & ('/');
- return c;
-}
-
-int
-dec64chr(int c)
-{
- int o;
-
- o = between(c, 'A', 'Z') & (1+(c-'A'));
- o |= between(c, 'a', 'z') & (1+26+(c-'a'));
- o |= between(c, '0', '9') & (1+52+(c-'0'));
- o |= between(c, '+', '+') & (1+62);
- o |= between(c, '/', '/') & (1+63);
- return o-1;
-}
-
-int
-dec64x(uchar *out, int lim, char *in, int n, int (*chr)(int))
-{
- uint32_t b24;
- uchar *start = out;
- uchar *e = out + lim;
- int i, c;
-
- b24 = 0;
- i = 0;
- while(n-- > 0){
- c = chr(*in++);
- if(c < 0)
- continue;
- switch(i){
- case 0:
- b24 = c<<18;
- break;
- case 1:
- b24 |= c<<12;
- break;
- case 2:
- b24 |= c<<6;
- break;
- case 3:
- if(out + 3 > e)
- goto exhausted;
-
- b24 |= c;
- *out++ = b24>>16;
- *out++ = b24>>8;
- *out++ = b24;
- i = 0;
- continue;
- }
- i++;
- }
- switch(i){
- case 2:
- if(out + 1 > e)
- goto exhausted;
- *out++ = b24>>16;
- break;
- case 3:
- if(out + 2 > e)
- goto exhausted;
- *out++ = b24>>16;
- *out++ = b24>>8;
- break;
- }
-exhausted:
- return out - start;
-}
-
-int
-enc64x(char *out, int lim, uchar *in, int n, int (*chr)(int))
-{
- int i;
- uint32_t b24;
- char *start = out;
- char *e = out + lim;
-
- for(i = n/3; i > 0; i--){
- b24 = *in++<<16;
- b24 |= *in++<<8;
- b24 |= *in++;
- if(out + 4 >= e)
- goto exhausted;
- *out++ = chr(b24>>18);
- *out++ = chr((b24>>12)&0x3f);
- *out++ = chr((b24>>6)&0x3f);
- *out++ = chr(b24&0x3f);
- }
-
- switch(n%3){
- case 2:
- b24 = *in++<<16;
- b24 |= *in<<8;
- if(out + 4 >= e)
- goto exhausted;
- *out++ = chr(b24>>18);
- *out++ = chr((b24>>12)&0x3f);
- *out++ = chr((b24>>6)&0x3f);
- *out++ = '=';
- break;
- case 1:
- b24 = *in<<16;
- if(out + 4 >= e)
- goto exhausted;
- *out++ = chr(b24>>18);
- *out++ = chr((b24>>12)&0x3f);
- *out++ = '=';
- *out++ = '=';
- break;
- }
-exhausted:
- *out = 0;
- return out - start;
-}
-
-int
-enc64(char *out, int lim, uchar *in, int n)
-{
- return enc64x(out, lim, in, n, enc64chr);
-}
-
-int
-dec64(uchar *out, int lim, char *in, int n)
-{
- return dec64x(out, lim, in, n, dec64chr);
-}
--- a/3rd/utf/rune.c
+++ b/3rd/utf/rune.c
@@ -37,7 +37,7 @@
* one character sequence
* 00000-0007F => T1
*/
- c = *(uchar*)str;
+ c = *(uint8_t*)str;
if(c < Tx) {
*rune = c;
return 1;
@@ -47,7 +47,7 @@
* two character sequence
* 0080-07FF => T2 Tx
*/
- c1 = *(uchar*)(str+1) ^ Tx;
+ c1 = *(uint8_t*)(str+1) ^ Tx;
if(c1 & Testx)
goto bad;
if(c < T3) {
@@ -64,7 +64,7 @@
* three character sequence
* 0800-FFFF => T3 Tx Tx
*/
- c2 = *(uchar*)(str+2) ^ Tx;
+ c2 = *(uint8_t*)(str+2) ^ Tx;
if(c2 & Testx)
goto bad;
if(c < T4) {
@@ -80,7 +80,7 @@
* 10000-10FFFF => T4 Tx Tx Tx
*/
if(UTFmax >= 4) {
- c3 = *(uchar*)(str+3) ^ Tx;
+ c3 = *(uint8_t*)(str+3) ^ Tx;
if(c3 & Testx)
goto bad;
if(c < T5) {
@@ -188,7 +188,7 @@
if(n <= 0)
return 0;
- c = *(uchar*)str;
+ c = *(uint8_t*)str;
if(c < Tx)
return 1;
if(c < T3)
--- a/3rd/utf/runeistypedata
+++ b/3rd/utf/runeistypedata
@@ -1,5 +1,5 @@
static
-uchar _mergeddata[11769] =
+uint8_t _mergeddata[11769] =
{
0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
--- a/3rd/utf/utfnlen.c
+++ b/3rd/utf/utfnlen.c
@@ -10,7 +10,7 @@
es = s + m;
for(n = 0; s < es; n++) {
- c = *(uchar*)s;
+ c = *(uint8_t*)s;
if(c < Runeself){
if(c == '\0')
break;
--- a/builtins.c
+++ b/builtins.c
@@ -28,7 +28,7 @@
value_t lst, first = FL(Nil);
value_t *pcdr = &first;
cons_t *c;
- int i = 0;
+ uint32_t i = 0;
while(1){
lst = args[i++];
@@ -285,14 +285,12 @@
BUILTIN("vector-alloc", vector_alloc)
{
- int i, k, a;
+ uint32_t i, k, a;
value_t f, v;
if(nargs < 1)
argcount(nargs, 1);
i = toulong(args[0]);
- if(i < 0)
- lerrorf(FL(ArgError), "invalid size: %d", i);
- v = alloc_vector((unsigned)i, 0);
+ v = alloc_vector(i, 0);
a = 1;
for(k = 0; k < i; k++){
f = a < nargs ? args[a] : FL(unspecified);
--- a/cvalues.c
+++ b/cvalues.c
@@ -224,7 +224,7 @@
ctype n; \
USED(type); \
if(isfixnum(arg)) \
- n = numval(arg); \
+ n = (ctype)numval(arg); \
else if(iscprim(arg)){ \
cprim_t *cp = (cprim_t*)ptr(arg); \
void *p = cp_data(cp); \
@@ -290,7 +290,11 @@
#endif
num_ctor(float, float, T_FLOAT)
num_ctor(double, double, T_DOUBLE)
+#if defined(__plan9__)
num_ctor(rune, uint32_t, T_UINT32)
+#else
+num_ctor(rune, int32_t, T_INT32)
+#endif
static int
cvalue_mpint_init(fltype_t *type, value_t arg, void *dest)
@@ -354,7 +358,7 @@
toulong(value_t n)
{
if(isfixnum(n))
- return numval(n);
+ return (size_t)numval(n);
if(iscprim(n)){
cprim_t *cp = (cprim_t*)ptr(n);
return conv_to_ulong(cp_data(cp), cp_numtype(cp));
@@ -503,7 +507,6 @@
{
size_t elsize, cnt, sz;
value_t arg;
- int i;
if(nargs < 1)
argcount(nargs, 1);
@@ -515,6 +518,7 @@
value_t cv = cvalue(type, sz);
char *dest = cv_data(ptr(cv));
+ uint32_t i;
FOR_ARGS(i, 1, arg, args){
cvalue_init(type->eltype, arg, dest);
dest += elsize;
@@ -1487,10 +1491,10 @@
BUILTIN("logand", logand)
{
value_t v, e;
- int i;
if(nargs == 0)
return fixnum(-1);
v = args[0];
+ uint32_t i;
FOR_ARGS(i, 1, e, args){
if(bothfixnums(v, e))
v = v & e;
@@ -1503,10 +1507,10 @@
BUILTIN("logior", logior)
{
value_t v, e;
- int i;
if(nargs == 0)
return fixnum(0);
v = args[0];
+ uint32_t i;
FOR_ARGS(i, 1, e, args){
if(bothfixnums(v, e))
v = v | e;
@@ -1519,10 +1523,10 @@
BUILTIN("logxor", logxor)
{
value_t v, e;
- int i;
if(nargs == 0)
return fixnum(0);
v = args[0];
+ uint32_t i;
FOR_ARGS(i, 1, e, args){
if(bothfixnums(v, e))
v = fixnum(numval(v) ^ numval(e));
--- a/equal.c
+++ b/equal.c
@@ -328,10 +328,10 @@
*/
#ifdef BITS64
-#define MIX(a, b) int64hash((int64_t)(a) ^ (int64_t)(b));
+#define MIX(a, b) int64hash((uint64_t)(a) ^ (uint64_t)(b));
#define doublehash(a) int64hash(a)
#else
-#define MIX(a, b) int64to32hash(((int64_t)(a))<<32 | ((int64_t)(b)))
+#define MIX(a, b) int64to32hash(((uint64_t)(a))<<32 | ((uint64_t)(b)))
#define doublehash(a) int64to32hash(a)
#endif
--- a/flisp.c
+++ b/flisp.c
@@ -30,7 +30,7 @@
int
isbuiltin(value_t x)
{
- int i = uintval(x);
+ uint32_t i = uintval(x);
return tag(x) == TAG_FUNCTION && i < nelem(builtins) && builtins[i].name != nil;
}
@@ -281,7 +281,7 @@
}
void *
-alloc_words(int n)
+alloc_words(uint32_t n)
{
value_t *first;
@@ -899,7 +899,7 @@
#pragma GCC diagnostic ignored "-Wpedantic"
#define OP(x) op_##x:
#define NEXT_OP goto *((uint8_t*)&&op_OP_LOADA0 + ops[op = *ip++])
- static const int ops[] = {
+ static const intptr_t ops[] = {
[OP_LOADA0] = (uint8_t*)&&op_OP_LOADA0 - (uint8_t*)&&op_OP_LOADA0,
[OP_LOADA1] = (uint8_t*)&&op_OP_LOADA1 - (uint8_t*)&&op_OP_LOADA0,
[OP_LOADV] = (uint8_t*)&&op_OP_LOADV - (uint8_t*)&&op_OP_LOADA0,
@@ -1901,7 +1901,7 @@
uint32_t bp = top-5-sz;
value_t func = FL(stack)[bp];
const uint8_t *ip0 = cv_data((cvalue_t*)ptr(fn_bcode(func)));
- value_t ip = ip1 - ip0 - 1; /* -1: ip1 is *after* the one that was being executed */
+ intptr_t ip = ip1 - ip0 - 1; /* -1: ip1 is *after* the one that was being executed */
value_t v = alloc_vector(sz+1, 0);
vector_elt(v, 0) = fixnum(ip);
vector_elt(v, 1) = func;
@@ -2032,7 +2032,7 @@
BUILTIN("append", append)
{
value_t first = FL(Nil), lst, lastcons = FL(Nil);
- int i;
+ uint32_t i;
if(nargs == 0)
return FL(Nil);
fl_gc_handle(&first);
@@ -2108,7 +2108,7 @@
}
POPN(2);
}else{
- int i;
+ size_t i;
while(FL(sp)+nargs+1 > FL(nstack))
grow_stack();
PUSH(FL(stack)[argSP]);
@@ -2292,7 +2292,7 @@
fl_load_system_image(value_t sys_image_iostream)
{
value_t e;
- int saveSP;
+ uint32_t saveSP;
symbol_t *sym;
PUSH(sys_image_iostream);
--- a/flisp.h
+++ b/flisp.h
@@ -66,7 +66,7 @@
int nargs;
};
-typedef value_t (*builtin_t)(value_t*, int);
+typedef value_t (*builtin_t)(value_t*, uint32_t);
#ifdef BITS64
#define T_FIXNUM T_INT64
@@ -201,7 +201,7 @@
/* conses */
value_t mk_cons(void);
-void *alloc_words(int n);
+void *alloc_words(uint32_t n);
char *uint2str(char *dest, size_t len, uint64_t num, uint32_t base);
@@ -298,7 +298,7 @@
}function_t;
#define CPRIM_NWORDS 2
-#define cv_class(cv) ((fltype_t*)(((uintptr_t)((cvalue_t*)cv)->type)&~3))
+#define cv_class(cv) ((fltype_t*)(((uintptr_t)((cvalue_t*)cv)->type)&~(uintptr_t)3))
#define cv_len(cv) (((cvalue_t*)(cv))->len)
#define cv_type(cv) (cv_class(cv)->type)
#define cv_data(cv) (((cvalue_t*)(cv))->data)
@@ -315,7 +315,7 @@
#define cptr(v) (iscprim(v) ? cp_data(ptr(v)) : cv_data(ptr(v)))
#define BUILTIN(lname, cname) \
- value_t fn_builtin_##cname(value_t *args, int nargs)
+ value_t fn_builtin_##cname(value_t *args, uint32_t nargs)
#define BUILTIN_FN(l, c) extern BUILTIN(l, c);
#include "builtin_fns.h"
--- a/flmain.c
+++ b/flmain.c
@@ -41,7 +41,7 @@
fl_init(512*1024);
- value_t f = cvalue(FL(iostreamtype), sizeof(ios_t));
+ value_t f = cvalue(FL(iostreamtype), (int)sizeof(ios_t));
ios_t *s = value2c(ios_t*, f);
ios_static_buffer(s, boot, bootsz);
--- a/iostream.c
+++ b/iostream.c
@@ -78,7 +78,8 @@
{
if(nargs < 1)
argcount(nargs, 1);
- int i, r = 0, w = 0, c = 0, t = 0, a = 0;
+ size_t i;
+ int r = 0, w = 0, c = 0, t = 0, a = 0;
for(i = 1; i < nargs; i++){
if(args[i] == FL(rdsym))
r = 1;
@@ -317,7 +318,7 @@
return FL(t);
}
-static char
+static uint8_t
get_delim_arg(value_t arg)
{
size_t uldelim = toulong(arg);
@@ -326,7 +327,7 @@
if((iscprim(arg) && cp_class(ptr(arg)) == FL(runetype)) || uldelim > 0xff)
lerrorf(FL(ArgError), "delimiter out of range");
}
- return (char)uldelim;
+ return (uint8_t)uldelim;
}
BUILTIN("io-readuntil", io_readuntil)
@@ -338,7 +339,7 @@
ios_t dest;
ios_mem(&dest, 0);
ios_setbuf(&dest, data, 80, 0);
- char delim = get_delim_arg(args[1]);
+ uint8_t delim = get_delim_arg(args[1]);
ios_t *src = toiostream(args[0]);
size_t n = ios_copyuntil(&dest, src, delim);
cv->len = n;
@@ -360,7 +361,7 @@
argcount(nargs, 3);
ios_t *dest = toiostream(args[0]);
ios_t *src = toiostream(args[1]);
- char delim = get_delim_arg(args[2]);
+ uint8_t delim = get_delim_arg(args[2]);
return size_wrap(ios_copyuntil(dest, src, delim));
}
--- a/meson.build
+++ b/meson.build
@@ -52,8 +52,6 @@
'3rd/mp/mpvectscmp.c',
'3rd/mp/strtomp.c',
'3rd/mp/u16.c',
- '3rd/mp/u32.c',
- '3rd/mp/u64.c',
'3rd/spooky.c',
'3rd/utf/rune.c',
'3rd/utf/runeistype.c',
--- a/operators.c
+++ b/operators.c
@@ -73,17 +73,17 @@
conv_to_##name(void *data, numerictype_t tag) \
{ \
switch(tag){ \
- case T_INT8: return *(int8_t*)data; \
- case T_UINT8: return *(uint8_t*)data; \
- case T_INT16: return *(int16_t*)data; \
- case T_UINT16: return *(uint16_t*)data; \
- case T_INT32: return *(int32_t*)data; \
- case T_UINT32: return *(uint32_t*)data; \
- case T_INT64: return *(int64_t*)data; \
- case T_UINT64: return *(uint64_t*)data; \
- case T_MPINT: return mptov(*(mpint**)data); \
- case T_FLOAT: return *(float*)data; \
- case T_DOUBLE: return *(double*)data; \
+ case T_INT8: return (ctype)*(int8_t*)data; \
+ case T_UINT8: return (ctype)*(uint8_t*)data; \
+ case T_INT16: return (ctype)*(int16_t*)data; \
+ case T_UINT16: return (ctype)*(uint16_t*)data; \
+ case T_INT32: return (ctype)*(int32_t*)data; \
+ case T_UINT32: return (ctype)*(uint32_t*)data; \
+ case T_INT64: return (ctype)*(int64_t*)data; \
+ case T_UINT64: return (ctype)*(uint64_t*)data; \
+ case T_MPINT: return (ctype)mptov(*(mpint**)data); \
+ case T_FLOAT: return (ctype)*(float*)data; \
+ case T_DOUBLE: return (ctype)*(double*)data; \
} \
return 0; \
}
--- a/posix/mp.h
+++ b/posix/mp.h
@@ -1,12 +1,6 @@
#pragma once
typedef uint32_t mpdigit;
-typedef uint8_t uchar;
-typedef uint32_t u32int;
-typedef unsigned int uint;
-typedef int64_t vlong;
-typedef uint64_t uvlong;
-typedef uint64_t u64int;
typedef union FPdbleword FPdbleword;
union FPdbleword
@@ -14,11 +8,11 @@
double x;
struct {
#if BYTE_ORDER == LITTLE_ENDIAN
- uint lo;
- uint hi;
+ uint32_t lo;
+ uint32_t hi;
#else
- uint hi;
- uint lo;
+ uint32_t hi;
+ uint32_t lo;
#endif
};
};
@@ -29,7 +23,7 @@
#define DIGITS(x) ((Dbits - 1 + (x))/Dbits)
// for converting between int's and mpint's
-#define MAXUINT ((uint)-1)
+#define MAXUINT ((uint32_t)-1)
#define MAXINT (MAXUINT>>1)
#define MININT (MAXINT+1)
@@ -38,20 +32,8 @@
#define MAXVLONG (MAXUVLONG>>1)
#define MINVLONG (MAXVLONG+1ULL)
-extern int dec64(uchar*, int, char*, int);
-extern int enc64(char*, int, uchar*, int);
-extern int dec64x(uchar*, int, char*, int, int (*)(int));
-extern int enc64x(char*, int, uchar*, int, int (*)(int));
-extern int dec32(uchar*, int, char*, int);
-extern int enc32(char*, int, uchar*, int);
-extern int dec32x(uchar*, int, char*, int, int (*)(int));
-extern int enc32x(char*, int, uchar*, int, int (*)(int));
-extern int dec16(uchar*, int, char*, int);
-extern int enc16(char*, int, uchar*, int);
-extern int dec64chr(int);
-extern int enc64chr(int);
-extern int dec32chr(int);
-extern int enc32chr(int);
+extern int dec16(uint8_t*, int, char*, int);
+extern int enc16(char*, int, uint8_t*, int);
extern uint32_t dec16chr(int);
extern int enc16chr(int);
@@ -65,8 +47,8 @@
struct mpint
{
int sign; /* +1 or -1 */
- int size; /* allocated digits */
- int top; /* significant digits */
+ uint32_t size; /* allocated digits */
+ uint32_t top; /* significant digits */
mpdigit *p;
char flags;
};
@@ -86,33 +68,33 @@
void mpsetminbits(int n); /* newly created mpint's get at least n bits */
mpint* mpnew(int n); /* create a new mpint with at least n bits */
void mpfree(mpint *b);
-void mpbits(mpint *b, int n); /* ensure that b has at least n bits */
+void mpbits(mpint *b, uint32_t n); /* ensure that b has at least n bits */
mpint* mpnorm(mpint *b); /* dump leading zeros */
mpint* mpcopy(mpint *b);
void mpassign(mpint *old, mpint *new);
/* random bits */
-mpint* mprand(int bits, void (*gen)(uchar*, int), mpint *b);
+mpint* mprand(int bits, void (*gen)(uint8_t*, int), mpint *b);
/* return uniform random [0..n-1] */
-mpint* mpnrand(mpint *n, void (*gen)(uchar*, int), mpint *b);
+mpint* mpnrand(mpint *n, void (*gen)(uint8_t*, int), mpint *b);
/* conversion */
mpint* strtomp(const char*, char**, int, mpint*); /* ascii */
char* mptoa(mpint*, int, char*, int);
-mpint* letomp(uchar*, uint, mpint*); /* byte array, little-endian */
-int mptole(mpint*, uchar*, uint, uchar**);
-void mptolel(mpint *b, uchar *p, int n);
-mpint* betomp(uchar*, uint, mpint*); /* byte array, big-endian */
-int mptobe(mpint*, uchar*, uint, uchar**);
-void mptober(mpint *b, uchar *p, int n);
-uint mptoui(mpint*); /* unsigned int */
-mpint* uitomp(uint, mpint*);
+mpint* letomp(uint8_t*, uint32_t, mpint*); /* byte array, little-endian */
+int mptole(mpint*, uint8_t*, uint32_t, uint8_t**);
+void mptolel(mpint *b, uint8_t *p, int n);
+mpint* betomp(uint8_t*, uint32_t, mpint*); /* byte array, big-endian */
+int mptobe(mpint*, uint8_t*, uint32_t, uint8_t**);
+void mptober(mpint *b, uint8_t *p, int n);
+uint32_t mptoui(mpint*); /* unsigned int */
+mpint* uitomp(uint32_t, mpint*);
int mptoi(mpint*); /* int */
mpint* itomp(int, mpint*);
-uvlong mptouv(mpint*); /* unsigned vlong */
-mpint* uvtomp(uvlong, mpint*);
-vlong mptov(mpint*); /* vlong */
-mpint* vtomp(vlong, mpint*);
+uint64_t mptouv(mpint*); /* unsigned int64_t */
+mpint* uvtomp(uint64_t, mpint*);
+int64_t mptov(mpint*); /* int64_t */
+mpint* vtomp(int64_t, mpint*);
double mptod(mpint*); /* double */
mpint* dtomp(double, mpint*);
@@ -135,8 +117,6 @@
void mpor(mpint *b1, mpint *b2, mpint *res);
void mpnot(mpint *b, mpint *res);
void mpxor(mpint *b1, mpint *b2, mpint *res);
-void mptrunc(mpint *b, int n, mpint *res);
-void mpxtend(mpint *b, int n, mpint *res);
void mpasr(mpint *b, int shift, mpint *res);
/* modular arithmetic, time invariant when 0≤b1≤m-1 and 0≤b2≤m-1 */
@@ -160,8 +140,8 @@
void mpinvert(mpint *b, mpint *m, mpint *res);
/* bit counting */
-int mpsignif(mpint*); /* number of sigificant bits in mantissa */
-int mplowbits0(mpint*); /* k, where n = 2**k * q for odd q */
+uint32_t mpsignif(mpint*); /* number of sigificant bits in mantissa */
+uint32_t mplowbits0(mpint*); /* k, where n = 2**k * q for odd q */
/* well known constants */
extern mpint *mpzero, *mpone, *mptwo;
--- a/posix/platform.h
+++ b/posix/platform.h
@@ -25,8 +25,8 @@
#include <wctype.h>
#include <wchar.h>
-#define LLT_ALLOC(n) malloc(n)
-#define LLT_REALLOC(p, n) realloc((p), (n))
+#define LLT_ALLOC(n) malloc((size_t)(n))
+#define LLT_REALLOC(p, n) realloc((p), (size_t)(n))
#define LLT_FREE(x) free(x)
#define LLT_STRDUP(s) strdup(s)
--- a/posix/utf.h
+++ b/posix/utf.h
@@ -7,7 +7,7 @@
UTFmax = 4,
};
-typedef uint32_t Rune;
+typedef int32_t Rune;
int chartorune(Rune *rune, const char *str);
int runetochar(char *str, const Rune *rune);
--- a/string.c
+++ b/string.c
@@ -120,11 +120,11 @@
value_t arg, buf = fn_builtin_buffer(nil, 0);
fl_gc_handle(&buf);
ios_t *s = value2c(ios_t*, buf);
- int i;
value_t oldpr = symbol_value(FL(printreadablysym));
value_t oldpp = symbol_value(FL(printprettysym));
set(FL(printreadablysym), FL(f));
set(FL(printprettysym), FL(f));
+ uint32_t i;
FOR_ARGS(i, 0, arg, args){
USED(arg);
fl_print(s, args[i]);
--- a/table.c
+++ b/table.c
@@ -100,7 +100,7 @@
nt = cvalue(FL(tabletype), 2*sizeof(void*));
htable_t *h = (htable_t*)cv_data((cvalue_t*)ptr(nt));
htable_new(h, cnt/2);
- int i;
+ size_t i;
value_t k = FL(Nil), arg;
FOR_ARGS(i, 0, arg, args){
if(i & 1)