Skip to content

Commit 5cb4ee7

Browse files
committed
Remove some decl-init split
1 parent c82d61a commit 5cb4ee7

1 file changed

Lines changed: 55 additions & 75 deletions

File tree

jsrc/conversions.cpp

Lines changed: 55 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,10 @@ convert(J jt, array w, void *yv, Transform t) -> bool {
5555

5656
static B
5757
jtBfromD(J jt, A w, void *yv, D fuzz) {
58-
B *x;
59-
D p, *v;
60-
I n;
61-
n = AN(w);
62-
v = DAV(w);
63-
x = (B *)yv;
64-
DQ(n, p = *v++; if (p < -2 || 2 < p) return 0; // handle infinities
58+
auto n = AN(w);
59+
auto v = DAV(w);
60+
auto x = (B *)yv;
61+
DQ(n, auto p = *v++; if (p < -2 || 2 < p) return 0; // handle infinities
6562
I val = 2;
6663
val = (p == 0) ? 0 : val;
6764
val = FIEQ(p, 1.0, fuzz) ? 1 : val;
@@ -72,15 +69,13 @@ jtBfromD(J jt, A w, void *yv, D fuzz) {
7269

7370
static B
7471
jtIfromD(J jt, A w, void *yv, D fuzz) {
75-
D p, q, *v;
76-
I i, n, *x;
77-
n = AN(w);
78-
v = DAV(w);
79-
x = (I *)yv;
80-
for (i = 0; i < n; ++i) {
81-
p = v[i];
82-
q = jround(p);
83-
I rq = (I)q;
72+
auto n = AN(w);
73+
auto v = DAV(w);
74+
auto x = (I *)yv;
75+
for (int64_t i = 0; i < n; ++i) {
76+
auto const p = v[i];
77+
auto const q = jround(p);
78+
I rq = (I)q;
8479
if (!(p == q || FIEQ(p, q, fuzz))) return 0; // must equal int, possibly out of range
8580
// out-of-range values don't convert, handle separately
8681
if (p < (D)IMIN) {
@@ -98,21 +93,18 @@ jtIfromD(J jt, A w, void *yv, D fuzz) {
9893

9994
static B
10095
jtDfromZ(J jt, A w, void *yv, D fuzz) {
101-
D d, *x;
102-
I n;
103-
Z *v;
104-
n = AN(w);
105-
v = ZAV(w);
106-
x = (D *)yv;
96+
auto const n = AN(w);
97+
auto const *v = ZAV(w);
98+
auto x = (D *)yv;
10799
if (fuzz)
108100
DQ(
109-
n, d = ABS(v->im); if (d != inf && d <= fuzz * ABS(v->re)) {
101+
n, auto d = std::abs(v->im); if (d != inf && d <= fuzz * std::abs(v->re)) {
110102
*x++ = v->re;
111103
v++;
112104
} else return 0;)
113105
else
114106
DQ(
115-
n, d = v->im; if (!d) {
107+
n, if (!v->im) {
116108
*x++ = v->re;
117109
v++;
118110
} else return 0;);
@@ -161,9 +153,7 @@ jtXfromI(J jt, A w, void *yv) {
161153
static X
162154
jtxd1(J jt, D p, I mode) {
163155
PROLOG(0052);
164-
A t;
165-
D d, e = jttfloor(jt, p), q, r;
166-
I m, *u;
156+
D e = jttfloor(jt, p);
167157
switch (mode) {
168158
case XMFLR: p = e; break;
169159
case XMCEIL: p = ceil(p); break;
@@ -176,15 +166,16 @@ jtxd1(J jt, D p, I mode) {
176166
}
177167
if (p == inf) return jtvci(jt, XPINF);
178168
if (p == -inf) return jtvci(jt, XNINF);
169+
A t;
179170
GAT0(t, INT, 30, 1);
180-
u = AV(t);
181-
m = 0;
182-
d = ABS(p);
171+
auto u = AV(t);
172+
int64_t m = 0;
173+
auto d = std::abs(p);
183174
while (0 < d) {
184-
q = floor(d / XBASE);
185-
r = d - q * XBASE;
186-
u[m++] = (I)r;
187-
d = q;
175+
auto const q = floor(d / XBASE);
176+
auto const r = d - q * XBASE;
177+
u[m++] = (I)r;
178+
d = q;
188179
if (m == AN(t)) {
189180
RZ(t = jtext(jt, 0, t));
190181
u = AV(t);
@@ -207,13 +198,9 @@ jtXfromD(J jt, A w, void *yv, I mode) {
207198

208199
static B
209200
jtBfromX(J jt, A w, void *yv) {
210-
A q;
211-
B *x;
212-
I e;
213-
X *v;
214-
v = XAV(w);
215-
x = (B *)yv;
216-
DO(AN(w), q = v[i]; e = AV(q)[0]; if ((AN(q) ^ 1) | (e & -2)) return 0; x[i] = (B)e;);
201+
auto v = XAV(w);
202+
auto x = (B *)yv;
203+
DO(AN(w), A q = v[i]; I e = AV(q)[0]; if ((AN(q) ^ 1) | (e & -2)) return 0; x[i] = (B)e;);
217204
return 1;
218205
}
219206

@@ -227,15 +214,14 @@ value_from_X(X p) -> T {
227214

228215
static B
229216
jtIfromX(J jt, A w, void *yv) {
230-
I a, i, m, n, *u, *x;
231-
X c, p, q, *v;
232-
v = XAV(w);
233-
x = (I *)yv;
234-
n = AN(w);
217+
auto v = XAV(w);
218+
auto x = (I *)yv;
219+
auto n = AN(w);
220+
X p, q;
235221
if (!(p = jtxc(jt, IMAX))) return 0;
236222
if (!(q = jtxminus(jt, jtnegate(jt, p), jtxc(jt, 1L)))) return 0;
237-
for (i = 0; i < n; ++i) {
238-
c = v[i];
223+
for (int64_t i = 0; i < n; ++i) {
224+
auto c = v[i];
239225
if (!(1 != jtxcompare(jt, q, c) && 1 != jtxcompare(jt, c, p))) return 0;
240226
x[i] = value_from_X<int64_t>(c);
241227
}
@@ -359,10 +345,8 @@ jtDfromQ(J jt, A w, void *yv) {
359345

360346
static B
361347
jtXfromQ(J jt, A w, void *yv) {
362-
Q *v;
363-
X *x;
364-
v = QAV(w);
365-
x = (X *)yv;
348+
auto v = QAV(w);
349+
auto x = (X *)yv;
366350
DQ(AN(w), if (!(jtequ(jt, iv1, v->d))) return 0; *x++ = v->n; ++v;);
367351
return !jt->jerr;
368352
}
@@ -548,9 +532,8 @@ jtccvt(J jt, I tflagged, A w, A *y) {
548532
A
549533
jtcvt(J jt, I t, A w) {
550534
A y;
551-
B b;
552-
b = jtccvt(jt, t, w, &y);
553-
ASSERT(b != 0, EVDOMAIN);
535+
bool const b = jtccvt(jt, t, w, &y);
536+
ASSERT(b, EVDOMAIN);
554537
return y;
555538
}
556539

@@ -635,14 +618,11 @@ jtpcvt(J jt, I t, A w) {
635618

636619
A
637620
jtcvt0(J jt, A w) {
638-
I n, t;
639-
D *u;
640-
t = AT(w);
641-
n = AN(w);
621+
auto const t = AT(w);
622+
auto const n = (t & CMPX) ? 2 * AN(w) : AN(w);
642623
if (n && t & FL + CMPX) {
643-
if (t & CMPX) n += n;
644-
u = DAV(w);
645-
DQ(n, if (*u == 0.0) *u = 0.0; ++u;);
624+
auto u = DAV(w);
625+
std::transform(u, u + n, u, [](auto v) { return v == 0.0 ? 0.0 : v; });
646626
}
647627
return w;
648628
} /* convert -0 to 0 in place */
@@ -655,24 +635,24 @@ jtxco1(J jt, A w) {
655635

656636
A
657637
jtxco2(J jt, A a, A w) {
658-
A z;
659-
I j, n, r, t;
660-
n = AN(w);
661-
r = AR(w);
662-
t = AT(w);
663-
ASSERT(t & DENSE, EVNONCE);
638+
ASSERT(AT(w) & DENSE, EVNONCE);
639+
I j;
664640
RE(j = jti0(jt, a));
665641
switch (j) {
666642
case -2: return jtaslash1(jt, CDIV, w);
667643
case -1: return jtbcvt(jt, 1, w);
668644
case 1: return jtxco1(jt, w);
669645
case 2:
670-
if (!(t & RAT)) RZ(w = jtcvt(jt, RAT, w));
671-
GATV(z, XNUM, 2 * n, r + 1, AS(w));
672-
AS(z)[r] = 2;
673-
memcpy(AV(z), AV(w), 2 * n * SZI);
674-
return z;
675-
default:
676-
ASSERT(0, EVDOMAIN);
646+
if (!(AT(w) & RAT)) RZ(w = jtcvt(jt, RAT, w));
647+
{
648+
auto const n = AN(w);
649+
auto const r = AR(w);
650+
A z;
651+
GATV(z, XNUM, 2 * n, r + 1, AS(w));
652+
AS(z)[r] = 2;
653+
memcpy(AV(z), AV(w), 2 * n * SZI);
654+
return z;
655+
}
656+
default: ASSERT(0, EVDOMAIN);
677657
}
678658
}

0 commit comments

Comments
 (0)