ref: bd6157cf317c95546a015c2f764d096b13d4491a
parent: 33ccdc7f42803457a2bbb11eeb633f9dbafd6e9f
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Wed Feb 23 15:31:27 EST 2022
stop using ms extensions (does not work on openbsd with clang)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
DESTDIR?=
PREFIX?=/usr/local
CFLAGS?=-g -O2
-CFLAGS+=-Iinclude -Wall -Wno-missing-braces -Wno-parentheses -Wno-incompatible-pointer-types -fms-extensions
+CFLAGS+=-Iinclude -Wall -Wno-missing-braces -Wno-parentheses -Wno-incompatible-pointer-types
OFILES=\
libc/dofmt.o\
--- a/pc.y
+++ b/pc.y
@@ -13,9 +13,9 @@
typedef struct Num Num;
struct Num {
- mpint;
+ mpint i;
int b;
- Ref;
+ Ref r;
};
enum { STRONG = 0x100 };
@@ -55,8 +55,8 @@
Num *r;
r = emalloc(sizeof(Num));
- r->ref = 1;
- r->p = emalloc(sizeof(mpdigit));
+ r->r.ref = 1;
+ r->i.p = emalloc(sizeof(mpdigit));
mpassign(mpzero, r);
return r;
}
@@ -64,7 +64,7 @@
Num *
numincref(Num *n)
{
- incref(n);
+ incref(&n->r);
return n;
}
@@ -72,8 +72,8 @@
numdecref(Num *n)
{
if(n == nil) return nil;
- if(decref(n) == 0){
- free(n->p);
+ if(decref(&n->r) == 0){
+ free(n->i.p);
free(n);
return nil;
}
@@ -86,7 +86,7 @@
Num *m;
if(n == nil) return nil;
- if(n->ref == 1) return n;
+ if(n->r.ref == 1) return n;
m = numalloc();
mpassign(n, m);
m->b = n->b;
@@ -185,7 +185,7 @@
case 2: st = 1; sp = 2; break;
default: st = 0; sp = 0;
}
- if(n->sign < 0)
+ if(n->i.sign < 0)
sp++;
if(st != 0)
printhead(mpsignif(n), st, sp, q);
@@ -413,7 +413,7 @@
| '-' expr %prec unary { $$ = nummod($2); if($$ != nil) mpsub(mpzero, $$, $$); }
| '~' expr %prec unary { $$ = nummod($2); if($$ != nil) mpnot($$, $$); }
| '!' expr %prec unary { $$ = nummod($2); if($$ != nil) {itomp(mpcmp($$, mpzero) == 0, $$); $$->b = 0; } }
- | '$' expr { $$ = nummod($2); if($$ != nil) {if($2->sign > 0) mpxtend($2, mpsignif($2), $$); else mpassign($2, $$); } }
+ | '$' expr { $$ = nummod($2); if($$ != nil) {if($2->i.sign > 0) mpxtend($2, mpsignif($2), $$); else mpassign($2, $$); } }
| expr '?' expr ':' expr %prec '?' {
if($1 == nil || mpcmp($1, mpzero) != 0){
$$ = $3;
@@ -513,7 +513,7 @@
r = mpnew(0);
mpdiv(a, b, a, r);
if(!divmode && r->sign < 0){
- if(b->sign > 0)
+ if(b->i.sign > 0)
mpsub(a, mpone, a);
else
mpadd(a, mpone, a);
@@ -527,8 +527,8 @@
return error("division by zero");
}
mpdiv(a, b, nil, a);
- if(!divmode && a->sign < 0){
- if(b->sign > 0)
+ if(!divmode && a->i.sign < 0){
+ if(b->i.sign > 0)
mpadd(a, b, a);
else
mpsub(a, b, a);
@@ -547,7 +547,7 @@
break;
case LOLSH:
if(mpsignif(b) >= 31){
- if(b->sign > 0)
+ if(b->i.sign > 0)
error("left shift overflow");
itomp(-(mpcmp(a, mpzero) < 0), a);
}else
@@ -555,7 +555,7 @@
break;
case LORSH:
if(mpsignif(b) >= 31){
- if(b->sign < 0)
+ if(b->i.sign < 0)
error("right shift overflow");
itomp(-(mpcmp(a, mpzero) < 0), a);
}else
@@ -749,7 +749,7 @@
Num *r;
r = nummod(a[0]);
- r->sign = 1;
+ r->i.sign = 1;
return r;
}
@@ -772,7 +772,7 @@
mpleft(r, 1, r);
i = mpcmp(r, a[1]);
mpright(r, 1, r);
- if(i > 0 || i == 0 && (a[0]->sign < 0) ^ (q->top != 0 && (q->p[0] & 1) != 0))
+ if(i > 0 || i == 0 && (a[0]->i.sign < 0) ^ (q->top != 0 && (q->p[0] & 1) != 0))
mpsub(r, a[1], r);
mpsub(a[0], r, a[0]);
mpfree(q);
@@ -886,7 +886,7 @@
Num *
fnubits(int unused, Num **a)
{
- if(a[0]->sign < 0){
+ if(a[0]->i.sign < 0){
numdecref(a[0]);
return error("invalid argument");
}
@@ -900,7 +900,7 @@
fnsbits(int unused, Num **a)
{
a[0] = nummod(a[0]);
- if(a[0]->sign < 0) mpadd(a[0], mpone, a[0]);
+ if(a[0]->i.sign < 0) mpadd(a[0], mpone, a[0]);
itomp(mpsignif(a[0]) + 1, a[0]);
a[0]->b = 0;
return a[0];
@@ -913,13 +913,13 @@
mpdigit d;
a[0] = nummod(a[0]);
- if(a[0]->sign < 0){
+ if(a[0]->i.sign < 0){
numdecref(a[0]);
return error("invalid argument");
}
n = 0;
- for(i = 0; i < a[0]->top; i++){
- d = a[0]->p[i];
+ for(i = 0; i < a[0]->i.top; i++){
+ d = a[0]->i.p[i];
for(; d != 0; d &= d-1)
n++;
}
@@ -979,21 +979,21 @@
}
a[0] = nummod(a[0]);
mptrunc(a[0], n, a[0]);
- for(i = 0; i < a[0]->top; i++){
- v = a[0]->p[i];
+ for(i = 0; i < a[0]->i.top; i++){
+ v = a[0]->i.p[i];
m = -1;
for(j = sizeof(mpdigit) * 8; j >>= 1; ){
m ^= m << j;
v = v >> j & m | v << j & ~m;
}
- a[0]->p[i] = v;
+ a[0]->i.p[i] = v;
}
- for(i = 0; i < a[0]->top / 2; i++){
- v = a[0]->p[i];
- a[0]->p[i] = a[0]->p[a[0]->top - 1 - i];
- a[0]->p[a[0]->top - 1 - i] = v;
+ for(i = 0; i < a[0]->i.top / 2; i++){
+ v = a[0]->i.p[i];
+ a[0]->i.p[i] = a[0]->i.p[a[0]->i.top - 1 - i];
+ a[0]->i.p[a[0]->i.top - 1 - i] = v;
}
- mpleft(a[0], n - a[0]->top * sizeof(mpdigit) * 8, a[0]);
+ mpleft(a[0], n - a[0]->i.top * sizeof(mpdigit) * 8, a[0]);
numdecref(a[1]);
return a[0];
}
@@ -1016,7 +1016,7 @@
for(i = 0; i < n; i += 2){
if(toint(a[i+1], &w, 1)) goto fail;
mpleft(r, w, r);
- if(a[i]->sign < 0 || mpsignif(a[i]) > w){
+ if(a[i]->i.sign < 0 || mpsignif(a[i]) > w){
a[i] = nummod(a[i]);
mptrunc(a[i], w, a[i]);
}