@@ -72,7 +72,7 @@ template <typename From, typename To>
72
72
[[nodiscard]] auto
73
73
convert (J jt, array w, void *yv) -> bool {
74
74
if constexpr (std::is_same_v<To, Z>) {
75
- return convert<From, To>(jt, w, yv, [](auto v) { return To{.re = static_cast <D >(v), .im = {}}; });
75
+ return convert<From, To>(jt, w, yv, [](auto v) { return To{.re = static_cast <double >(v), .im = {}}; });
76
76
} else if constexpr (!in_range<To, From>()) {
77
77
return convert<From, To>(jt, w, yv, [](auto v) { return value_if (in_range<To>(v), v); });
78
78
} else {
@@ -85,41 +85,41 @@ convert(J jt, array w, void *yv) -> bool {
85
85
86
86
template <>
87
87
[[nodiscard]] auto
88
- convert<D , bool >(J jt, array w, void *yv, D fuzz) -> bool {
88
+ convert<double , bool >(J jt, array w, void *yv, double fuzz) -> bool {
89
89
auto const infinity = [](auto p) { return p < -2 || 2 < p; };
90
- return convert<D , bool >(
90
+ return convert<double , bool >(
91
91
jt, w, yv, [&](auto p) { return value_if (!infinity (p) && (p == 0.0 || fuzzy_equal (p, 1.0 , fuzz)), p != 0.0 ); });
92
92
}
93
93
94
94
template <>
95
95
[[nodiscard]] auto
96
- convert<D, I >(J jt, array w, void *yv, D fuzz) -> bool {
97
- return convert<D, I >(jt, w, yv, [&](auto p) -> std::optional<I > {
96
+ convert<double , int64_t >(J jt, array w, void *yv, double fuzz) -> bool {
97
+ return convert<double , int64_t >(jt, w, yv, [&](auto p) -> std::optional<int64_t > {
98
98
auto const q = jround (p);
99
99
if (!(p == q || fuzzy_equal (p, q, fuzz))) {
100
100
return std::nullopt; // must equal int, possibly out of range
101
101
}
102
102
// out-of-range values don't convert, handle separately
103
- if (p < static_cast <D >(IMIN)) {
103
+ if (p < static_cast <double >(IMIN)) {
104
104
return value_if (p >= IMIN * (1 + fuzz), IMIN);
105
105
} // if tolerantly < IMIN, error; else take IMIN
106
106
else if (p >= FLIMAX) {
107
- return value_if (p <= -static_cast <D >(IMIN) * (1 + fuzz), IMAX);
107
+ return value_if (p <= -static_cast <double >(IMIN) * (1 + fuzz), IMAX);
108
108
} // if tolerantly > IMAX, error; else take IMAX
109
109
return q;
110
110
});
111
111
}
112
112
113
113
template <>
114
114
[[nodiscard]] auto
115
- convert<Z, D >(J jt, array w, void *yv, D fuzz) -> bool {
115
+ convert<Z, double >(J jt, array w, void *yv, double fuzz) -> bool {
116
116
if (fuzz != 0.0 ) {
117
- return convert<Z, D >(jt, w, yv, [&](auto const &v) {
117
+ return convert<Z, double >(jt, w, yv, [&](auto const &v) {
118
118
auto const d = std::abs (v.im );
119
119
return value_if (d != inf && d <= fuzz * std::abs (v.re ), v.re );
120
120
});
121
121
}
122
- return convert<Z, D >(jt, w, yv, [](auto v) { return value_if (!v.im , v.re ); });
122
+ return convert<Z, double >(jt, w, yv, [](auto v) { return value_if (!v.im , v.re ); });
123
123
}
124
124
125
125
template <>
@@ -143,8 +143,8 @@ inplace_negate(T *u, int64_t n) {
143
143
144
144
template <>
145
145
[[nodiscard]] auto
146
- convert<I , X>(J jt, array w, void *yv) -> bool {
147
- I u[XIDIG];
146
+ convert<int64_t , X>(J jt, array w, void *yv) -> bool {
147
+ int64_t u[XIDIG];
148
148
auto const convert_one = [&](auto c) {
149
149
auto const b = c == IMIN;
150
150
auto d = b ? -(1 + c) : std::abs (c);
@@ -159,13 +159,13 @@ convert<I, X>(J jt, array w, void *yv) -> bool {
159
159
if (0 > c) { inplace_negate (u, XIDIG); }
160
160
return jtvec (jt, INT, length, u);
161
161
};
162
- return convert<I , X>(jt, w, yv, convert_one) && !jt->jerr ;
162
+ return convert<int64_t , X>(jt, w, yv, convert_one) && !jt->jerr ;
163
163
}
164
164
165
165
static auto
166
- jtxd1 (J jt, D p, I mode) -> X {
166
+ jtxd1 (J jt, double p, int64_t mode) -> X {
167
167
PROLOG (0052 );
168
- D e = jttfloor (jt, p);
168
+ double e = jttfloor (jt, p);
169
169
switch (mode) {
170
170
case XMFLR: p = e; break ;
171
171
case XMCEIL: p = ceil (p); break ;
@@ -186,7 +186,7 @@ jtxd1(J jt, D p, I mode) -> X {
186
186
while (0 < d) {
187
187
auto const q = floor (d / XBASE);
188
188
auto const r = d - q * XBASE;
189
- u[m++] = static_cast <I >(r);
189
+ u[m++] = static_cast <int64_t >(r);
190
190
d = q;
191
191
if (m == AN (t)) {
192
192
RZ (t = jtext (jt, 0 , t));
@@ -205,8 +205,8 @@ jtxd1(J jt, D p, I mode) -> X {
205
205
206
206
template <>
207
207
[[nodiscard]] auto
208
- convert<D , X>(J jt, array w, void *yv, I mode) -> bool {
209
- return convert<D , X>(jt, w, yv, [=](auto v) { return jtxd1 (jt, v, mode); }) && !jt->jerr ;
208
+ convert<double , X>(J jt, array w, void *yv, int64_t mode) -> bool {
209
+ return convert<double , X>(jt, w, yv, [=](auto v) { return jtxd1 (jt, v, mode); }) && !jt->jerr ;
210
210
}
211
211
212
212
template <>
@@ -228,21 +228,21 @@ value_from_X(X p) -> T {
228
228
229
229
template <>
230
230
[[nodiscard]] auto
231
- convert<X, I >(J jt, array w, void *yv) -> bool {
231
+ convert<X, int64_t >(J jt, array w, void *yv) -> bool {
232
232
X p = jtxc (jt, IMAX);
233
233
if (!p) return false ;
234
234
X q = jtxminus (jt, jtnegate (jt, p), jtxc (jt, 1L ));
235
235
if (!q) return false ;
236
- return convert<X, I >(jt, w, yv, [&](auto c) -> std::optional<int64_t > {
236
+ return convert<X, int64_t >(jt, w, yv, [&](auto c) -> std::optional<int64_t > {
237
237
if (!(1 != jtxcompare (jt, q, c) && 1 != jtxcompare (jt, c, p))) return std::nullopt;
238
238
return value_from_X<int64_t >(c);
239
239
});
240
240
}
241
241
242
242
template <>
243
243
[[nodiscard]] auto
244
- convert<X, D >(J jt, array w, void *yv) -> bool {
245
- return convert<X, D >(jt, w, yv, [](auto p) {
244
+ convert<X, double >(J jt, array w, void *yv) -> bool {
245
+ return convert<X, double >(jt, w, yv, [](auto p) {
246
246
auto const c = pointer_to_values<int64_t >(p)[AN (p) - 1 ];
247
247
if (c == XPINF) { return inf; }
248
248
if (c == XNINF) { return infm; }
@@ -258,12 +258,12 @@ convert<X, Q>(J jt, array w, void *yv) -> bool {
258
258
259
259
template <>
260
260
[[nodiscard]] auto
261
- convert<D , Q>(J jt, array w, void *yv, I mode) -> bool {
261
+ convert<double , Q>(J jt, array w, void *yv, int64_t mode) -> bool {
262
262
if ((w) == nullptr ) return false ;
263
263
auto const n = AN (w);
264
264
auto *const wv = pointer_to_values<double >(w);
265
265
auto *x = static_cast <Q *>(yv);
266
- D t = NAN;
266
+ double t = NAN;
267
267
auto *tv = 3 + reinterpret_cast <S *>(&t);
268
268
Q q;
269
269
for (int64_t i = 0 ; i < n; ++i) {
@@ -287,7 +287,7 @@ convert<D, Q>(J jt, array w, void *yv, I mode) -> bool {
287
287
} else {
288
288
bool const recip = 1 > t;
289
289
if (recip) { t = 1.0 / t; }
290
- auto e = static_cast <I >(0xfff0 & *tv);
290
+ auto e = static_cast <int64_t >(0xfff0 & *tv);
291
291
e >>= 4 ;
292
292
e -= 1023 ;
293
293
if (recip) {
@@ -306,8 +306,8 @@ convert<D, Q>(J jt, array w, void *yv, I mode) -> bool {
306
306
307
307
template <>
308
308
[[nodiscard]] auto
309
- convert<Q, D >(J jt, array w, void *yv) -> bool {
310
- auto const xb = static_cast <D >(XBASE);
309
+ convert<Q, double >(J jt, array w, void *yv) -> bool {
310
+ auto const xb = static_cast <double >(XBASE);
311
311
auto const nn = 308 / XBASEN;
312
312
313
313
// TODO: figure out nice algorithm for this
@@ -322,7 +322,7 @@ convert<Q, D>(J jt, array w, void *yv) -> bool {
322
322
};
323
323
324
324
X x2 = nullptr ;
325
- return convert<Q, D >(jt, w, yv, [&](auto nd) -> std::optional<D > {
325
+ return convert<Q, double >(jt, w, yv, [&](auto nd) -> std::optional<double > {
326
326
auto *const p = nd.n ;
327
327
auto const pn = AN (p);
328
328
auto const kk = 1 == pn ? pointer_to_values<int64_t >(p)[0 ] : 0 ;
@@ -359,9 +359,9 @@ convert<Q, X>(J jt, array w, void *yv) -> bool {
359
359
// 0 if error, 1 if success. If the conversion loses precision, error is returned
360
360
// Calls through bcvt are tagged with a flag in jt, indicating to set fuzz=0
361
361
auto
362
- jtccvt (J jt, I tflagged, array w, array *y) -> bool {
362
+ jtccvt (J jt, int64_t tflagged, array w, array *y) -> bool {
363
363
FPREFIP;
364
- I const t = tflagged & NOUN;
364
+ int64_t const t = tflagged & NOUN;
365
365
if (w == nullptr ) return false ;
366
366
auto const r = AR (w);
367
367
auto *const s = AS (w);
@@ -376,7 +376,7 @@ jtccvt(J jt, I tflagged, array w, array *y) -> bool {
376
376
jt->ranks = oqr;
377
377
return true ; // dense to sparse; convert type first (even if same dtype)
378
378
case 3 : // sparse to sparse
379
- I t1 = DTYPE (t);
379
+ int64_t t1 = DTYPE (t);
380
380
GASPARSE (*y, t, 1 , r, s);
381
381
P *yp = pointer_to_values<P>(*y);
382
382
P *wp = pointer_to_values<P>(w);
@@ -406,14 +406,14 @@ jtccvt(J jt, I tflagged, array w, array *y) -> bool {
406
406
if (!d) return false ;
407
407
auto *yv = pointer_to_values<void >(d); // allocate the same # atoms, even if we will convert fewer
408
408
if ((tflagged & NOUNCVTVALIDCT) != 0 ) {
409
- I inputn = *reinterpret_cast <I *>(y); // fetch input, in case it is called for
410
- if (inputn > 0 ) { // if converting the leading values, just update the counts
411
- n = inputn; // set the counts for local use, and in the block to be converted
412
- } else { // if converting trailing values...
409
+ int64_t inputn = *reinterpret_cast <int64_t *>(y); // fetch input, in case it is called for
410
+ if (inputn > 0 ) { // if converting the leading values, just update the counts
411
+ n = inputn; // set the counts for local use, and in the block to be converted
412
+ } else { // if converting trailing values...
413
413
AK (w) += (n + inputn) << bplg (wt);
414
- yv = reinterpret_cast <I *>(static_cast <C *>(yv) +
415
- ((n + inputn) << bplg (t))); // advance input and output pointers to new area
416
- n = -inputn; // get positive # atoms to convert
414
+ yv = reinterpret_cast <int64_t *>(
415
+ static_cast <C *>(yv) + ((n + inputn) << bplg (t))); // advance input and output pointers to new area
416
+ n = -inputn; // get positive # atoms to convert
417
417
}
418
418
AN (w) = n; // change atomct of w to # atoms to convert
419
419
}
@@ -451,66 +451,73 @@ jtccvt(J jt, I tflagged, array w, array *y) -> bool {
451
451
return convert<bool , X>(jt, w, pointer_to_values<int64_t >(d)) && convert<X, Q>(jt, d, yv);
452
452
case CVCASE (FLX, B01X): return convert<bool , double >(jt, w, yv);
453
453
case CVCASE (CMPXX, B01X): return convert<bool , Z>(jt, w, yv);
454
- case CVCASE (B01X, INTX): return convert<I , bool >(jt, w, yv);
455
- case CVCASE (XNUMX, INTX): return convert<I , X>(jt, w, yv);
454
+ case CVCASE (B01X, INTX): return convert<int64_t , bool >(jt, w, yv);
455
+ case CVCASE (XNUMX, INTX): return convert<int64_t , X>(jt, w, yv);
456
456
case CVCASE (RATX, INTX):
457
457
GATV (d, XNUM, n, r, s);
458
- return convert<I , X>(jt, w, pointer_to_values<int64_t >(d)) && convert<X, Q>(jt, d, yv);
458
+ return convert<int64_t , X>(jt, w, pointer_to_values<int64_t >(d)) && convert<X, Q>(jt, d, yv);
459
459
case CVCASE (FLX, INTX): return convert<int64_t , double >(jt, w, yv);
460
460
case CVCASE (CMPXX, INTX): return convert<int64_t , Z>(jt, w, yv);
461
- case CVCASE (B01X, FLX): return convert<D, bool >(jt, w, yv, ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
462
- case CVCASE (INTX, FLX): return convert<D, I>(jt, w, yv, ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
461
+ case CVCASE (B01X, FLX):
462
+ return convert<double , bool >(jt, w, yv, ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
463
+ case CVCASE (INTX, FLX):
464
+ return convert<double , int64_t >(jt, w, yv, ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
463
465
case CVCASE (XNUMX, FLX):
464
- return convert<D , X>(
466
+ return convert<double , X>(
465
467
jt, w, yv, (jt->xmode & REPSGN (SGNIFNOT (tflagged, XCVTXNUMORIDEX))) | (tflagged >> XCVTXNUMCVX));
466
468
case CVCASE (RATX, FLX):
467
- return convert<D , Q>(
469
+ return convert<double , Q>(
468
470
jt, w, yv, (jt->xmode & REPSGN (SGNIFNOT (tflagged, XCVTXNUMORIDEX))) | (tflagged >> XCVTXNUMCVX));
469
- case CVCASE (CMPXX, FLX): return convert<D , Z>(jt, w, yv);
471
+ case CVCASE (CMPXX, FLX): return convert<double , Z>(jt, w, yv);
470
472
case CVCASE (B01X, CMPXX):
471
473
GATV (d, FL, n, r, s);
472
- return convert<Z, D>(jt, w, pointer_to_values<int64_t >(d), ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
473
- convert<D, bool >(jt, d, yv, ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
474
+ return convert<Z, double >(
475
+ jt, w, pointer_to_values<int64_t >(d), ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
476
+ convert<double , bool >(jt, d, yv, ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
474
477
case CVCASE (INTX, CMPXX):
475
478
GATV (d, FL, n, r, s);
476
- return convert<Z, D>(jt, w, pointer_to_values<int64_t >(d), ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
477
- convert<D, I>(jt, d, yv, ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
479
+ return convert<Z, double >(
480
+ jt, w, pointer_to_values<int64_t >(d), ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
481
+ convert<double , int64_t >(jt, d, yv, ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
478
482
case CVCASE (XNUMX, CMPXX):
479
483
GATV (d, FL, n, r, s);
480
- return convert<Z, D>(jt, w, pointer_to_values<int64_t >(d), ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
481
- convert<D, X>(
484
+ return convert<Z, double >(
485
+ jt, w, pointer_to_values<int64_t >(d), ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
486
+ convert<double , X>(
482
487
jt, d, yv, (jt->xmode & REPSGN (SGNIFNOT (tflagged, XCVTXNUMORIDEX))) | (tflagged >> XCVTXNUMCVX));
483
488
case CVCASE (RATX, CMPXX):
484
489
GATV (d, FL, n, r, s);
485
- return convert<Z, D>(jt, w, pointer_to_values<int64_t >(d), ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
486
- convert<D, Q>(
490
+ return convert<Z, double >(
491
+ jt, w, pointer_to_values<int64_t >(d), ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ) &&
492
+ convert<double , Q>(
487
493
jt, d, yv, (jt->xmode & REPSGN (SGNIFNOT (tflagged, XCVTXNUMORIDEX))) | (tflagged >> XCVTXNUMCVX));
488
- case CVCASE (FLX, CMPXX): return convert<Z, D>(jt, w, yv, ((I)jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
494
+ case CVCASE (FLX, CMPXX):
495
+ return convert<Z, double >(jt, w, yv, ((int64_t )jtinplace & JTNOFUZZ) != 0 ? 0.0 : FUZZ);
489
496
case CVCASE (B01X, XNUMX): return convert<X, bool >(jt, w, yv);
490
- case CVCASE (INTX, XNUMX): return convert<X, I >(jt, w, yv);
497
+ case CVCASE (INTX, XNUMX): return convert<X, int64_t >(jt, w, yv);
491
498
case CVCASE (RATX, XNUMX): return convert<X, Q>(jt, w, yv);
492
- case CVCASE (FLX, XNUMX): return convert<X, D >(jt, w, yv);
499
+ case CVCASE (FLX, XNUMX): return convert<X, double >(jt, w, yv);
493
500
case CVCASE (CMPXX, XNUMX):
494
501
GATV (d, FL, n, r, s);
495
- return convert<X, D >(jt, w, pointer_to_values<int64_t >(d)) && convert<D , Z>(jt, d, yv);
502
+ return convert<X, double >(jt, w, pointer_to_values<int64_t >(d)) && convert<double , Z>(jt, d, yv);
496
503
case CVCASE (B01X, RATX):
497
504
GATV (d, XNUM, n, r, s);
498
505
return convert<Q, X>(jt, w, pointer_to_values<int64_t >(d)) && convert<X, bool >(jt, d, yv);
499
506
case CVCASE (INTX, RATX):
500
507
GATV (d, XNUM, n, r, s);
501
- return convert<Q, X>(jt, w, pointer_to_values<int64_t >(d)) && convert<X, I >(jt, d, yv);
508
+ return convert<Q, X>(jt, w, pointer_to_values<int64_t >(d)) && convert<X, int64_t >(jt, d, yv);
502
509
case CVCASE (XNUMX, RATX): return convert<Q, X>(jt, w, yv);
503
- case CVCASE (FLX, RATX): return convert<Q, D >(jt, w, yv);
510
+ case CVCASE (FLX, RATX): return convert<Q, double >(jt, w, yv);
504
511
case CVCASE (CMPXX, RATX):
505
512
GATV (d, FL, n, r, s);
506
- return convert<Q, D >(jt, w, pointer_to_values<int64_t >(d)) && convert<D , Z>(jt, d, yv);
513
+ return convert<Q, double >(jt, w, pointer_to_values<int64_t >(d)) && convert<double , Z>(jt, d, yv);
507
514
default : ASSERT (0 , EVDOMAIN);
508
515
}
509
516
}
510
517
511
518
// clear rank before calling ccvt - needed for sparse arrays only but returns the block as the result
512
519
auto
513
- jtcvt (J jt, I t, array w) -> array {
520
+ jtcvt (J jt, int64_t t, array w) -> array {
514
521
array y = nullptr ;
515
522
bool const b = jtccvt (jt, t, w, &y);
516
523
ASSERT (b, EVDOMAIN);
@@ -526,7 +533,7 @@ jtbcvt(J jt, C mode, array w) -> array {
526
533
FPREFIP;
527
534
if (w == nullptr ) { return nullptr ; }
528
535
529
- auto const as_integer = [](auto const &v) { return *(I *)&v; };
536
+ auto const as_integer = [](auto const &v) { return *(int64_t *)&v; };
530
537
auto const isflag = [&](auto const &z) { return as_integer (z.im ) == NANFLAG; };
531
538
532
539
// there may be values (especially b types) that were nominally CMPX but might actually be integers. Those were
@@ -541,15 +548,15 @@ jtbcvt(J jt, C mode, array w) -> array {
541
548
// auto flags = std::transform_reduce(wv, wv + AN(w), int64_t{}, std::plus{}, isflag);
542
549
auto flags = std::accumulate (wv, wv + AN (w), int64_t {}, [&](auto sum, auto v) { return sum + isflag (v); });
543
550
if (flags != 0 ) {
544
- I ipok = SGNIF (jtinplace, JTINPLACEWX) & AC (w); // both sign bits set (<0) if inplaceable
551
+ int64_t ipok = SGNIF (jtinplace, JTINPLACEWX) & AC (w); // both sign bits set (<0) if inplaceable
545
552
if (flags == AN (w)) {
546
553
if (ipok >= 0 ) GATV (result, INT, AN (w), AR (w), AS (w));
547
554
std::transform (
548
555
wv, wv + AN (w), pointer_to_values<int64_t >(result), [&](auto const &z) { return as_integer (z.re ); });
549
556
} else {
550
557
if (ipok >= 0 ) GATV (result, CMPX, AN (w), AR (w), AS (w));
551
558
std::transform (wv, wv + AN (w), pointer_to_values<Z>(result), [&](auto const &z) -> Z {
552
- if (isflag (z)) { return {.re = (D )as_integer (z.re ), .im = 0.0 }; };
559
+ if (isflag (z)) { return {.re = (double )as_integer (z.re ), .im = 0.0 }; };
553
560
return z; // copy floats, and converts any integers back to float
554
561
});
555
562
}
@@ -561,7 +568,7 @@ jtbcvt(J jt, C mode, array w) -> array {
561
568
// To avoid a needless copy, suppress conversion to B01 if type is B01, to INT if type is INT, etc
562
569
// set the NOFUZZ flag in jt to insist on an exact match so we won't lose precision
563
570
array y = nullptr ;
564
- jtinplace = (J)((I )jt + JTNOFUZZ); // demand exact match
571
+ jtinplace = (J)((int64_t )jt + JTNOFUZZ); // demand exact match
565
572
result = ((mode & 14 ) == 0 ) && jtccvt (jtinplace, B01, w, &y) ? y
566
573
: (y = w, AT (w) & INT || (((mode & 12 ) == 0 ) && jtccvt (jtinplace, INT, w, &y))) ? y
567
574
: (y = w, AT (w) & FL || (((mode & 8 ) == 0 ) && jtccvt (jtinplace, FL, w, &y)))
@@ -582,7 +589,7 @@ jticvt(J jt, array w) -> array {
582
589
}
583
590
584
591
auto
585
- jtpcvt (J jt, I t, array w) -> array {
592
+ jtpcvt (J jt, int64_t t, array w) -> array {
586
593
RANK2T oqr = jt->ranks ;
587
594
RESETRANK;
588
595
array y = nullptr ;
@@ -611,7 +618,7 @@ jtxco1(J jt, array w) -> array {
611
618
auto
612
619
jtxco2 (J jt, array a, array w) -> array {
613
620
ASSERT (AT (w) & DENSE, EVNONCE);
614
- I j = jti0 (jt, a);
621
+ int64_t j = jti0 (jt, a);
615
622
if (jt->jerr != 0 ) return nullptr ;
616
623
switch (j) {
617
624
case -2 : return jtaslash1 (jt, CDIV, w);
0 commit comments