From 49ce9022130e702887881112612e3da0edd187ff Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 15:42:03 -0800 Subject: [PATCH 01/13] chore(quest): claim quest/m3/ts-iter-back-folds.md Quest-Claim: ae91324bf08d3da0 From 539823c6ed031fa068c84db75b0cf15965f97a90 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:00:11 -0800 Subject: [PATCH 02/13] feat(ts): translate rfold and try_rfold, and a crate's own folds, nth, count, and last Co-Authored-By: Claude Opus 5.5 --- quest/m3/README.md | 2 +- quest/m3/ts-closure-calls.md | 5 +- quest/m3/ts-iter-back-folds.md | 30 - quest/m3/ts-iter-own-calls.md | 32 + ts/README.md | 10 +- ts/fixtures/crates/expected/harness.ts | 2 +- ts/fixtures/lang/caller.ts | 8 +- ts/fixtures/lang/expected/clones.ts | 7 +- ts/fixtures/lang/expected/cycles.ts | 2 +- ts/fixtures/lang/expected/ends.Counted.ts | 2 +- ts/fixtures/lang/expected/ends.Overrides.ts | 117 +++ ts/fixtures/lang/expected/ends.ts | 739 ++++++++++++-- ts/fixtures/lang/expected/hints.ts | 25 +- ts/fixtures/lang/expected/iters.ts | 12 +- ts/fixtures/lang/expected/strs.ts | 8 +- ts/fixtures/lang/src/ends.rs | 176 +++- ts/fixtures/reject/census.md | 28 +- ts/fixtures/reject/expected.txt | 4 +- ts/fixtures/reject/src/lib.rs | 12 +- .../expected/hashlink/linked_hash_map.Keys.ts | 2 +- .../hashlink/linked_hash_map.Values.ts | 2 +- .../hashlink/linked_hash_map.ValuesMut.ts | 2 +- ts/fixtures/stock/expected/maps.ts | 50 +- ts/fixtures/task/expected/core/result.ts | 7 + ts/fixtures/task/expected/drops.ts | 4 +- ts/fixtures/task/expected/drops/folds.Pile.ts | 121 +++ ts/fixtures/task/expected/drops/folds.ts | 903 +++++++++++++----- ts/fixtures/task/src/drops.rs | 4 +- ts/fixtures/task/src/drops/folds.rs | 197 +++- ts/runtime/rt/iter.ts | 125 ++- ts/src/lower/iter.rs | 205 +++- ts/src/lower/library.rs | 5 +- ts/tests/task.ts | 2 +- 33 files changed, 2343 insertions(+), 507 deletions(-) delete mode 100644 quest/m3/ts-iter-back-folds.md create mode 100644 quest/m3/ts-iter-own-calls.md create mode 100644 ts/fixtures/lang/expected/ends.Overrides.ts create mode 100644 ts/fixtures/task/expected/drops/folds.Pile.ts diff --git a/quest/m3/README.md b/quest/m3/README.md index 43276607c..b9b72bcd5 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -33,7 +33,7 @@ generic std gap is planned here even when moq never calls it. - [A closure that drops given to a string's edit or search](/quest/m3/ts-string-closures.md) - `String::retain` and `str`'s searches by a closure that owns a value that drops translate - [Waiting: a slice object for a mutable part of other values](/quest/m3/ts-slice-object.md) - waits on a moq profile showing the `Proxy` view's traps matter, then decides on an `rt.ByteSlice`-like form - [Port the workflow guard to kixelated/quest](/quest/m3/quest-workflow-guard.md) - quest's environment guard parses YAML as this repository's does -- [Folds from the back, and a crate's own folds](/quest/m3/ts-iter-back-folds.md) - `rfold` and `try_rfold` translate, and so does a crate's iterator that overrides `fold` or `nth_back` +- [A crate's own find and for_each](/quest/m3/ts-iter-own-calls.md) - a crate's iterator that overrides `find`, `rfind`, `find_map`, or `for_each` translates, each called where std's adaptors and consumers call it - [A comparison of two constants](/quest/m3/ts-constant-compares.md) - `size_of::() == 1` in a generic function translates to TypeScript `tsc` accepts - [A vector's exact capacity as it shrinks](/quest/m3/ts-vec-exact-capacity.md) - a deque made from a `Vec` splits its slices where std's does - [A B-tree's searches call Ord as std's do](/quest/m3/ts-btree-search-order.md) - a B-tree's lookups and inserts call a key's own `Ord` in std's order and number diff --git a/quest/m3/ts-closure-calls.md b/quest/m3/ts-closure-calls.md index 79b61e832..80d5ebd2d 100644 --- a/quest/m3/ts-closure-calls.md +++ b/quest/m3/ts-closure-calls.md @@ -12,9 +12,8 @@ Found probing std's consumers for [drop order](/quest/m3/ts-drop-order.md) in [#438](https://github.com/moq-dev/rust2/pull/438). Of a closure that owns nothing, each of these is refused today: -- `Iterator::try_fold`, `try_for_each`, and `partition`. Folds from the back, `rfold` and - `try_rfold`, are [#436](https://github.com/moq-dev/rust2/pull/436)'s - [`ts-iter-back-folds`](https://github.com/moq-dev/rust2/blob/quest/m2/ts-model/iter-traits/quest/m3/ts-iter-back-folds.md). +- `Iterator::try_fold`, `try_for_each`, and `partition`. `rt.iterTryRfold` already folds + from the back as `try_rfold` does, breaking by an `Option`, `Result`, or `ControlFlow`. - `iter::repeat_with`, and `Iterator::scan` of a state JS copies, which is refused as a `&mut` its mapping would copy. - `slice::sort_by_cached_key`. diff --git a/quest/m3/ts-iter-back-folds.md b/quest/m3/ts-iter-back-folds.md deleted file mode 100644 index f30c37d16..000000000 --- a/quest/m3/ts-iter-back-folds.md +++ /dev/null @@ -1,30 +0,0 @@ -# [M] Folds from the back, and a crate's own folds - -## Goal - -[rust2-ts](/ts/README.md) translates `DoubleEndedIterator::rfold` and `try_rfold` of any -iterator, and a crate's own iterator that overrides a provided method std's adaptors call -in place of `next` or `next_back`, such as `fold` or `nth_back`. Each runs where native's -does, as many times and in the same order, proven by differential tests against native -Rust. - -## Plan - -Found by [#436](https://github.com/moq-dev/rust2/pull/436), which translates a crate's own -`next_back`, `len`, and `size_hint`: - -- `rfold` and `try_rfold` are an "unsupported call" for every iterator, std's included. - The runtime already folds from the back inside its adaptors (`Iter.rfold`, `folded`), - so the gap may be mostly the mapping. -- A crate's own `Iterator::fold` or `DoubleEndedIterator::nth_back` is refused as - "overriding `_`, which std's adaptors call in place of `next` or beside it". Each override - is a method std's adaptors and consumers call in place of the default: `fold` from - `for_each`, `count`, `last`, and `Map::fold`, `nth_back` from `Rev::nth`. `rt.iterFrom` - would call it there, as it now calls `next_back`. -- Open: whether overrides of the other provided methods (`nth`, `try_fold`, `rfold`, - `advance_by`, `count`, `last`, and more) land here too. Each is the same problem, and - the runtime's callers of each decide how far it reaches. -- `lang`'s `ends` fixture logs each method a crate's iterator is called through, and can - extend to these. - -Public API: the translator's output. diff --git a/quest/m3/ts-iter-own-calls.md b/quest/m3/ts-iter-own-calls.md new file mode 100644 index 000000000..ba9ae957e --- /dev/null +++ b/quest/m3/ts-iter-own-calls.md @@ -0,0 +1,32 @@ +# [M] A crate's own find and for_each + +## Goal + +[rust2-ts](/ts/README.md) translates a crate's own iterator that overrides a provided +method std's adaptors and consumers call on it other than those `rt.iterFrom` already +calls (`size_hint`, `next_back`, `len`, `nth`, `nth_back`, `fold`, `rfold`, `count`, and +`last`), such as `find`, `rfind`, `find_map`, or `for_each`. Each runs where native's does, +as many times and in the same order, proven by differential tests against native Rust. + +## Plan + +Left by the PR that finished folds from the back. Each is refused today as "overriding +`_`, which std's adaptors call in place of `next` or beside it": + +- `Filter::next` and `SkipWhile::next` call their iterator's `find`, `FilterMap::next` its + `find_map`, and `Fuse`, `Chain`, and `Rev` forward `find` and `rfind`. The runtime's + adaptors read their iterator by `next` there, which is the same for std's own iterators + but skips a crate's override. +- `for_each` is what std's `Extend` impls for hash maps, `String`, and others call of the + iterator they are given. +- Each takes a closure, as `fold` does: the crate's `fold` translates for one + `Box` accumulator-agnostic instance, which these could share. +- Overrides std never calls in place of another, such as `max` or `position`, only matter + where the crate calls them directly. Check which std calls each before lifting its + refusal. +- `try_fold`, `try_rfold`, `advance_by`, and `advance_back_by` can be overridden only on + nightly, through unstable traits and features. +- `lang`'s `ends` fixture's `Overrides` iterator logs each method it is called through, and + can extend to these. + +Public API: the translator's output. diff --git a/ts/README.md b/ts/README.md index e07b3f402..a057d4255 100644 --- a/ts/README.md +++ b/ts/README.md @@ -279,7 +279,8 @@ compare the best and then the next, and a B-tree's iterators read their ends. `e An iterator over a slice, array, or `Vec`, or a small range, that only its `next` and moves read steps in place, as two variables: the array and an index into it, or the range's bounds, with no `rt.Iter` made. The crate's own `impl Iterator` returns `rt.DONE` from its `next` too, and joins -std's adaptors through `rt.iterFrom`, which calls its own `size_hint`, `next_back`, and `len` where std's adaptors +std's adaptors through `rt.iterFrom`, which calls its own `size_hint`, `next_back`, `len`, `nth`, and `nth_back`, +and of one it owns its own `fold`, `rfold`, `count`, and `last`, where std's adaptors call them, and `fuse` reads on past the end of one that is a `FusedIterator`, as std's does. A caller calls `next()` for one item, or iterates an `rt.Iter` with `for ... of`. Each `rt.Iter`'s `sizeHint` is std's `size_hint`, its upper bound `undefined` for `None`, and a `collect` or `extend` into a `Vec`, `VecDeque`, @@ -447,7 +448,9 @@ drop it where std's do. So do iterators: one that owns its items, as a `Vec`'s ` map's `drain` does, drops those it still holds by `[Symbol.dispose]`, an adaptor drops what it skips or rejects, and a consumer that takes an iterator by value drops it: through each `rt.Iter`'s own `fold` where std's folds, which drops each adaptor's closure -as its fold ends, before what it wraps, as std's does. A `Vec`'s `drain` leaves the vector +as its fold ends, before what it wraps, as std's does. The crate's own `fold` is given that +closure as a `Box`, which drops it where its body does. A `try_rfold` drops its +closure as it returns, leaving what the iterator holds to drop with it. A `Vec`'s `drain` leaves the vector what precedes its range until it drops, then drops what it still holds and moves the tail back, so one never dropped, as `mem::forget` leaves it, leaks the rest, as std's does. @@ -880,7 +883,8 @@ copies that std makes, other than a map's, or hands a closure, as `iter_mut` and `and_modify` do, one into a `Result`'s payload passed on or kept, the adaptors without a mapping in `src/lower/iter.rs` (such as `partition`), an own `impl Iterator` or `DoubleEndedIterator` that overrides a provided method other than -`size_hint` and `len`, such as `fold` or `nth_back`, +those, such as `find` or `for_each`, or whose own `fold` or `rfold` holds its accumulator in an +`Option` or a `Poll`, a pointer's address (`{:p}`), `write!` with a placeholder into the crate's own `fmt::Write`, a `str` pattern other than a `char`, a `&str`, a predicate, or chars, a mutable `str` slice, a copy of a closure that changes diff --git a/ts/fixtures/crates/expected/harness.ts b/ts/fixtures/crates/expected/harness.ts index 3b8620691..eb92b0e42 100644 --- a/ts/fixtures/crates/expected/harness.ts +++ b/ts/fixtures/crates/expected/harness.ts @@ -73,7 +73,7 @@ export function run(input: rt.ByteSlice): rt.ByteVec { } rt.byteVecPush(out, _143); } - const _151: rt.Iter = rt.iterRev(rt.iterFrom(Countdown.new(rt.min(input.length, 5) & 0xff), (it: Countdown.Countdown) => Countdown.next$iter_Iterator(it), undefined, undefined, (it: Countdown.Countdown) => rt.iterFromOption(Countdown.nextBack$iter_DoubleEndedIterator(it)))); + const _151: rt.Iter = rt.iterRev(rt.iterFrom(Countdown.new(rt.min(input.length, 5) & 0xff), Countdown.next$iter_Iterator, undefined, { back: (it: Countdown.Countdown) => rt.iterFromOption(Countdown.nextBack$iter_DoubleEndedIterator(it)) })); rt.iterExtendBytes(out, _151, "next"); const both: Countdown.Countdown = Countdown.new(rt.min(input.length, 6) & 0xff); while (true) { diff --git a/ts/fixtures/lang/caller.ts b/ts/fixtures/lang/caller.ts index 102771c8d..7e44f07e3 100644 --- a/ts/fixtures/lang/caller.ts +++ b/ts/fixtures/lang/caller.ts @@ -907,13 +907,13 @@ const capacityCases = [ ]; /** - * `ends::ends`: each kind of iterator through every consumer and either end's bits, of - * runs empty, short, and long, whose hints are exact, loose, and lying, after none and a - * few steps through each of its methods. + * `ends::ends`: each kind of iterator through every consumer and fold and either end's + * bits, of runs empty, short, and long, whose hints are exact, loose, and lying, after none + * and a few steps through each of its methods. */ const endsCases = [0x00, 0x03, 0x0f, 0x15, 0x27, 0x36, 0x2f].flatMap((shape) => [[], [0x01, 0x00], [0x0a, 0x0d, 0x03], [0x05, 0x06, 0x04, 0x0f]].flatMap((steps) => - Array.from({ length: 4 * 256 }, (_, i) => Uint8Array.of(...op("ends::ends"), i % 4, shape, i >> 2, ...steps)), + Array.from({ length: 10 * 256 }, (_, i) => Uint8Array.of(...op("ends::ends"), i % 10, shape, Math.floor(i / 10), ...steps)), ), ); diff --git a/ts/fixtures/lang/expected/clones.ts b/ts/fixtures/lang/expected/clones.ts index a8dd1c354..f86dce7ac 100644 --- a/ts/fixtures/lang/expected/clones.ts +++ b/ts/fixtures/lang/expected/clones.ts @@ -6602,7 +6602,6 @@ export function turns$vec_IntoIter_u8_clones_iters_closure18_clones_iters_closur export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { let _263!: [rt.ByteSlice, rt.ByteSlice]; let _269!: rt.usize; - let it!: rt.Peekable; const plan: Plan.Plan = { dataData: data.data, dataStart: data.start, dataLen: data.length, at: kind as rt.usize }; const n: rt.usize = option_mapOr$1surhce(rt.byteSliceFirst(data), 1, (_2: rt.u8): rt.u8 => { return rt.u8Add(rt.u8Rem(_2, 4), 1); @@ -6893,7 +6892,7 @@ export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { }, plan, (x35: rt.u8): rt.u8 => { return x35; }, out); - turns$iter_Map_clones_Countdown_clones_iters_closure100_clones_iters_closure101_clones_iters_closure102(rt.iterMap(rt.iterFrom({ _0: rt.u8Mul(n & 0xff, 3) }, (it: clones_Countdown.Countdown) => clones_Countdown.next$iter_Iterator(it)), (x36: rt.u8): rt.u8 => { + turns$iter_Map_clones_Countdown_clones_iters_closure100_clones_iters_closure101_clones_iters_closure102(rt.iterMap(rt.iterFrom({ _0: rt.u8Mul(n & 0xff, 3) }, clones_Countdown.next$iter_Iterator), (x36: rt.u8): rt.u8 => { return x36 ^ 7; }), (it33: rt.Iter): rt.u8 | undefined => { return rt.iterToOption(it33.next()); @@ -6902,7 +6901,7 @@ export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { }, out); const _236: clones_Countdown.Countdown = { _0: rt.u8Mul(n & 0xff, 3) }; const _240: rt.Iter = rt.iterSlice(rt.byteSliceView(data)); - turns$iter_Zip_clones_Countdown_slice_Iter_u8_clones_iters_closure103_clones_iters_closure104(rt.iterZip(rt.iterFrom(_236, (it: clones_Countdown.Countdown) => clones_Countdown.next$iter_Iterator(it)), _240), (it34: rt.Iter<[rt.u8, rt.u8]>): [rt.u8, rt.u8] | undefined => { + turns$iter_Zip_clones_Countdown_slice_Iter_u8_clones_iters_closure103_clones_iters_closure104(rt.iterZip(rt.iterFrom(_236, clones_Countdown.next$iter_Iterator), _240), (it34: rt.Iter<[rt.u8, rt.u8]>): [rt.u8, rt.u8] | undefined => { return rt.iterToOption(it34.next()); }, plan, (_261: [rt.u8, rt.u8]): rt.u8 => { return _261[0] ^ _261[1]; @@ -7007,7 +7006,7 @@ export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { }), undefined, true); rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.refCellReplace(log, new rt.ByteVec())), undefined, true); } else if (_9 === 8) { - it = rt.iterPeekable(rt.iterSlice(rt.byteSliceView(data))); + const it: rt.Peekable = rt.iterPeekable(rt.iterSlice(rt.byteSliceView(data))); let iterStart5: rt.usize = 0; const iterEnd5: rt.usize = n; while (iterStart5++ < iterEnd5) { diff --git a/ts/fixtures/lang/expected/cycles.ts b/ts/fixtures/lang/expected/cycles.ts index b87c7ad48..5a040baaa 100644 --- a/ts/fixtures/lang/expected/cycles.ts +++ b/ts/fixtures/lang/expected/cycles.ts @@ -21,7 +21,7 @@ export function flush(log: rt.RefCell, out: rt.ByteVec): void { */ export function read$cycles_Countdown_cycles_cycles_closure4(it: cycles_Countdown.Countdown, steps: rt.ByteSlice, put: (a0: rt.u8) => rt.u8, out: rt.ByteVec): void { let item!: rt.u8 | undefined; - const it2: rt.Iter = rt.iterCycle(rt.iterFrom(it, (it: cycles_Countdown.Countdown) => cycles_Countdown.next$iter_Iterator(it)), { v: cycles_Countdown.clone$Clone }); + const it2: rt.Iter = rt.iterCycle(rt.iterFrom(it, cycles_Countdown.next$iter_Iterator), { v: cycles_Countdown.clone$Clone }); const _8: [rt.usize, rt.usize | undefined] = it2.sizeHint(); const lower: rt.usize = _8[0]; rt.iterExtendBytes(out, rt.iterSlice(Uint8Array.of(lower & 0xff, (lower >>> 24) & 0xff, option_mapOr$02k4ito(_8[1], 254, (n2: rt.usize): rt.u8 => { diff --git a/ts/fixtures/lang/expected/ends.Counted.ts b/ts/fixtures/lang/expected/ends.Counted.ts index fdfea08ce..74b071501 100644 --- a/ts/fixtures/lang/expected/ends.Counted.ts +++ b/ts/fixtures/lang/expected/ends.Counted.ts @@ -22,7 +22,7 @@ export function nextBack$iter_DoubleEndedIterator(self: Counted): rt.u8 | undefi export function len$iter_ExactSizeIterator(self: Counted): rt.usize { ends_Run.logged(self._0, 108); - return rt.iterFrom(self._0, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))).len(); + return rt.iterFrom(self._0, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }).len(); } //# sourceMappingURL=ends.Counted.ts.map diff --git a/ts/fixtures/lang/expected/ends.Overrides.ts b/ts/fixtures/lang/expected/ends.Overrides.ts new file mode 100644 index 000000000..7bea32441 --- /dev/null +++ b/ts/fixtures/lang/expected/ends.Overrides.ts @@ -0,0 +1,117 @@ +// Generated by rust2-ts. Do not edit. + +import * as rt from "./rt.ts"; +import * as ends_Run from "./ends.Run.ts"; + +/** + * A `Run` with its own `nth`, `nth_back`, `fold`, `rfold`, `count`, and `last`, each logged + * as `N`, `B`, `f`, `r`, `c`, and `L`, which std's adaptors and consumers call in place of + * `next` and `next_back`. Its `count` reads nothing, and its `last` reads from the back. + */ +export interface Overrides { + _0: ends_Run.Run; +} + +export function next$iter_Iterator(self: Overrides): rt.u8 | rt.Done { + return ends_Run.next$iter_Iterator(self._0); +} + +export function sizeHint$iter_Iterator(self: Overrides): [rt.usize, rt.usize | undefined] { + return ends_Run.sizeHint$iter_Iterator(self._0); +} + +export function nth$iter_Iterator(self: Overrides, n: rt.usize): rt.u8 | undefined { + ends_Run.logged(self._0, 78); + let iterStart: rt.usize = 0; + const iterEnd: rt.usize = n; + while (iterStart++ < iterEnd) { + if (ends_Run.next$iter_Iterator(self._0) === rt.DONE) { + return undefined; + } + } + return rt.iterToOption(ends_Run.next$iter_Iterator(self._0)); +} + +export function fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32(self: Overrides, init: rt.u32 | undefined, f: (a0: rt.u32 | undefined, a1: rt.u8) => rt.u32 | undefined): rt.u32 | undefined { + ends_Run.logged(self._0, 102); + let acc: rt.u32 | undefined = init; + while (true) { + const _7: rt.u8 | rt.Done = ends_Run.next$iter_Iterator(self._0); + if (_7 !== rt.DONE) { + acc = f(acc, _7); + } else { + break; + } + } + rt.drop(f); + return acc; +} + +export function fold$iter_Iterator_u8_ends_folded_closure0_ends_Overrides(self: Overrides, init: rt.u8, f: (a0: rt.u8, a1: rt.u8) => rt.u8): rt.u8 { + ends_Run.logged(self._0, 102); + let acc: rt.u8 = init; + while (true) { + const _7: rt.u8 | rt.Done = ends_Run.next$iter_Iterator(self._0); + if (_7 !== rt.DONE) { + acc = f(acc, _7); + } else { + return acc; + } + } +} + +export function count$iter_Iterator(self: Overrides): rt.usize { + ends_Run.logged(self._0, 99); + return ends_Run.left(self._0) as rt.usize; +} + +export function last$iter_Iterator(self: Overrides): rt.u8 | undefined { + ends_Run.logged(self._0, 76); + return ends_Run.nextBack$iter_DoubleEndedIterator(self._0); +} + +export function nextBack$iter_DoubleEndedIterator(self: Overrides): rt.u8 | undefined { + return ends_Run.nextBack$iter_DoubleEndedIterator(self._0); +} + +export function nthBack$iter_DoubleEndedIterator(self: Overrides, n: rt.usize): rt.u8 | undefined { + ends_Run.logged(self._0, 66); + let iterStart: rt.usize = 0; + const iterEnd: rt.usize = n; + while (iterStart++ < iterEnd) { + if (ends_Run.nextBack$iter_DoubleEndedIterator(self._0) === undefined) { + return undefined; + } + } + return ends_Run.nextBack$iter_DoubleEndedIterator(self._0); +} + +export function rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32(self: Overrides, init: rt.u32 | undefined, f: (a0: rt.u32 | undefined, a1: rt.u8) => rt.u32 | undefined): rt.u32 | undefined { + ends_Run.logged(self._0, 114); + let acc: rt.u32 | undefined = init; + while (true) { + const _7: rt.u8 | undefined = ends_Run.nextBack$iter_DoubleEndedIterator(self._0); + if (_7 !== undefined) { + acc = f(acc, _7); + } else { + break; + } + } + rt.drop(f); + return acc; +} + +export function rfold$iter_DoubleEndedIterator_u8_ends_folded_closure1_ends_Overrides(self: Overrides, init: rt.u8, f: (a0: rt.u8, a1: rt.u8) => rt.u8): rt.u8 { + ends_Run.logged(self._0, 114); + let acc: rt.u8 = init; + while (true) { + const _7: rt.u8 | undefined = ends_Run.nextBack$iter_DoubleEndedIterator(self._0); + if (_7 !== undefined) { + acc = f(acc, _7); + } else { + return acc; + } + } +} + +//# sourceMappingURL=ends.Overrides.ts.map diff --git a/ts/fixtures/lang/expected/ends.ts b/ts/fixtures/lang/expected/ends.ts index be8e28ffd..531dd54d8 100644 --- a/ts/fixtures/lang/expected/ends.ts +++ b/ts/fixtures/lang/expected/ends.ts @@ -1,10 +1,12 @@ // Generated by rust2-ts. Do not edit. import * as rt from "./rt.ts"; -import { unwrapOr$0r2bmpr as option_unwrapOr$0r2bmpr, map$05nbzug as option_map$05nbzug, map$1sj2ls1 as option_map$1sj2ls1, mapOr$02k4ito as option_mapOr$02k4ito } from "./core/option.ts"; +import { thenSome$0d5am30 } from "./core/bool.ts"; +import { unwrapOr$0r2bmpr as option_unwrapOr$0r2bmpr, map$05nbzug as option_map$05nbzug, map$1sj2ls1 as option_map$1sj2ls1, mapOr$02k4ito as option_mapOr$02k4ito, or$1loyskh as option_or$1loyskh } from "./core/option.ts"; import * as ends_Counted from "./ends.Counted.ts"; import * as Flicker from "./ends.Flicker.ts"; import * as Lapse from "./ends.Lapse.ts"; +import * as Overrides from "./ends.Overrides.ts"; import * as ends_Run from "./ends.Run.ts"; /** An item, or 0xff for `None`. */ @@ -34,7 +36,8 @@ export function putVec(out: rt.ByteVec, v: rt.ByteVec): void { /** * The run `data`'s first byte picks steps through with each of its other bytes, read * directly, through `&mut`, or by std's adaptors, and consumed by the third byte's pick, - * with what each read and each call of its methods logged. + * by `consumed`, or by `folded` past the fifth `kind`, with what each read and each call + * of its methods logged. */ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataLen: number, out: rt.ByteVec): void { let over!: rt.u8 | undefined; @@ -62,32 +65,49 @@ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataL put(out, ends_Run.nextBack$iter_DoubleEndedIterator(run)); } else if (_29 === 2) { const _37: rt.usize = rt.usizeRem(step >> 3 as rt.usize, 4); - put(out, rt.iterNthBack(rt.iterFrom(run, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), _37)); + put(out, rt.iterNthBack(rt.iterFrom(run, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _37)); } else if (_29 === 3) { - rt.byteVecPush(out, rt.iterFrom(run, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))).len() & 0xff); + rt.byteVecPush(out, rt.iterFrom(run, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }).len() & 0xff); } else if (_29 === 4) { putHint(out, ends_Run.sizeHint$iter_Iterator(run)); } else if (_29 === 5) { if (!((step & 8) === 0)) { put(out, ends_Run.nextBack$iter_DoubleEndedIterator(run)); } else { - put(out, rt.iterToOption(rt.iterRev(rt.iterFrom(run, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)))).next())); + put(out, rt.iterToOption(rt.iterRev(rt.iterFrom(run, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })).next())); } } else if (_29 === 6) { - rt.byteVecPush(out, rt.iterFrom(run, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))).len() & 0xff); + rt.byteVecPush(out, rt.iterFrom(run, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }).len() & 0xff); } else { const _62: rt.usize = rt.usizeRem(step >> 3 as rt.usize, 4); - put(out, rt.iterNth(rt.iterFrom(run, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), _62)); + put(out, rt.iterNth(rt.iterFrom(run, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _62)); } } const k: rt.usize = rt.u8Shr(dataData[dataStart + 1], 4) as rt.usize; + const _72: [rt.u8, boolean] = [rt.u8Rem(dataData[dataStart + 1], 16), rt.u8Rem(kind, 10) >= 5]; + const pick: rt.u8 = _72[0]; + const folds: boolean = _72[1]; b4: { - const _71: rt.u8 = rt.u8Rem(kind, 4); - if (_71 === 0) { - consumed$ends_Run(run, rt.u8Rem(dataData[dataStart + 1], 16), k, out); - } else if (_71 === 1) { - consumed$ends_Counted({ _0: run }, rt.u8Rem(dataData[dataStart + 1], 16), k, out); - } else if (_71 === 2) { + const _78: rt.u8 = rt.u8Rem(kind, 5); + if (_78 === 0) { + if (!folds) { + consumed$ends_Run(run, pick, k, out); + } else { + folded$ends_Run(run, pick, k, log, out); + } + } else if (_78 === 1) { + if (!folds) { + consumed$ends_Counted({ _0: run }, pick, k, out); + } else { + folded$ends_Counted({ _0: run }, pick, k, log, out); + } + } else if (_78 === 4) { + if (!folds) { + consumed$ends_Overrides({ _0: run }, pick, k, out); + } else { + folded$ends_Overrides({ _0: run }, pick, k, log, out); + } + } else if (_78 === 2) { fuses(dataData[dataStart + 1], out); } else { let bits: rt.u8 = dataData[dataStart + 1]; @@ -115,25 +135,25 @@ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataL export function consumed$ends_Counted(it: ends_Counted.Counted, pick: rt.u8, k: rt.usize, out: rt.ByteVec): void { let _32!: rt.u8 | undefined; if (pick === 0) { - putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it))), "next")); + putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })), "next")); } else if (pick === 1) { - putVec(out, rt.iterToByteVec(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), "next")); + putVec(out, rt.iterToByteVec(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), "next")); } else if (pick === 2) { - rt.byteVecPush(out, rt.iterRev(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it))).len() & 0xff); + rt.byteVecPush(out, rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })).len() & 0xff); } else if (pick === 3) { - rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)))), (_211: [rt.usize, rt.u8]): Uint8Array => { + rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }))), (_211: [rt.usize, rt.u8]): Uint8Array => { return Uint8Array.of(_211[0] & 0xff, _211[1]); }, (value: Uint8Array) => rt.iterSlice(value), false, 2), "next"); } else if (pick === 4) { - rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), k)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), k)), "next"); } else if (pick === 5) { - rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), k)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), k)), "next"); } else if (pick === 6) { const _27: ends_Counted.Counted = it; const _28: rt.usize = rt.max(k, 1); - rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterFrom(_27, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), _28)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterFrom(_27, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _28)), "next"); } else if (pick === 7) { - put(out, option_map$05nbzug(rt.iterRposition(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), (b8: rt.u8): boolean => { + put(out, option_map$05nbzug(rt.iterRposition(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), (b8: rt.u8): boolean => { return rt.u8Rem(b8, 3) === 0; }), (i3: rt.usize): rt.u8 => { return i3 & 0xff; @@ -143,17 +163,17 @@ export function consumed$ends_Counted(it: ends_Counted.Counted, pick: rt.u8, k: if (_33 === 0) { const _37: ends_Counted.Counted = it; const _38: rt.usize = rt.usizeDiv(k, 4); - _32 = rt.iterRfind(rt.iterSkip(rt.iterFrom(_37, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), _38), (b7: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterSkip(rt.iterFrom(_37, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _38), (b7: rt.u8): boolean => { return rt.u8Rem(b7, 3) === 0; }); } else if (_33 === 1) { const _42: ends_Counted.Counted = it; const _43: rt.usize = rt.usizeDiv(k, 4); - _32 = rt.iterRfind(rt.iterTake(rt.iterFrom(_42, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), _43), (b6: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterTake(rt.iterFrom(_42, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _43), (b6: rt.u8): boolean => { return rt.u8Rem(b6, 3) === 0; }); } else if (_33 === 2) { - _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it))), (_2: [rt.usize, rt.u8]): boolean => { + _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })), (_2: [rt.usize, rt.u8]): boolean => { return rt.u8Rem(rt.u8Add(_2[0] & 0xff, _2[1]), 3) === 0; }), (_210: [rt.usize, rt.u8]): rt.u8 => { return (_210[0] & 0xff) ^ _210[1]; @@ -161,25 +181,25 @@ export function consumed$ends_Counted(it: ends_Counted.Counted, pick: rt.u8, k: } else { const _51: ends_Counted.Counted = it; const _52: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); - _32 = rt.iterRfind(rt.iterStepBy(rt.iterFrom(_51, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), _52), (b3: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterStepBy(rt.iterFrom(_51, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _52), (b3: rt.u8): boolean => { return rt.u8Rem(b3, 3) === 0; }); } put(out, _32); } else if (pick === 9) { - put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it))))); + put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })))); } else if (pick === 10) { - rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), (b2: rt.u8): rt.u8 => { + rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), (b2: rt.u8): rt.u8 => { return b2 ^ 85; })), k), "next"); } else if (pick === 11) { const v: rt.ByteVec = rt.byteVecFrom(Uint8Array.of(170)); - const _67: rt.Iter = rt.iterTake(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), k); + const _67: rt.Iter = rt.iterTake(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), k); rt.iterExtendBytes(v, _67, "next"); putVec(out, v); rt.byteVecPush(out, ends_Counted.len$iter_ExactSizeIterator(it) & 0xff); } else if (pick === 12) { - const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), new rt.Range(0, 5)); + const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), new rt.Range(0, 5)); while (true) { const _79: [rt.u8, rt.u8] | undefined = rt.iterToOption(zip.nextBack()); if (_79 !== undefined) { @@ -189,14 +209,106 @@ export function consumed$ends_Counted(it: ends_Counted.Counted, pick: rt.u8, k: } } } else if (pick === 13) { - const fused: rt.Iter = rt.iterFuse(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it))); + const fused: rt.Iter = rt.iterFuse(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })); put(out, rt.iterToOption(fused.nextBack())); rt.byteVecPush(out, fused.len() & 0xff); rt.iterExtendBytes(out, fused, "next"); } else if (pick === 14) { - put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it)), rt.iterSlice(Uint8Array.of(7, 8)))), k)); + put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), rt.iterSlice(Uint8Array.of(7, 8)))), k)); } else { - const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, (it: ends_Counted.Counted) => ends_Counted.next$iter_Iterator(it), undefined, (it: ends_Counted.Counted) => ends_Counted.sizeHint$iter_Iterator(it), (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), (it: ends_Counted.Counted) => ends_Counted.len$iter_ExactSizeIterator(it))); + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, peek.len() & 0xff); + rt.iterExtendBytes(out, rt.iterRev(peek), "next"); + } +} + +/** `it`, consumed by std's adaptor or consumer `pick`, with `k` its count where it takes one. */ +export function consumed$ends_Overrides(it: Overrides.Overrides, pick: rt.u8, k: rt.usize, out: rt.ByteVec): void { + let _32!: rt.u8 | undefined; + if (pick === 0) { + putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), "next")); + } else if (pick === 1) { + putVec(out, rt.iterToByteVec(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), "next")); + } else if (pick === 2) { + rt.byteVecPush(out, rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })).len() & 0xff); + } else if (pick === 3) { + rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))), (_211: [rt.usize, rt.u8]): Uint8Array => { + return Uint8Array.of(_211[0] & 0xff, _211[1]); + }, (value: Uint8Array) => rt.iterSlice(value), false, 2), "next"); + } else if (pick === 4) { + rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), k)), "next"); + } else if (pick === 5) { + rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), k)), "next"); + } else if (pick === 6) { + const _27: Overrides.Overrides = it; + const _28: rt.usize = rt.max(k, 1); + rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterFrom(_27, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _28)), "next"); + } else if (pick === 7) { + put(out, option_map$05nbzug(rt.iterRposition(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (b8: rt.u8): boolean => { + return rt.u8Rem(b8, 3) === 0; + }), (i3: rt.usize): rt.u8 => { + return i3 & 0xff; + })); + } else if (pick === 8) { + const _33: rt.usize = rt.usizeRem(k, 4); + if (_33 === 0) { + const _37: Overrides.Overrides = it; + const _38: rt.usize = rt.usizeDiv(k, 4); + _32 = rt.iterRfind(rt.iterSkip(rt.iterFrom(_37, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _38), (b7: rt.u8): boolean => { + return rt.u8Rem(b7, 3) === 0; + }); + } else if (_33 === 1) { + const _42: Overrides.Overrides = it; + const _43: rt.usize = rt.usizeDiv(k, 4); + _32 = rt.iterRfind(rt.iterTake(rt.iterFrom(_42, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _43), (b6: rt.u8): boolean => { + return rt.u8Rem(b6, 3) === 0; + }); + } else if (_33 === 2) { + _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), (_2: [rt.usize, rt.u8]): boolean => { + return rt.u8Rem(rt.u8Add(_2[0] & 0xff, _2[1]), 3) === 0; + }), (_210: [rt.usize, rt.u8]): rt.u8 => { + return (_210[0] & 0xff) ^ _210[1]; + }); + } else { + const _51: Overrides.Overrides = it; + const _52: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + _32 = rt.iterRfind(rt.iterStepBy(rt.iterFrom(_51, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _52), (b3: rt.u8): boolean => { + return rt.u8Rem(b3, 3) === 0; + }); + } + put(out, _32); + } else if (pick === 9) { + put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })))); + } else if (pick === 10) { + rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (b2: rt.u8): rt.u8 => { + return b2 ^ 85; + })), k), "next"); + } else if (pick === 11) { + const v: rt.ByteVec = rt.byteVecFrom(Uint8Array.of(170)); + const _67: rt.Iter = rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), k); + rt.iterExtendBytes(v, _67, "next"); + putVec(out, v); + rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }).len() & 0xff); + } else if (pick === 12) { + const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), new rt.Range(0, 5)); + while (true) { + const _79: [rt.u8, rt.u8] | undefined = rt.iterToOption(zip.nextBack()); + if (_79 !== undefined) { + rt.iterExtendBytes(out, rt.iterSlice(Uint8Array.of(_79[0], _79[1])), undefined, true); + } else { + break; + } + } + } else if (pick === 13) { + const fused: rt.Iter = rt.iterFuse(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })); + put(out, rt.iterToOption(fused.nextBack())); + rt.byteVecPush(out, fused.len() & 0xff); + rt.iterExtendBytes(out, fused, "next"); + } else if (pick === 14) { + put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), rt.iterSlice(Uint8Array.of(7, 8)))), k)); + } else { + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })); put(out, rt.peekablePeek(peek)); rt.byteVecPush(out, peek.len() & 0xff); rt.iterExtendBytes(out, rt.iterRev(peek), "next"); @@ -207,25 +319,25 @@ export function consumed$ends_Counted(it: ends_Counted.Counted, pick: rt.u8, k: export function consumed$ends_Run(it: ends_Run.Run, pick: rt.u8, k: rt.usize, out: rt.ByteVec): void { let _32!: rt.u8 | undefined; if (pick === 0) { - putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)))), "next")); + putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })), "next")); } else if (pick === 1) { - putVec(out, rt.iterToByteVec(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), "next")); + putVec(out, rt.iterToByteVec(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), "next")); } else if (pick === 2) { - rt.byteVecPush(out, rt.iterRev(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)))).len() & 0xff); + rt.byteVecPush(out, rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })).len() & 0xff); } else if (pick === 3) { - rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))))), (_211: [rt.usize, rt.u8]): Uint8Array => { + rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }))), (_211: [rt.usize, rt.u8]): Uint8Array => { return Uint8Array.of(_211[0] & 0xff, _211[1]); }, (value: Uint8Array) => rt.iterSlice(value), false, 2), "next"); } else if (pick === 4) { - rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), k)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), k)), "next"); } else if (pick === 5) { - rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), k)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), k)), "next"); } else if (pick === 6) { const _27: ends_Run.Run = it; const _28: rt.usize = rt.max(k, 1); - rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterFrom(_27, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), _28)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterFrom(_27, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _28)), "next"); } else if (pick === 7) { - put(out, option_map$05nbzug(rt.iterRposition(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), (b8: rt.u8): boolean => { + put(out, option_map$05nbzug(rt.iterRposition(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), (b8: rt.u8): boolean => { return rt.u8Rem(b8, 3) === 0; }), (i3: rt.usize): rt.u8 => { return i3 & 0xff; @@ -235,17 +347,17 @@ export function consumed$ends_Run(it: ends_Run.Run, pick: rt.u8, k: rt.usize, ou if (_33 === 0) { const _37: ends_Run.Run = it; const _38: rt.usize = rt.usizeDiv(k, 4); - _32 = rt.iterRfind(rt.iterSkip(rt.iterFrom(_37, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), _38), (b7: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterSkip(rt.iterFrom(_37, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _38), (b7: rt.u8): boolean => { return rt.u8Rem(b7, 3) === 0; }); } else if (_33 === 1) { const _42: ends_Run.Run = it; const _43: rt.usize = rt.usizeDiv(k, 4); - _32 = rt.iterRfind(rt.iterTake(rt.iterFrom(_42, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), _43), (b6: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterTake(rt.iterFrom(_42, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _43), (b6: rt.u8): boolean => { return rt.u8Rem(b6, 3) === 0; }); } else if (_33 === 2) { - _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)))), (_2: [rt.usize, rt.u8]): boolean => { + _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })), (_2: [rt.usize, rt.u8]): boolean => { return rt.u8Rem(rt.u8Add(_2[0] & 0xff, _2[1]), 3) === 0; }), (_210: [rt.usize, rt.u8]): rt.u8 => { return (_210[0] & 0xff) ^ _210[1]; @@ -253,25 +365,25 @@ export function consumed$ends_Run(it: ends_Run.Run, pick: rt.u8, k: rt.usize, ou } else { const _51: ends_Run.Run = it; const _52: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); - _32 = rt.iterRfind(rt.iterStepBy(rt.iterFrom(_51, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), _52), (b3: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterStepBy(rt.iterFrom(_51, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _52), (b3: rt.u8): boolean => { return rt.u8Rem(b3, 3) === 0; }); } put(out, _32); } else if (pick === 9) { - put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)))))); + put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })))); } else if (pick === 10) { - rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), (b2: rt.u8): rt.u8 => { + rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), (b2: rt.u8): rt.u8 => { return b2 ^ 85; })), k), "next"); } else if (pick === 11) { const v: rt.ByteVec = rt.byteVecFrom(Uint8Array.of(170)); - const _67: rt.Iter = rt.iterTake(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), k); + const _67: rt.Iter = rt.iterTake(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), k); rt.iterExtendBytes(v, _67, "next"); putVec(out, v); - rt.byteVecPush(out, rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))).len() & 0xff); + rt.byteVecPush(out, rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }).len() & 0xff); } else if (pick === 12) { - const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), new rt.Range(0, 5)); + const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), new rt.Range(0, 5)); while (true) { const _79: [rt.u8, rt.u8] | undefined = rt.iterToOption(zip.nextBack()); if (_79 !== undefined) { @@ -281,20 +393,537 @@ export function consumed$ends_Run(it: ends_Run.Run, pick: rt.u8, k: rt.usize, ou } } } else if (pick === 13) { - const fused: rt.Iter = rt.iterFuse(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)))); + const fused: rt.Iter = rt.iterFuse(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })); put(out, rt.iterToOption(fused.nextBack())); rt.byteVecPush(out, fused.len() & 0xff); rt.iterExtendBytes(out, fused, "next"); } else if (pick === 14) { - put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it))), rt.iterSlice(Uint8Array.of(7, 8)))), k)); + put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), rt.iterSlice(Uint8Array.of(7, 8)))), k)); } else { - const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, (it: ends_Run.Run) => ends_Run.next$iter_Iterator(it), undefined, (it: ends_Run.Run) => ends_Run.sizeHint$iter_Iterator(it), (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)))); + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })); put(out, rt.peekablePeek(peek)); rt.byteVecPush(out, peek.len() & 0xff); rt.iterExtendBytes(out, rt.iterRev(peek), "next"); } } +/** + * `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its + * `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One + * fold panics past `k` items, with what was logged so far. + */ +export function folded$ends_Counted(it: ends_Counted.Counted, pick: rt.u8, k: rt.usize, log: rt.RefCell, out: rt.ByteVec): void { + let _27!: Uint8Array; + let _38!: Uint8Array; + let _53!: Uint8Array; + const k8: rt.u8 = k & 0xff; + if (pick === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), 1, (a12: rt.u8, b13: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a12, 3) ^ b13; + })); + } else if (pick === 1) { + const _10: ends_Counted.Counted = it; + const _11: (a0: rt.u8, a1: rt.u8) => rt.u8 = (a11: rt.u8, b12: rt.u8): rt.u8 => { + if (!(k < 15)) { + if (!(b12 !== 2)) { + const _1110: rt.ByteSlice = rt.byteVecSlice(rt.refCellBorrow(log).value); + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u8Display(b12, f), (f: rt.Formatter) => rt.fmtList(rt.byteSliceView(_1110), f, rt.u8Debug)]; + rt.panicFmt(["rfold at ", args2[0], " after ", args2[1]]); + } + } + return rt.u8WrappingMul(a11, 3) ^ b12; + }; + rt.byteVecPush(out, rt.iterRfold(rt.iterFrom(_10, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), 1, _11)); + } else if (pick === 2) { + if (!(rt.usizeRem(k, 2) === 0)) { + const r: rt.u8 | undefined | rt.None = rt.iterTryRfold(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), undefined as rt.u8 | undefined, (a10: rt.u8 | undefined, b11: rt.u8): rt.u8 | undefined | rt.None => { + const _410: rt.u8 = rt.u8Rem(b11, 3); + if (_410 === 0) { + return rt.None; + } + if (_410 === 1) { + return undefined; + } + return option_or$1loyskh(a10, b11); + }, true, undefined, rt.None); + if (r === rt.None) { + _27 = Uint8Array.of(1, 0); + } else { + _27 = Uint8Array.of(0, option_unwrapOr$0r2bmpr(r, 255)); + } + rt.iterExtendBytes(out, rt.iterSlice(_27), undefined, true); + rt.iterExtendBytes(out, rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), "next"); + } else { + const _19: (a0: rt.u8, a1: rt.u8) => rt.u8 | undefined = (a9: rt.u8, b10: rt.u8): rt.u8 | undefined => { + return thenSome$0d5am30(b10 !== k8, a9 ^ b10); + }; + put(out, rt.iterTryRfold(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), 0, _19, true)); + rt.iterExtendBytes(out, rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), "next"); + } + } else if (pick === 3) { + const _35: (a0: rt.u8, a1: rt.u8) => rt.Result = (a8: rt.u8, b9: rt.u8): rt.Result => { + if (!(rt.u8Rem(b9, 4) === rt.u8Rem(k8, 4))) { + return rt.Ok(a8 ^ b9); + } + return rt.Err(b9); + }; + const r2: rt.Result = rt.iterTryRfold(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), 0, _35); + if (r2.ok) { + _38 = Uint8Array.of(0, r2.value); + } else { + _38 = Uint8Array.of(1, r2.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_38), undefined, true); + put(out, rt.iterToOption(ends_Counted.next$iter_Iterator(it))); + } else if (pick === 4) { + const r3: rt.Result = rt.iterTryRfold(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })), 0, (a7: rt.u8, b8: rt.u8): rt.Result => { + if (!(b8 > k8)) { + return rt.Ok(a7 ^ b8); + } + return rt.Err(b8); + }); + if (r3.ok) { + _53 = Uint8Array.of(0, r3.value); + } else { + _53 = Uint8Array.of(1, r3.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_53), undefined, true); + rt.byteVecPush(out, ends_Counted.len$iter_ExactSizeIterator(it) & 0xff); + } else if (pick === 5) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.byteVecPush(out, rt.iterCount(rt.iterMap(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), (b7: rt.u8): rt.u8 => { + return b7 ^ 1; + })) & 0xff); + } else { + rt.byteVecPush(out, rt.iterCount(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })) & 0xff); + } + } else if (pick === 6) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })))); + } else { + put(out, rt.iterLast(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }))); + } + } else if (pick === 7) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.iterForEach(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), (b6: rt.u8): undefined => { + rt.byteVecPush(out, b6); + }); + } else { + rt.byteVecPush(out, rt.iterSum(rt.iterMap(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), (a0: rt.u8): rt.u32 => { + return a0 as rt.u32; + }), rt.u32Add, 0) & 0xff); + } + } else if (pick === 8) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterMinByKey(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), (b5: rt.u8): rt.u8 => { + return rt.u8Rem(b5, 3); + }, rt.lt)); + } else { + put(out, rt.iterMax(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), rt.lt)); + } + } else if (pick === 9) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterLast(rt.iterChain(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), rt.iterSlice(Uint8Array.of(7, 8))))); + } else { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), rt.iterSlice(Uint8Array.of(7, 8)))) & 0xff); + } + } else if (pick === 10) { + if (!(rt.usizeRem(k, 2) === 0)) { + const _118: ends_Counted.Counted = it; + const _119: rt.usize = rt.usizeDiv(k, 2); + put(out, rt.iterLast(rt.iterSkip(rt.iterFrom(_118, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _119))); + } else { + const _113: ends_Counted.Counted = it; + const _114: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterFrom(_113, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _114)) & 0xff); + } + } else if (pick === 11) { + const _121: rt.usize = rt.usizeRem(k, 4); + if (_121 === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })), 1, (a6: rt.u8, b4: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a6, 5) ^ b4; + })); + } else if (_121 === 1) { + put(out, rt.iterNth(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })), rt.usizeDiv(k, 4))); + } else if (_121 === 2) { + put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })))); + } else { + rt.byteVecPush(out, rt.iterRfold(rt.iterRev(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })), 1, (a5: rt.u8, b3: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a5, 5) ^ b3; + })); + } + } else if (pick === 12) { + const _139: ends_Counted.Counted = it; + const _140: rt.usize = rt.usizeDiv(k, 2); + const skip: rt.Iter = rt.iterSkip(rt.iterFrom(_139, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _140); + put(out, rt.iterToOption(skip.next())); + put(out, rt.iterToOption(skip.nextBack())); + } else if (pick === 13) { + const _150: ends_Counted.Counted = it; + const _151: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + putVec(out, rt.iterToByteVec(rt.iterStepBy(rt.iterFrom(_150, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _151), "next")); + } else if (pick === 14) { + if (!(rt.usizeRem(k, 2) === 0)) { + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, rt.iterCount(peek) & 0xff); + } else { + put(out, rt.iterLast(rt.iterFuse(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator })))); + } + } else { + const _175: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.iterFold(rt.iterTake(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }), _175), 0, (a4: rt.u8, _3: rt.u8): rt.u8 => { + return rt.u8Add(a4, 1); + })); + put(out, rt.iterLast(rt.iterFrom(it, ends_Counted.next$iter_Iterator, undefined, { hint: ends_Counted.sizeHint$iter_Iterator, back: (it: ends_Counted.Counted) => rt.iterFromOption(ends_Counted.nextBack$iter_DoubleEndedIterator(it)), len: ends_Counted.len$iter_ExactSizeIterator }))); + rt.byteVecPush(out, ends_Counted.len$iter_ExactSizeIterator(it) & 0xff); + } +} + +/** + * `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its + * `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One + * fold panics past `k` items, with what was logged so far. + */ +export function folded$ends_Overrides(it: Overrides.Overrides, pick: rt.u8, k: rt.usize, log: rt.RefCell, out: rt.ByteVec): void { + let _27!: Uint8Array; + let _38!: Uint8Array; + let _53!: Uint8Array; + const k8: rt.u8 = k & 0xff; + if (pick === 0) { + rt.byteVecPush(out, Overrides.fold$iter_Iterator_u8_ends_folded_closure0_ends_Overrides(it, 1, (a12: rt.u8, b13: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a12, 3) ^ b13; + })); + } else if (pick === 1) { + rt.byteVecPush(out, Overrides.rfold$iter_DoubleEndedIterator_u8_ends_folded_closure1_ends_Overrides(it, 1, (a11: rt.u8, b12: rt.u8): rt.u8 => { + if (!(k < 15)) { + if (!(b12 !== 2)) { + const _1110: rt.ByteSlice = rt.byteVecSlice(rt.refCellBorrow(log).value); + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u8Display(b12, f), (f: rt.Formatter) => rt.fmtList(rt.byteSliceView(_1110), f, rt.u8Debug)]; + rt.panicFmt(["rfold at ", args2[0], " after ", args2[1]]); + } + } + return rt.u8WrappingMul(a11, 3) ^ b12; + })); + } else if (pick === 2) { + if (!(rt.usizeRem(k, 2) === 0)) { + const r: rt.u8 | undefined | rt.None = rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), undefined as rt.u8 | undefined, (a10: rt.u8 | undefined, b11: rt.u8): rt.u8 | undefined | rt.None => { + const _410: rt.u8 = rt.u8Rem(b11, 3); + if (_410 === 0) { + return rt.None; + } + if (_410 === 1) { + return undefined; + } + return option_or$1loyskh(a10, b11); + }, true, undefined, rt.None); + if (r === rt.None) { + _27 = Uint8Array.of(1, 0); + } else { + _27 = Uint8Array.of(0, option_unwrapOr$0r2bmpr(r, 255)); + } + rt.iterExtendBytes(out, rt.iterSlice(_27), undefined, true); + rt.iterExtendBytes(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), "next"); + } else { + const _19: (a0: rt.u8, a1: rt.u8) => rt.u8 | undefined = (a9: rt.u8, b10: rt.u8): rt.u8 | undefined => { + return thenSome$0d5am30(b10 !== k8, a9 ^ b10); + }; + put(out, rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), 0, _19, true)); + rt.iterExtendBytes(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), "next"); + } + } else if (pick === 3) { + const _35: (a0: rt.u8, a1: rt.u8) => rt.Result = (a8: rt.u8, b9: rt.u8): rt.Result => { + if (!(rt.u8Rem(b9, 4) === rt.u8Rem(k8, 4))) { + return rt.Ok(a8 ^ b9); + } + return rt.Err(b9); + }; + const r2: rt.Result = rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), 0, _35); + if (r2.ok) { + _38 = Uint8Array.of(0, r2.value); + } else { + _38 = Uint8Array.of(1, r2.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_38), undefined, true); + put(out, rt.iterToOption(Overrides.next$iter_Iterator(it))); + } else if (pick === 4) { + const r3: rt.Result = rt.iterTryRfold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), 0, (a7: rt.u8, b8: rt.u8): rt.Result => { + if (!(b8 > k8)) { + return rt.Ok(a7 ^ b8); + } + return rt.Err(b8); + }); + if (r3.ok) { + _53 = Uint8Array.of(0, r3.value); + } else { + _53 = Uint8Array.of(1, r3.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_53), undefined, true); + rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }).len() & 0xff); + } else if (pick === 5) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.byteVecPush(out, rt.ownedCount(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (b7: rt.u8): rt.u8 => { + return b7 ^ 1; + })) & 0xff); + } else { + rt.byteVecPush(out, Overrides.count$iter_Iterator(it) & 0xff); + } + } else if (pick === 6) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })))); + } else { + put(out, Overrides.last$iter_Iterator(it)); + } + } else if (pick === 7) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.iterForEach(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (b6: rt.u8): undefined => { + rt.byteVecPush(out, b6); + }, true); + } else { + rt.byteVecPush(out, rt.iterSum(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (a0: rt.u8): rt.u32 => { + return a0 as rt.u32; + }), rt.u32Add, 0, true) & 0xff); + } + } else if (pick === 8) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterMinByKey(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (b5: rt.u8): rt.u8 => { + return rt.u8Rem(b5, 3); + }, rt.lt, true)); + } else { + put(out, rt.iterMax(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), rt.lt, true)); + } + } else if (pick === 9) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.ownedLast(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), rt.iterSlice(Uint8Array.of(7, 8))))); + } else { + rt.byteVecPush(out, rt.ownedCount(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), rt.iterSlice(Uint8Array.of(7, 8)))) & 0xff); + } + } else if (pick === 10) { + if (!(rt.usizeRem(k, 2) === 0)) { + const _118: Overrides.Overrides = it; + const _119: rt.usize = rt.usizeDiv(k, 2); + put(out, rt.ownedLast(rt.iterSkip(rt.iterFrom(_118, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _119))); + } else { + const _113: Overrides.Overrides = it; + const _114: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.ownedCount(rt.iterSkip(rt.iterFrom(_113, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _114)) & 0xff); + } + } else if (pick === 11) { + const _121: rt.usize = rt.usizeRem(k, 4); + if (_121 === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), 1, (a6: rt.u8, b4: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a6, 5) ^ b4; + }, true)); + } else if (_121 === 1) { + put(out, rt.iterNth(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), rt.usizeDiv(k, 4))); + } else if (_121 === 2) { + put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })))); + } else { + rt.byteVecPush(out, rt.iterRfold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), 1, (a5: rt.u8, b3: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a5, 5) ^ b3; + }, true)); + } + } else if (pick === 12) { + const _139: Overrides.Overrides = it; + const _140: rt.usize = rt.usizeDiv(k, 2); + const skip: rt.Iter = rt.iterSkip(rt.iterFrom(_139, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _140); + put(out, rt.iterToOption(skip.next())); + put(out, rt.iterToOption(skip.nextBack())); + } else if (pick === 13) { + const _150: Overrides.Overrides = it; + const _151: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + putVec(out, rt.iterToByteVec(rt.iterStepBy(rt.iterFrom(_150, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), _151), "next")); + } else if (pick === 14) { + if (!(rt.usizeRem(k, 2) === 0)) { + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, rt.ownedCount(peek) & 0xff); + } else { + put(out, rt.ownedLast(rt.iterFuse(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })))); + } + } else { + const _175: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.iterFold(rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _175), 0, (a4: rt.u8, _3: rt.u8): rt.u8 => { + return rt.u8Add(a4, 1); + })); + put(out, rt.iterLast(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }))); + rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }).len() & 0xff); + } +} + +/** + * `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its + * `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One + * fold panics past `k` items, with what was logged so far. + */ +export function folded$ends_Run(it: ends_Run.Run, pick: rt.u8, k: rt.usize, log: rt.RefCell, out: rt.ByteVec): void { + let _27!: Uint8Array; + let _38!: Uint8Array; + let _53!: Uint8Array; + const k8: rt.u8 = k & 0xff; + if (pick === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), 1, (a12: rt.u8, b13: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a12, 3) ^ b13; + })); + } else if (pick === 1) { + const _10: ends_Run.Run = it; + const _11: (a0: rt.u8, a1: rt.u8) => rt.u8 = (a11: rt.u8, b12: rt.u8): rt.u8 => { + if (!(k < 15)) { + if (!(b12 !== 2)) { + const _1110: rt.ByteSlice = rt.byteVecSlice(rt.refCellBorrow(log).value); + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u8Display(b12, f), (f: rt.Formatter) => rt.fmtList(rt.byteSliceView(_1110), f, rt.u8Debug)]; + rt.panicFmt(["rfold at ", args2[0], " after ", args2[1]]); + } + } + return rt.u8WrappingMul(a11, 3) ^ b12; + }; + rt.byteVecPush(out, rt.iterRfold(rt.iterFrom(_10, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), 1, _11)); + } else if (pick === 2) { + if (!(rt.usizeRem(k, 2) === 0)) { + const r: rt.u8 | undefined | rt.None = rt.iterTryRfold(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), undefined as rt.u8 | undefined, (a10: rt.u8 | undefined, b11: rt.u8): rt.u8 | undefined | rt.None => { + const _410: rt.u8 = rt.u8Rem(b11, 3); + if (_410 === 0) { + return rt.None; + } + if (_410 === 1) { + return undefined; + } + return option_or$1loyskh(a10, b11); + }, true, undefined, rt.None); + if (r === rt.None) { + _27 = Uint8Array.of(1, 0); + } else { + _27 = Uint8Array.of(0, option_unwrapOr$0r2bmpr(r, 255)); + } + rt.iterExtendBytes(out, rt.iterSlice(_27), undefined, true); + rt.iterExtendBytes(out, rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), "next"); + } else { + const _19: (a0: rt.u8, a1: rt.u8) => rt.u8 | undefined = (a9: rt.u8, b10: rt.u8): rt.u8 | undefined => { + return thenSome$0d5am30(b10 !== k8, a9 ^ b10); + }; + put(out, rt.iterTryRfold(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), 0, _19, true)); + rt.iterExtendBytes(out, rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), "next"); + } + } else if (pick === 3) { + const _35: (a0: rt.u8, a1: rt.u8) => rt.Result = (a8: rt.u8, b9: rt.u8): rt.Result => { + if (!(rt.u8Rem(b9, 4) === rt.u8Rem(k8, 4))) { + return rt.Ok(a8 ^ b9); + } + return rt.Err(b9); + }; + const r2: rt.Result = rt.iterTryRfold(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), 0, _35); + if (r2.ok) { + _38 = Uint8Array.of(0, r2.value); + } else { + _38 = Uint8Array.of(1, r2.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_38), undefined, true); + put(out, rt.iterToOption(ends_Run.next$iter_Iterator(it))); + } else if (pick === 4) { + const r3: rt.Result = rt.iterTryRfold(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })), 0, (a7: rt.u8, b8: rt.u8): rt.Result => { + if (!(b8 > k8)) { + return rt.Ok(a7 ^ b8); + } + return rt.Err(b8); + }); + if (r3.ok) { + _53 = Uint8Array.of(0, r3.value); + } else { + _53 = Uint8Array.of(1, r3.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_53), undefined, true); + rt.byteVecPush(out, rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }).len() & 0xff); + } else if (pick === 5) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.byteVecPush(out, rt.iterCount(rt.iterMap(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), (b7: rt.u8): rt.u8 => { + return b7 ^ 1; + })) & 0xff); + } else { + rt.byteVecPush(out, rt.iterCount(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })) & 0xff); + } + } else if (pick === 6) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })))); + } else { + put(out, rt.iterLast(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }))); + } + } else if (pick === 7) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.iterForEach(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), (b6: rt.u8): undefined => { + rt.byteVecPush(out, b6); + }); + } else { + rt.byteVecPush(out, rt.iterSum(rt.iterMap(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), (a0: rt.u8): rt.u32 => { + return a0 as rt.u32; + }), rt.u32Add, 0) & 0xff); + } + } else if (pick === 8) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterMinByKey(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), (b5: rt.u8): rt.u8 => { + return rt.u8Rem(b5, 3); + }, rt.lt)); + } else { + put(out, rt.iterMax(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), rt.lt)); + } + } else if (pick === 9) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterLast(rt.iterChain(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), rt.iterSlice(Uint8Array.of(7, 8))))); + } else { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), rt.iterSlice(Uint8Array.of(7, 8)))) & 0xff); + } + } else if (pick === 10) { + if (!(rt.usizeRem(k, 2) === 0)) { + const _118: ends_Run.Run = it; + const _119: rt.usize = rt.usizeDiv(k, 2); + put(out, rt.iterLast(rt.iterSkip(rt.iterFrom(_118, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _119))); + } else { + const _113: ends_Run.Run = it; + const _114: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterFrom(_113, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _114)) & 0xff); + } + } else if (pick === 11) { + const _121: rt.usize = rt.usizeRem(k, 4); + if (_121 === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })), 1, (a6: rt.u8, b4: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a6, 5) ^ b4; + })); + } else if (_121 === 1) { + put(out, rt.iterNth(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })), rt.usizeDiv(k, 4))); + } else if (_121 === 2) { + put(out, rt.iterLast(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })))); + } else { + rt.byteVecPush(out, rt.iterRfold(rt.iterRev(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })), 1, (a5: rt.u8, b3: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a5, 5) ^ b3; + })); + } + } else if (pick === 12) { + const _139: ends_Run.Run = it; + const _140: rt.usize = rt.usizeDiv(k, 2); + const skip: rt.Iter = rt.iterSkip(rt.iterFrom(_139, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _140); + put(out, rt.iterToOption(skip.next())); + put(out, rt.iterToOption(skip.nextBack())); + } else if (pick === 13) { + const _150: ends_Run.Run = it; + const _151: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + putVec(out, rt.iterToByteVec(rt.iterStepBy(rt.iterFrom(_150, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _151), "next")); + } else if (pick === 14) { + if (!(rt.usizeRem(k, 2) === 0)) { + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, rt.iterCount(peek) & 0xff); + } else { + put(out, rt.iterLast(rt.iterFuse(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) })))); + } + } else { + const _175: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.iterFold(rt.iterTake(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }), _175), 0, (a4: rt.u8, _3: rt.u8): rt.u8 => { + return rt.u8Add(a4, 1); + })); + put(out, rt.iterLast(rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }))); + rt.byteVecPush(out, rt.iterFrom(it, ends_Run.next$iter_Iterator, undefined, { hint: ends_Run.sizeHint$iter_Iterator, back: (it: ends_Run.Run) => rt.iterFromOption(ends_Run.nextBack$iter_DoubleEndedIterator(it)) }).len() & 0xff); + } +} + /** * `fuse` of a `Flicker`, which reads on past its first `None`, or of a `Lapse`, which * doesn't, read by the bits of `bits` from either end. @@ -302,7 +931,7 @@ export function consumed$ends_Run(it: ends_Run.Run, pick: rt.u8, k: rt.usize, ou export function fuses(bits: rt.u8, out: rt.ByteVec): void { let _12!: rt.i32; const start: rt.u8 = bits >> 4; - const fused: rt.Iter = rt.iterFuse(rt.iterFrom({ _0: start }, (it: Flicker.Flicker) => Flicker.next$iter_Iterator(it), undefined, undefined, (it: Flicker.Flicker) => rt.iterFromOption(Flicker.nextBack$iter_DoubleEndedIterator(it))), true); + const fused: rt.Iter = rt.iterFuse(rt.iterFrom({ _0: start }, Flicker.next$iter_Iterator, undefined, { back: (it: Flicker.Flicker) => rt.iterFromOption(Flicker.nextBack$iter_DoubleEndedIterator(it)) }), true); let iterStart: rt.i32 = 0; const iterEnd: rt.i32 = 6; while ((_12 = iterStart++) < iterEnd) { @@ -312,13 +941,13 @@ export function fuses(bits: rt.u8, out: rt.ByteVec): void { put(out, rt.iterToOption(fused.nextBack())); } } - const lapsed: rt.Iter = rt.iterFuse(rt.iterFrom({ _0: { _0: start } }, (it: Lapse.Lapse) => Lapse.next$iter_Iterator(it))); + const lapsed: rt.Iter = rt.iterFuse(rt.iterFrom({ _0: { _0: start } }, Lapse.next$iter_Iterator)); let iterStart2: rt.i32 = 0; const iterEnd2: rt.i32 = 4; while (iterStart2++ < iterEnd2) { put(out, rt.iterToOption(lapsed.next())); } - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterTake(rt.iterFlatten(rt.iterSlice([{ _0: start }, { _0: rt.u8WrappingAdd(start, 1) }]), (value: Flicker.Flicker) => rt.iterFrom(value, (it: Flicker.Flicker) => Flicker.next$iter_Iterator(it), undefined, undefined, (it: Flicker.Flicker) => rt.iterFromOption(Flicker.nextBack$iter_DoubleEndedIterator(it))), true), 5), "next")), undefined, true); + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterTake(rt.iterFlatten(rt.iterSlice([{ _0: start }, { _0: rt.u8WrappingAdd(start, 1) }]), (value: Flicker.Flicker) => rt.iterFrom(value, Flicker.next$iter_Iterator, undefined, { back: (it: Flicker.Flicker) => rt.iterFromOption(Flicker.nextBack$iter_DoubleEndedIterator(it)) }), true), 5), "next")), undefined, true); } //# sourceMappingURL=ends.ts.map diff --git a/ts/fixtures/lang/expected/hints.ts b/ts/fixtures/lang/expected/hints.ts index bc9e248aa..eaceb31e8 100644 --- a/ts/fixtures/lang/expected/hints.ts +++ b/ts/fixtures/lang/expected/hints.ts @@ -1369,13 +1369,13 @@ export function walkFront$collections_hash_set_Iter_u8(it: rt.Iter, steps /** As `walk`, of an iterator that reads only from the front. */ export function walkFront$hints_Countdown(it: hints_Countdown.Countdown, steps: rt.u8, out: rt.ByteVec): void { - put(out, rt.iterFrom(it, (it: hints_Countdown.Countdown) => hints_Countdown.next$iter_Iterator(it)).sizeHint()); + put(out, rt.iterFrom(it, hints_Countdown.next$iter_Iterator).sizeHint()); const _9: rt.u8 = rt.u8Rem(steps, 4); let iterStart: rt.u8 = 0; const iterEnd: rt.u8 = _9; while (iterStart++ < iterEnd) { rt.iterToOption(hints_Countdown.next$iter_Iterator(it)); - put(out, rt.iterFrom(it, (it: hints_Countdown.Countdown) => hints_Countdown.next$iter_Iterator(it)).sizeHint()); + put(out, rt.iterFrom(it, hints_Countdown.next$iter_Iterator).sizeHint()); } } @@ -1702,7 +1702,6 @@ export function u32Of(n: rt.u64): rt.u32 { * front or the back by the third byte's other bits. */ export function hints(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { - let it!: rt.Peekable; const at: (a0: rt.usize) => rt.u8 = (i: rt.usize): rt.u8 => { return option_unwrapOr$0r2bmpr(rt.byteSliceGet(data, i), 0); }; @@ -1779,7 +1778,7 @@ export function hints(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { } else { const _131: Endless.Endless = { _0: n }; const _132: rt.usize = rt.usizeRem(rt.u64Low(n), 9); - walkFront$iter_Chain_iter_Take_hints_Endless_ops_Range_u64(rt.iterChain(rt.iterTake(rt.iterFrom(_131, (it: Endless.Endless) => Endless.next$iter_Iterator(it)), _132), new rt.Range(0, m, rt.u64Step)), steps, out); + walkFront$iter_Chain_iter_Take_hints_Endless_ops_Range_u64(rt.iterChain(rt.iterTake(rt.iterFrom(_131, Endless.next$iter_Iterator), _132), new rt.Range(0, m, rt.u64Step)), steps, out); } } else if (_37 === 5) { const _136: rt.u8 = rt.u8Rem(arm, 4); @@ -1788,11 +1787,11 @@ export function hints(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { } else if (_136 === 1) { const _142: Endless.Endless = { _0: n }; const _143: rt.Range = new rt.Range(0, u32Of(m)); - walkFront$iter_Zip_hints_Endless_ops_Range_u32(rt.iterZip(rt.iterFrom(_142, (it: Endless.Endless) => Endless.next$iter_Iterator(it)), _143), steps, out); + walkFront$iter_Zip_hints_Endless_ops_Range_u32(rt.iterZip(rt.iterFrom(_142, Endless.next$iter_Iterator), _143), steps, out); } else if (_136 === 2) { walk$iter_Zip_slice_Iter_u8_iter_Skip_slice_Iter_u8(rt.iterZip(rt.iterSlice(rt.byteSliceView(bytes)), rt.iterSkip(rt.iterSlice(rt.byteSliceView(bytes)), 1), [false, false]), steps, out); } else { - walkFront$iter_Zip_ops_Range_u32_hints_Endless(rt.iterZip(new rt.Range(0, u32Of(n)), rt.iterFrom({ _0: n }, (it: Endless.Endless) => Endless.next$iter_Iterator(it))), steps, out); + walkFront$iter_Zip_ops_Range_u32_hints_Endless(rt.iterZip(new rt.Range(0, u32Of(n)), rt.iterFrom({ _0: n }, Endless.next$iter_Iterator)), steps, out); } } else if (_37 === 6) { const _153: rt.u8 = rt.u8Rem(arm, 4); @@ -1801,11 +1800,11 @@ export function hints(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { } else if (_153 === 1) { walk$iter_Take_ops_Range_u32(rt.iterTake(new rt.Range(0, u32Of(n)), rt.u64Low(m)), steps, out); } else if (_153 === 2) { - walkFront$iter_Take_hints_Endless(rt.iterTake(rt.iterFrom({ _0: n }, (it: Endless.Endless) => Endless.next$iter_Iterator(it)), rt.u64Low(m)), steps, out); + walkFront$iter_Take_hints_Endless(rt.iterTake(rt.iterFrom({ _0: n }, Endless.next$iter_Iterator), rt.u64Low(m)), steps, out); } else { const _166: Endless.Endless = { _0: n }; const _167: rt.usize = rt.usizeRem(rt.u64Low(m), 9); - walkFront$iter_Skip_hints_Endless(rt.iterSkip(rt.iterFrom(_166, (it: Endless.Endless) => Endless.next$iter_Iterator(it)), _167), steps, out); + walkFront$iter_Skip_hints_Endless(rt.iterSkip(rt.iterFrom(_166, Endless.next$iter_Iterator), _167), steps, out); } } else if (_37 === 7) { const step: rt.usize = rt.usizeAdd(rt.usizeRem(at(1) as rt.usize, 7), 1); @@ -1842,7 +1841,7 @@ export function hints(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { return rt.u64CheckedSub(i17, 1); }), steps, out); } else { - walkFront$iter_Filter_hints_Endless_hints_hints_closure6(rt.iterFilter(rt.iterFrom({ _0: n }, (it: Endless.Endless) => Endless.next$iter_Iterator(it)), (_250: rt.u64): boolean => { + walkFront$iter_Filter_hints_Endless_hints_hints_closure6(rt.iterFilter(rt.iterFrom({ _0: n }, Endless.next$iter_Iterator), (_250: rt.u64): boolean => { return true; }), steps, out); } @@ -1866,16 +1865,16 @@ export function hints(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { } else if (_37 === 10) { const _219: rt.u8 = rt.u8Rem(arm, 4); if (_219 === 0) { - walkFront$iter_Fuse_hints_Endless(rt.iterFuse(rt.iterFrom({ _0: n }, (it: Endless.Endless) => Endless.next$iter_Iterator(it))), steps, out); + walkFront$iter_Fuse_hints_Endless(rt.iterFuse(rt.iterFrom({ _0: n }, Endless.next$iter_Iterator)), steps, out); } else if (_219 === 1) { - walkFront$iter_Fuse_iter_Take_hints_Endless(rt.iterFuse(rt.iterTake(rt.iterFrom({ _0: n }, (it: Endless.Endless) => Endless.next$iter_Iterator(it)), 2)), steps, out); + walkFront$iter_Fuse_iter_Take_hints_Endless(rt.iterFuse(rt.iterTake(rt.iterFrom({ _0: n }, Endless.next$iter_Iterator), 2)), steps, out); } else if (_219 === 2) { walk$iter_Fuse_ops_Range_u64(rt.iterFuse(new rt.Range(0, n, rt.u64Step)), steps, out); } else { - walkFront$iter_Fuse_hints_Countdown(rt.iterFuse(rt.iterFrom({ _0: rt.u64Low(n) & 0xff }, (it: hints_Countdown.Countdown) => hints_Countdown.next$iter_Iterator(it))), steps, out); + walkFront$iter_Fuse_hints_Countdown(rt.iterFuse(rt.iterFrom({ _0: rt.u64Low(n) & 0xff }, hints_Countdown.next$iter_Iterator)), steps, out); } } else if (_37 === 11) { - it = rt.iterPeekable(rt.iterChain(new rt.Range(0, n, rt.u64Step), new rt.Range(0, m, rt.u64Step))); + const it: rt.Peekable = rt.iterPeekable(rt.iterChain(new rt.Range(0, n, rt.u64Step), new rt.Range(0, m, rt.u64Step))); put(out, it.sizeHint()); const _240: rt.u8 = rt.u8Rem(steps, 4); let iterStart: rt.u8 = 0; diff --git a/ts/fixtures/lang/expected/iters.ts b/ts/fixtures/lang/expected/iters.ts index 4c45f7da8..8ac54910c 100644 --- a/ts/fixtures/lang/expected/iters.ts +++ b/ts/fixtures/lang/expected/iters.ts @@ -1643,7 +1643,7 @@ export function own(data: rt.ByteSlice, out: rt.ByteVec): void { } rt.byteVecPush(out, _13); } - rt.byteVecExtendFromSlice(out, rt.byteSliceFrom(rt.u64ToBeBytes(rt.iterSum(rt.iterMap(rt.iterFrom({ left, step }, (it: iters_Countdown.Countdown) => iters_Countdown.next$iter_Iterator(it)), (n4: rt.u8): rt.u64 => { + rt.byteVecExtendFromSlice(out, rt.byteSliceFrom(rt.u64ToBeBytes(rt.iterSum(rt.iterMap(rt.iterFrom({ left, step }, iters_Countdown.next$iter_Iterator), (n4: rt.u8): rt.u64 => { return rt.u64Div(rt.u64Mul(n4 as rt.u64, 1000), 7); }), rt.u64Add, 0)))); const down: iters_Countdown.Countdown = { left, step }; @@ -1658,9 +1658,9 @@ export function own(data: rt.ByteSlice, out: rt.ByteVec): void { } } rt.byteVecPush(out, down.left); - rt.byteVecExtendFromSlice(out, rt.byteVecSlice(rt.iterToByteVec(rt.iterFrom({ inner: rt.iterSlice(rt.byteSliceView(data)) }, (it: Evens.Evens) => Evens.next$iter_Iterator(it)), "next"))); + rt.byteVecExtendFromSlice(out, rt.byteVecSlice(rt.iterToByteVec(rt.iterFrom({ inner: rt.iterSlice(rt.byteSliceView(data)) }, Evens.next$iter_Iterator), "next"))); const byRef: Evens.Evens = { inner: rt.iterSlice(rt.byteSliceView(rt.byteSliceRange(data, rt.min(data.length, 1)))) }; - rt.byteVecExtendFromSlice(out, rt.byteVecSlice(rt.iterToByteVec(rt.iterTake(rt.iterFrom(byRef, (it: Evens.Evens) => Evens.next$iter_Iterator(it)), 2), "next"))); + rt.byteVecExtendFromSlice(out, rt.byteVecSlice(rt.iterToByteVec(rt.iterTake(rt.iterFrom(byRef, Evens.next$iter_Iterator), 2), "next"))); const iter2: Evens.Evens = byRef; while (true) { const _60: rt.u8 | rt.Done = Evens.next$iter_Iterator(iter2); @@ -1674,9 +1674,9 @@ export function own(data: rt.ByteSlice, out: rt.ByteVec): void { break; } } - rt.byteVecPush(out, rt.iterCount(rt.iterFrom(byRef, (it: Evens.Evens) => Evens.next$iter_Iterator(it))) & 0xff); - rt.byteVecExtendFromSlice(out, rt.byteVecSlice(rt.iterToByteVec(rt.iterFrom(new Halving.Halving(left), (it: Halving.Halving) => Halving.next$iter_Iterator_u8(it)), "next"))); - rt.byteVecExtendFromSlice(out, rt.byteSliceFrom(rt.u64ToBeBytes(rt.iterSum(rt.iterFrom(new Halving.Halving(rt.u64Mul(left as rt.u64, 4294967297)), (it: Halving.Halving) => Halving.next$iter_Iterator_u64(it)), rt.u64Add, 0)))); + rt.byteVecPush(out, rt.iterCount(rt.iterFrom(byRef, Evens.next$iter_Iterator)) & 0xff); + rt.byteVecExtendFromSlice(out, rt.byteVecSlice(rt.iterToByteVec(rt.iterFrom(new Halving.Halving(left), Halving.next$iter_Iterator_u8), "next"))); + rt.byteVecExtendFromSlice(out, rt.byteSliceFrom(rt.u64ToBeBytes(rt.iterSum(rt.iterFrom(new Halving.Halving(rt.u64Mul(left as rt.u64, 4294967297)), Halving.next$iter_Iterator_u64), rt.u64Add, 0)))); } /** diff --git a/ts/fixtures/lang/expected/strs.ts b/ts/fixtures/lang/expected/strs.ts index a3e6f98f0..a7a89e7e8 100644 --- a/ts/fixtures/lang/expected/strs.ts +++ b/ts/fixtures/lang/expected/strs.ts @@ -1229,7 +1229,7 @@ export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { rt.iterEmpty(); fmt_put(out, rt.stringExtendChars("", rt.iterEmpty() as rt.Iter)); fmt_put(out, rt.stringExtendChars("", rt.iterOption(rt.charFromU32(kind as rt.u32)))); - fmt_put(out, rt.stringExtendChars("", rt.iterFrom({ items: chars, nexts }, (it: strs_Counted.Counted) => strs_Counted.next$iter_Iterator_char(it)))); + fmt_put(out, rt.stringExtendChars("", rt.iterFrom({ items: chars, nexts }, strs_Counted.next$iter_Iterator_char))); } else if (_21 === 1) { fmt_put(out, rt.stringExtend("", rt.iterSlice(parts))); fmt_put(out, rt.stringExtend("", rt.iterRev(rt.strSplit(s, "/")))); @@ -1252,7 +1252,7 @@ export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { fmt_put(out, rt.stringFromStrings(rt.iterMap(rt.iterSlice(owned), (p7: string): string => { return p7; }))); - fmt_put(out, rt.stringFromStrings(rt.iterFrom({ items: owned, nexts }, (it: strs_Counted.Counted) => strs_Counted.next$iter_Iterator_String(it)))); + fmt_put(out, rt.stringFromStrings(rt.iterFrom({ items: owned, nexts }, strs_Counted.next$iter_Iterator_String))); } else if (_21 === 2) { let t: string = "é"; const _153: rt.char[] = chars; @@ -1263,7 +1263,7 @@ export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { rt.iterEmpty(); named.name = rt.stringExtendChars(named.name, rt.iterEmpty() as rt.Iter); const counted3: strs_Counted.Counted = { items: chars, nexts }; - t = rt.stringExtendChars(t, rt.iterFrom(counted3, (it: strs_Counted.Counted) => strs_Counted.next$iter_Iterator_char(it))); + t = rt.stringExtendChars(t, rt.iterFrom(counted3, strs_Counted.next$iter_Iterator_char)); fmt_put(out, t); } else { let t2: string = ""; @@ -1283,7 +1283,7 @@ export function iters(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { rt.iterEmpty(); named.name = rt.stringExtend(named.name, rt.iterEmpty() as rt.Iter); const counted4: strs_Counted.Counted = { items: parts, nexts }; - t2 = rt.stringExtend(t2, rt.iterFrom(counted4, (it: strs_Counted.Counted) => strs_Counted.next$iter_Iterator_ref_str(it))); + t2 = rt.stringExtend(t2, rt.iterFrom(counted4, strs_Counted.next$iter_Iterator_ref_str)); fmt_put(out, t2); } fmt_put(out, named.name); diff --git a/ts/fixtures/lang/src/ends.rs b/ts/fixtures/lang/src/ends.rs index 3241450f6..fa8665190 100644 --- a/ts/fixtures/lang/src/ends.rs +++ b/ts/fixtures/lang/src/ends.rs @@ -1,6 +1,7 @@ //! The crate's own iterators that read from the back, know their length, and say they stay -//! ended, with their own size hints: std's adaptors and consumers call each method where -//! native's do, and `fuse` reads on past the end of one that says it stays ended. +//! ended, with their own size hints, `nth`s, folds, `count`, and `last`: std's adaptors and +//! consumers call each method where native's do, and `fuse` reads on past the end of one +//! that says it stays ended. use std::cell::RefCell; use std::iter::FusedIterator; @@ -87,6 +88,75 @@ impl ExactSizeIterator for Counted<'_> { } } +/// A `Run` with its own `nth`, `nth_back`, `fold`, `rfold`, `count`, and `last`, each logged +/// as `N`, `B`, `f`, `r`, `c`, and `L`, which std's adaptors and consumers call in place of +/// `next` and `next_back`. Its `count` reads nothing, and its `last` reads from the back. +struct Overrides<'a>(Run<'a>); + +impl Iterator for Overrides<'_> { + type Item = u8; + + fn next(&mut self) -> Option { + self.0.next() + } + + fn size_hint(&self) -> (usize, Option) { + self.0.size_hint() + } + + fn nth(&mut self, n: usize) -> Option { + self.0.logged(b'N'); + for _ in 0..n { + self.0.next()?; + } + self.0.next() + } + + fn fold B>(mut self, init: B, mut f: F) -> B { + self.0.logged(b'f'); + let mut acc = init; + while let Some(b) = self.0.next() { + acc = f(acc, b); + } + acc + } + + fn count(self) -> usize { + self.0.logged(b'c'); + usize::from(self.0.left()) + } + + fn last(mut self) -> Option { + self.0.logged(b'L'); + self.0.next_back() + } +} + +impl DoubleEndedIterator for Overrides<'_> { + fn next_back(&mut self) -> Option { + self.0.next_back() + } + + fn nth_back(&mut self, n: usize) -> Option { + self.0.logged(b'B'); + for _ in 0..n { + self.0.next_back()?; + } + self.0.next_back() + } + + fn rfold B>(mut self, init: B, mut f: F) -> B { + self.0.logged(b'r'); + let mut acc = init; + while let Some(b) = self.0.next_back() { + acc = f(acc, b); + } + acc + } +} + +impl ExactSizeIterator for Overrides<'_> {} + /// Yields every other call to `next`, from either end, ending between: a `FusedIterator` /// that isn't, which std's `fuse` reads on from as it would one that is. struct Flicker(u8); @@ -140,7 +210,8 @@ fn put_vec(out: &mut Vec, v: Vec) { /// The run `data`'s first byte picks steps through with each of its other bytes, read /// directly, through `&mut`, or by std's adaptors, and consumed by the third byte's pick, -/// with what each read and each call of its methods logged. +/// by `consumed`, or by `folded` past the fifth `kind`, with what each read and each call +/// of its methods logged. pub fn ends(kind: u8, data: &[u8], out: &mut Vec) { let [shape, consume, steps @ ..] = data else { return; @@ -170,9 +241,14 @@ pub fn ends(kind: u8, data: &[u8], out: &mut Vec) { } } let k = usize::from(consume >> 4); - match kind % 4 { - 0 => consumed(run, consume % 16, k, out), - 1 => consumed(Counted(run), consume % 16, k, out), + let (pick, folds) = (consume % 16, kind % 10 >= 5); + match kind % 5 { + 0 if folds => folded(run, pick, k, &log, out), + 1 if folds => folded(Counted(run), pick, k, &log, out), + 4 if folds => folded(Overrides(run), pick, k, &log, out), + 0 => consumed(run, pick, k, out), + 1 => consumed(Counted(run), pick, k, out), + 4 => consumed(Overrides(run), pick, k, out), 2 => fuses(*consume, out), _ => { // Mixed from either end, by the bits of `consume`, until they meet. @@ -249,6 +325,94 @@ fn consumed + ExactSizeIterator>(mut it: I, pi } } +/// `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its +/// `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One +/// fold panics past `k` items, with what was logged so far. +fn folded + ExactSizeIterator>(mut it: I, pick: u8, k: usize, log: &RefCell>, out: &mut Vec) { + let k8 = k as u8; + match pick { + 0 => out.push(it.fold(1u8, |a, b| a.wrapping_mul(3) ^ b)), + 1 => out.push(it.rfold(1u8, |a, b| { + assert!(k < 15 || b != 2, "rfold at {b} after {:?}", log.borrow().as_slice()); + a.wrapping_mul(3) ^ b + })), + // Each `try_rfold` breaks at an item, then the rest are read on by `next`. + 2 if k % 2 == 0 => { + put(out, it.try_rfold(0u8, |a, b| (b != k8).then_some(a ^ b))); + out.extend(it); + } + // Of an `Option` accumulator, whose `Some(None)` goes on and whose `None` breaks. + 2 => { + let r = it.try_rfold(None, |a: Option, b| match b % 3 { + 0 => None, + 1 => Some(None), + _ => Some(a.or(Some(b))), + }); + out.extend(match r { + Some(a) => [0, a.unwrap_or(0xff)], + None => [1, 0], + }); + out.extend(it); + } + 3 => { + let r: Result = it.try_rfold(0u8, |a, b| if b % 4 == k8 % 4 { Err(b) } else { Ok(a ^ b) }); + out.extend(match r { + Ok(a) => [0, a], + Err(b) => [1, b], + }); + put(out, it.next()); + } + 4 => { + use std::ops::ControlFlow; + let r = it.by_ref().rev().try_rfold(0u8, |a, b| match b > k8 { + true => ControlFlow::Break(b), + false => ControlFlow::Continue(a ^ b), + }); + out.extend(match r { + ControlFlow::Continue(a) => [0, a], + ControlFlow::Break(b) => [1, b], + }); + out.push(it.len() as u8); + } + 5 if k % 2 == 0 => out.push(it.count() as u8), + 5 => out.push(it.map(|b| b ^ 1).count() as u8), + 6 if k % 2 == 0 => put(out, it.last()), + 6 => put(out, it.rev().last()), + 7 if k % 2 == 0 => out.push(it.map(u32::from).sum::() as u8), + 7 => it.for_each(|b| out.push(b)), + 8 if k % 2 == 0 => put(out, it.max()), + 8 => put(out, it.min_by_key(|b| b % 3)), + 9 if k % 2 == 0 => out.push(it.chain([7, 8]).count() as u8), + 9 => put(out, it.chain([7, 8]).last()), + 10 if k % 2 == 0 => out.push(it.skip(k / 2).count() as u8), + 10 => put(out, it.skip(k / 2).last()), + 11 => match k % 4 { + 0 => out.push(it.rev().fold(1u8, |a, b| a.wrapping_mul(5) ^ b)), + 1 => put(out, it.rev().nth(k / 4)), + 2 => put(out, it.rev().last()), + _ => out.push(it.rev().rfold(1u8, |a, b| a.wrapping_mul(5) ^ b)), + }, + 12 => { + let mut skip = it.skip(k / 2); + put(out, skip.next()); + put(out, skip.next_back()); + } + 13 => put_vec(out, it.step_by(k / 4 + 1).collect()), + 14 if k % 2 == 0 => put(out, it.fuse().last()), + 14 => { + let mut peek = it.peekable(); + put(out, peek.peek().copied()); + out.push(peek.count() as u8); + } + // Through `&mut`, which reads by `try_fold` rather than its by-value methods. + _ => { + out.push((&mut it).take(k / 2).fold(0u8, |a, _| a + 1)); + put(out, (&mut it).last()); + out.push(it.len() as u8); + } + } +} + /// `fuse` of a `Flicker`, which reads on past its first `None`, or of a `Lapse`, which /// doesn't, read by the bits of `bits` from either end. fn fuses(bits: u8, out: &mut Vec) { diff --git a/ts/fixtures/reject/census.md b/ts/fixtures/reject/census.md index a1f7273ab..93e951eaa 100644 --- a/ts/fixtures/reject/census.md +++ b/ts/fixtures/reject/census.md @@ -38,7 +38,6 @@ | 2 | a raw pointer to a place of `()`, which has no address of its own | fixtures/reject/src/lib.rs:676:15 | | 2 | an upcast from `_` to `_`, which is not supported yet | fixtures/reject/src/lib.rs:474:32 | | 2 | comparing pointers to `_`, each a place JS makes of its own | fixtures/reject/src/lib.rs:544:2 | -| 2 | overriding `_`, which std's adaptors call in place of `next` or beside it | fixtures/reject/src/lib.rs:125:2 | | 2 | passing `_`, which drops, to `_`, which is not supported yet | fixtures/reject/src/lib.rs:275:4 | | 2 | unsupported type `_` from another crate | fixtures/reject/src/lib.rs:387:32 | | 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | fixtures/reject/src/lib.rs:709:2 | @@ -96,6 +95,8 @@ | 1 | hashing `_` as a key, which is not supported yet | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | fixtures/reject/src/lib.rs:266:16 | +| 1 | overriding `_` with its accumulator in an `Option` or a `_`, which is not supported yet | fixtures/reject/src/lib.rs:125:2 | +| 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | fixtures/reject/src/lib.rs:150:2 | | 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | fixtures/reject/src/lib.rs:530:1 | ## By API @@ -120,6 +121,7 @@ The type or module each refused type or path belongs to. | 3 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 3 | `Mid` | fixtures/reject/src/lib.rs:1303:34 | | 3 | `Outer` | fixtures/reject/src/lib.rs:1303:34 | +| 3 | `Poll` | fixtures/reject/src/lib.rs:72:20 | | 3 | `Reused` | fixtures/reject/src/lib.rs:21:4 | | 3 | `dyn std::any::Any` | fixtures/reject/src/lib.rs:474:32 | | 3 | `std::mem::ManuallyDrop` | fixtures/reject/src/lib.rs:2314:2 | @@ -132,7 +134,6 @@ The type or module each refused type or path belongs to. | 2 | `InTuple` | fixtures/reject/src/lib.rs:1254:9 | | 2 | `InWritten` | fixtures/reject/src/lib.rs:1274:9 | | 2 | `Inside` | fixtures/reject/src/lib.rs:1793:20 | -| 2 | `Poll` | fixtures/reject/src/lib.rs:72:20 | | 2 | `Scaled` | fixtures/reject/src/lib.rs:406:23 | | 2 | `[u32; 3]` | fixtures/reject/src/lib.rs:2138:10 | | 2 | `[u8; 2]` | fixtures/reject/src/lib.rs:1674:37 | @@ -428,8 +429,8 @@ The type or module each refused type or path belongs to. | 1 | hashing `_` as a key, which is not supported yet | `std::collections::BTreeSet` | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | `std::vec::Vec`, `Batched` | fixtures/reject/src/lib.rs:266:16 | -| 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | `DoubleEndedIterator::nth_back` | fixtures/reject/src/lib.rs:150:2 | -| 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | `Iterator::fold` | fixtures/reject/src/lib.rs:125:2 | +| 1 | overriding `_` with its accumulator in an `Option` or a `_`, which is not supported yet | `Iterator::fold`, `Poll` | fixtures/reject/src/lib.rs:125:2 | +| 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | `DoubleEndedIterator::rfind` | fixtures/reject/src/lib.rs:150:2 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `String::retain` | fixtures/reject/src/lib.rs:732:4 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `str::contains` | fixtures/reject/src/lib.rs:275:4 | | 1 | replacing the value behind a reference to `_` | `std::sync::MutexGuard` | fixtures/reject/src/lib.rs:112:2 | @@ -805,13 +806,6 @@ The type or module each refused type or path belongs to. -
overriding `_`, which std's adaptors call in place of `next` or beside it (2) - -- fixtures/reject/src/lib.rs:125:2: overriding `Iterator::fold`, which std's adaptors call in place of `next` or beside it -- fixtures/reject/src/lib.rs:150:2: overriding `DoubleEndedIterator::nth_back`, which std's adaptors call in place of `next` or beside it - -
-
passing `_`, which drops, to `_`, which is not supported yet (2) - fixtures/reject/src/lib.rs:275:4: passing `{closure@fixtures/reject/src/lib.rs:275:13: 275:27}`, which drops, to `str::contains`, which is not supported yet @@ -1156,6 +1150,18 @@ The type or module each refused type or path belongs to.
+
overriding `_` with its accumulator in an `Option` or a `_`, which is not supported yet (1) + +- fixtures/reject/src/lib.rs:125:2: overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet + +
+ +
overriding `_`, which std's adaptors call in place of `next` or beside it (1) + +- fixtures/reject/src/lib.rs:150:2: overriding `DoubleEndedIterator::rfind`, which std's adaptors call in place of `next` or beside it + +
+
union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart (1) - fixtures/reject/src/lib.rs:530:1: union `Bits`, whose fields overlap in `u32` and `f64`, which JS keeps apart diff --git a/ts/fixtures/reject/expected.txt b/ts/fixtures/reject/expected.txt index 4ebe54150..4d9b73fee 100644 --- a/ts/fixtures/reject/expected.txt +++ b/ts/fixtures/reject/expected.txt @@ -241,8 +241,8 @@ memory from `alloc` cast to pointers to `i32` and to `u32`, which reads the byte memory from `alloc` cast to pointers to `i32` and to `u32`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:2297:17 memory from `alloc` cast to pointers to `u32` and to `i32`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:2298:21 memory from `alloc` cast to pointers to `i32` and to `u32`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:2300:17 -overriding `Iterator::fold`, which std's adaptors call in place of `next` or beside it at fixtures/reject/src/lib.rs:125:2 -overriding `DoubleEndedIterator::nth_back`, which std's adaptors call in place of `next` or beside it at fixtures/reject/src/lib.rs:150:2 +overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet at fixtures/reject/src/lib.rs:125:2 +overriding `DoubleEndedIterator::rfind`, which std's adaptors call in place of `next` or beside it at fixtures/reject/src/lib.rs:150:2 a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Escaped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1020:43 a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Called`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1034:28 a raw pointer to `(u16, u16)` in `Copied`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1124:31 diff --git a/ts/fixtures/reject/src/lib.rs b/ts/fixtures/reject/src/lib.rs index b69a8f453..41e48beb8 100644 --- a/ts/fixtures/reject/src/lib.rs +++ b/ts/fixtures/reject/src/lib.rs @@ -112,7 +112,7 @@ pub fn swap_guards<'a>(a: &mut std::sync::MutexGuard<'a, u8>, b: &mut std::sync: std::mem::swap(a, b); } -/// An iterator whose `fold` std's adaptors would call in place of its `next`. +/// An iterator whose own `fold` holds its accumulator in an `Option`, of an `rt.None` or not. pub struct Folds; impl Iterator for Folds { @@ -123,7 +123,7 @@ impl Iterator for Folds { } fn fold B>(self, init: B, _f: F) -> B { - init + Some(init).unwrap() } } @@ -131,7 +131,7 @@ pub fn folds() -> usize { Folds.map(|b| b + 1).count() } -/// An iterator whose `nth_back` std's adaptors would call in place of its `next_back`. +/// An iterator whose `rfind` std's adaptors would call in place of its `next_back`. pub struct Backs; impl Iterator for Backs { @@ -147,13 +147,13 @@ impl DoubleEndedIterator for Backs { None } - fn nth_back(&mut self, _n: usize) -> Option { + fn rfind bool>(&mut self, _p: P) -> Option { Some(0) } } -pub fn backs() -> usize { - Backs.rev().skip(1).count() +pub fn backs() -> Option { + Backs.rev().find(|&b| b == 0) } /// JS compares objects by identity, not by `PartialOrd`. diff --git a/ts/fixtures/stock/expected/hashlink/linked_hash_map.Keys.ts b/ts/fixtures/stock/expected/hashlink/linked_hash_map.Keys.ts index 312f5ddcf..54dd3fc38 100644 --- a/ts/fixtures/stock/expected/hashlink/linked_hash_map.Keys.ts +++ b/ts/fixtures/stock/expected/hashlink/linked_hash_map.Keys.ts @@ -25,7 +25,7 @@ export function nextBack$iter_DoubleEndedIterator_u16_u32(self: Keys): rt.usize { - return rt.iterFrom(self.inner, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it))).len(); + return rt.iterFrom(self.inner, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }).len(); } //# sourceMappingURL=linked_hash_map.Keys.ts.map diff --git a/ts/fixtures/stock/expected/hashlink/linked_hash_map.Values.ts b/ts/fixtures/stock/expected/hashlink/linked_hash_map.Values.ts index c869096d2..a8b52fc55 100644 --- a/ts/fixtures/stock/expected/hashlink/linked_hash_map.Values.ts +++ b/ts/fixtures/stock/expected/hashlink/linked_hash_map.Values.ts @@ -25,7 +25,7 @@ export function nextBack$iter_DoubleEndedIterator_u16_u32(self: Values): rt.usize { - return rt.iterFrom(self.inner, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it))).len(); + return rt.iterFrom(self.inner, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }).len(); } //# sourceMappingURL=linked_hash_map.Values.ts.map diff --git a/ts/fixtures/stock/expected/hashlink/linked_hash_map.ValuesMut.ts b/ts/fixtures/stock/expected/hashlink/linked_hash_map.ValuesMut.ts index beb590cfc..c46de6f79 100644 --- a/ts/fixtures/stock/expected/hashlink/linked_hash_map.ValuesMut.ts +++ b/ts/fixtures/stock/expected/hashlink/linked_hash_map.ValuesMut.ts @@ -25,7 +25,7 @@ export function nextBack$iter_DoubleEndedIterator_u16_u32(self: ValuesMut): rt.usize { - return rt.iterFrom(self.inner, (it: IterMut.IterMut) => IterMut.next$iter_Iterator_u16_u32(it), undefined, (it: IterMut.IterMut) => IterMut.sizeHint$iter_Iterator_u16_u32(it), (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it))).len(); + return rt.iterFrom(self.inner, IterMut.next$iter_Iterator_u16_u32, undefined, { hint: IterMut.sizeHint$iter_Iterator_u16_u32, back: (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }).len(); } //# sourceMappingURL=linked_hash_map.ValuesMut.ts.map diff --git a/ts/fixtures/stock/expected/maps.ts b/ts/fixtures/stock/expected/maps.ts index ecfd975f6..e50e57e21 100644 --- a/ts/fixtures/stock/expected/maps.ts +++ b/ts/fixtures/stock/expected/maps.ts @@ -725,9 +725,9 @@ export function ends$hashlink_linked_hash_map_Drain_u16_u32_maps_linked_iters_cl } else if (_20 === 1) { item = linked_hash_map_Drain.nextBack$iter_DoubleEndedIterator_u16_u32(it); } else if (_20 === 2) { - item = rt.iterNth(rt.iterFrom(it, (it: linked_hash_map_Drain.Drain) => linked_hash_map_Drain.next$iter_Iterator_u16_u32(it), lib_drop$hashlink_linked_hash_map_Drain_u16_u32, (it: linked_hash_map_Drain.Drain) => linked_hash_map_Drain.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Drain.Drain) => rt.iterFromOption(linked_hash_map_Drain.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNth(rt.iterFrom(it, linked_hash_map_Drain.next$iter_Iterator_u16_u32, lib_drop$hashlink_linked_hash_map_Drain_u16_u32, { hint: linked_hash_map_Drain.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Drain.Drain) => rt.iterFromOption(linked_hash_map_Drain.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } else { - item = rt.iterNthBack(rt.iterFrom(it, (it: linked_hash_map_Drain.Drain) => linked_hash_map_Drain.next$iter_Iterator_u16_u32(it), lib_drop$hashlink_linked_hash_map_Drain_u16_u32, (it: linked_hash_map_Drain.Drain) => linked_hash_map_Drain.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Drain.Drain) => rt.iterFromOption(linked_hash_map_Drain.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNthBack(rt.iterFrom(it, linked_hash_map_Drain.next$iter_Iterator_u16_u32, lib_drop$hashlink_linked_hash_map_Drain_u16_u32, { hint: linked_hash_map_Drain.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Drain.Drain) => rt.iterFromOption(linked_hash_map_Drain.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } put(out, option_mapOr$0iaogpf(item, 256, f)); const _32: [rt.usize, rt.usize | undefined] = linked_hash_map_Drain.sizeHint$iter_Iterator_u16_u32(it); @@ -736,7 +736,7 @@ export function ends$hashlink_linked_hash_map_Drain_u16_u32_maps_linked_iters_cl put(out, lower); put(out, option_unwrapOr$0l7j3f6(upper, 256)); } - const iter2: rt.Iter<[rt.u16, rt.u32]> = rt.iterRev(rt.iterFrom(it, (it: linked_hash_map_Drain.Drain) => linked_hash_map_Drain.next$iter_Iterator_u16_u32(it), lib_drop$hashlink_linked_hash_map_Drain_u16_u32, (it: linked_hash_map_Drain.Drain) => linked_hash_map_Drain.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Drain.Drain) => rt.iterFromOption(linked_hash_map_Drain.nextBack$iter_DoubleEndedIterator_u16_u32(it)))); + const iter2: rt.Iter<[rt.u16, rt.u32]> = rt.iterRev(rt.iterFrom(it, linked_hash_map_Drain.next$iter_Iterator_u16_u32, lib_drop$hashlink_linked_hash_map_Drain_u16_u32, { hint: linked_hash_map_Drain.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Drain.Drain) => rt.iterFromOption(linked_hash_map_Drain.nextBack$iter_DoubleEndedIterator_u16_u32(it)) })); while (true) { const _41: [rt.u16, rt.u32] | rt.Done = iter2.next(); if (_41 === rt.DONE) { @@ -768,9 +768,9 @@ export function ends$hashlink_linked_hash_map_IntoIter_u16_u32_maps_linked_iters } else if (_20 === 1) { item = linked_hash_map_IntoIter.nextBack$iter_DoubleEndedIterator_u16_u32(it); } else if (_20 === 2) { - item = rt.iterNth(rt.iterFrom(it, (it: linked_hash_map_IntoIter.IntoIter) => linked_hash_map_IntoIter.next$iter_Iterator_u16_u32(it), lib_drop$hashlink_linked_hash_map_IntoIter_u16_u32, (it: linked_hash_map_IntoIter.IntoIter) => linked_hash_map_IntoIter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_IntoIter.IntoIter) => rt.iterFromOption(linked_hash_map_IntoIter.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNth(rt.iterFrom(it, linked_hash_map_IntoIter.next$iter_Iterator_u16_u32, lib_drop$hashlink_linked_hash_map_IntoIter_u16_u32, { hint: linked_hash_map_IntoIter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_IntoIter.IntoIter) => rt.iterFromOption(linked_hash_map_IntoIter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } else { - item = rt.iterNthBack(rt.iterFrom(it, (it: linked_hash_map_IntoIter.IntoIter) => linked_hash_map_IntoIter.next$iter_Iterator_u16_u32(it), lib_drop$hashlink_linked_hash_map_IntoIter_u16_u32, (it: linked_hash_map_IntoIter.IntoIter) => linked_hash_map_IntoIter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_IntoIter.IntoIter) => rt.iterFromOption(linked_hash_map_IntoIter.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNthBack(rt.iterFrom(it, linked_hash_map_IntoIter.next$iter_Iterator_u16_u32, lib_drop$hashlink_linked_hash_map_IntoIter_u16_u32, { hint: linked_hash_map_IntoIter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_IntoIter.IntoIter) => rt.iterFromOption(linked_hash_map_IntoIter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } put(out, option_mapOr$0iaogpf(item, 256, f)); const _32: [rt.usize, rt.usize | undefined] = linked_hash_map_IntoIter.sizeHint$iter_Iterator_u16_u32(it); @@ -779,7 +779,7 @@ export function ends$hashlink_linked_hash_map_IntoIter_u16_u32_maps_linked_iters put(out, lower); put(out, option_unwrapOr$0l7j3f6(upper, 256)); } - const iter2: rt.Iter<[rt.u16, rt.u32]> = rt.iterRev(rt.iterFrom(it, (it: linked_hash_map_IntoIter.IntoIter) => linked_hash_map_IntoIter.next$iter_Iterator_u16_u32(it), lib_drop$hashlink_linked_hash_map_IntoIter_u16_u32, (it: linked_hash_map_IntoIter.IntoIter) => linked_hash_map_IntoIter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_IntoIter.IntoIter) => rt.iterFromOption(linked_hash_map_IntoIter.nextBack$iter_DoubleEndedIterator_u16_u32(it)))); + const iter2: rt.Iter<[rt.u16, rt.u32]> = rt.iterRev(rt.iterFrom(it, linked_hash_map_IntoIter.next$iter_Iterator_u16_u32, lib_drop$hashlink_linked_hash_map_IntoIter_u16_u32, { hint: linked_hash_map_IntoIter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_IntoIter.IntoIter) => rt.iterFromOption(linked_hash_map_IntoIter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) })); while (true) { const _41: [rt.u16, rt.u32] | rt.Done = iter2.next(); if (_41 === rt.DONE) { @@ -811,9 +811,9 @@ export function ends$hashlink_linked_hash_map_IterMut_u16_u32_maps_linked_iters_ } else if (_20 === 1) { item = IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it); } else if (_20 === 2) { - item = rt.iterNth(rt.iterFrom(it, (it: IterMut.IterMut) => IterMut.next$iter_Iterator_u16_u32(it), undefined, (it: IterMut.IterMut) => IterMut.sizeHint$iter_Iterator_u16_u32(it), (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNth(rt.iterFrom(it, IterMut.next$iter_Iterator_u16_u32, undefined, { hint: IterMut.sizeHint$iter_Iterator_u16_u32, back: (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } else { - item = rt.iterNthBack(rt.iterFrom(it, (it: IterMut.IterMut) => IterMut.next$iter_Iterator_u16_u32(it), undefined, (it: IterMut.IterMut) => IterMut.sizeHint$iter_Iterator_u16_u32(it), (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNthBack(rt.iterFrom(it, IterMut.next$iter_Iterator_u16_u32, undefined, { hint: IterMut.sizeHint$iter_Iterator_u16_u32, back: (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } put(out, option_mapOr$1noewr3(item, 256, f)); const _32: [rt.usize, rt.usize | undefined] = IterMut.sizeHint$iter_Iterator_u16_u32(it); @@ -822,7 +822,7 @@ export function ends$hashlink_linked_hash_map_IterMut_u16_u32_maps_linked_iters_ put(out, lower); put(out, option_unwrapOr$0l7j3f6(upper, 256)); } - const iter2: rt.Iter<[rt.u16, rt.Place]> = rt.iterRev(rt.iterFrom(it, (it: IterMut.IterMut) => IterMut.next$iter_Iterator_u16_u32(it), undefined, (it: IterMut.IterMut) => IterMut.sizeHint$iter_Iterator_u16_u32(it), (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)))); + const iter2: rt.Iter<[rt.u16, rt.Place]> = rt.iterRev(rt.iterFrom(it, IterMut.next$iter_Iterator_u16_u32, undefined, { hint: IterMut.sizeHint$iter_Iterator_u16_u32, back: (it: IterMut.IterMut) => rt.iterFromOption(IterMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)) })); while (true) { const _41: [rt.u16, rt.Place] | rt.Done = iter2.next(); if (_41 === rt.DONE) { @@ -853,9 +853,9 @@ export function ends$hashlink_linked_hash_map_Iter_u16_u32_maps_linked_iters_clo } else if (_20 === 1) { item = linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it); } else if (_20 === 2) { - item = rt.iterNth(rt.iterFrom(it, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNth(rt.iterFrom(it, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } else { - item = rt.iterNthBack(rt.iterFrom(it, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it))), n); + item = rt.iterNthBack(rt.iterFrom(it, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), n); } put(out, option_mapOr$0iaogpf(item, 256, f)); const _32: [rt.usize, rt.usize | undefined] = linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it); @@ -864,7 +864,7 @@ export function ends$hashlink_linked_hash_map_Iter_u16_u32_maps_linked_iters_clo put(out, lower); put(out, option_unwrapOr$0l7j3f6(upper, 256)); } - const iter2: rt.Iter<[rt.u16, rt.u32]> = rt.iterRev(rt.iterFrom(it, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)))); + const iter2: rt.Iter<[rt.u16, rt.u32]> = rt.iterRev(rt.iterFrom(it, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) })); while (true) { const _41: [rt.u16, rt.u32] | rt.Done = iter2.next(); if (_41 === rt.DONE) { @@ -895,9 +895,9 @@ export function ends$hashlink_linked_hash_map_Keys_u16_u32_maps_linked_iters_clo } else if (_20 === 1) { item = Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it); } else if (_20 === 2) { - item = rt.iterNth(rt.iterFrom(it, (it: Keys.Keys) => Keys.next$iter_Iterator_u16_u32(it), undefined, (it: Keys.Keys) => Keys.sizeHint$iter_Iterator_u16_u32(it), (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: Keys.Keys) => Keys.len$iter_ExactSizeIterator_u16_u32(it)), n); + item = rt.iterNth(rt.iterFrom(it, Keys.next$iter_Iterator_u16_u32, undefined, { hint: Keys.sizeHint$iter_Iterator_u16_u32, back: (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: Keys.len$iter_ExactSizeIterator_u16_u32 }), n); } else { - item = rt.iterNthBack(rt.iterFrom(it, (it: Keys.Keys) => Keys.next$iter_Iterator_u16_u32(it), undefined, (it: Keys.Keys) => Keys.sizeHint$iter_Iterator_u16_u32(it), (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: Keys.Keys) => Keys.len$iter_ExactSizeIterator_u16_u32(it)), n); + item = rt.iterNthBack(rt.iterFrom(it, Keys.next$iter_Iterator_u16_u32, undefined, { hint: Keys.sizeHint$iter_Iterator_u16_u32, back: (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: Keys.len$iter_ExactSizeIterator_u16_u32 }), n); } put(out, option_mapOr$0yixjb2(item, 256, f)); const _32: [rt.usize, rt.usize | undefined] = Keys.sizeHint$iter_Iterator_u16_u32(it); @@ -906,7 +906,7 @@ export function ends$hashlink_linked_hash_map_Keys_u16_u32_maps_linked_iters_clo put(out, lower); put(out, option_unwrapOr$0l7j3f6(upper, 256)); } - const iter2: rt.Iter = rt.iterRev(rt.iterFrom(it, (it: Keys.Keys) => Keys.next$iter_Iterator_u16_u32(it), undefined, (it: Keys.Keys) => Keys.sizeHint$iter_Iterator_u16_u32(it), (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: Keys.Keys) => Keys.len$iter_ExactSizeIterator_u16_u32(it))); + const iter2: rt.Iter = rt.iterRev(rt.iterFrom(it, Keys.next$iter_Iterator_u16_u32, undefined, { hint: Keys.sizeHint$iter_Iterator_u16_u32, back: (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: Keys.len$iter_ExactSizeIterator_u16_u32 })); while (true) { const _41: rt.u16 | rt.Done = iter2.next(); if (_41 === rt.DONE) { @@ -937,9 +937,9 @@ export function ends$hashlink_linked_hash_map_Values_u16_u32_maps_linked_iters_c } else if (_20 === 1) { item = linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it); } else if (_20 === 2) { - item = rt.iterNth(rt.iterFrom(it, (it: linked_hash_map_Values.Values) => linked_hash_map_Values.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Values.Values) => linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: linked_hash_map_Values.Values) => linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32(it)), n); + item = rt.iterNth(rt.iterFrom(it, linked_hash_map_Values.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32 }), n); } else { - item = rt.iterNthBack(rt.iterFrom(it, (it: linked_hash_map_Values.Values) => linked_hash_map_Values.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Values.Values) => linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: linked_hash_map_Values.Values) => linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32(it)), n); + item = rt.iterNthBack(rt.iterFrom(it, linked_hash_map_Values.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32 }), n); } put(out, option_mapOr$1vcgixw(item, 256, f)); const _32: [rt.usize, rt.usize | undefined] = linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32(it); @@ -948,7 +948,7 @@ export function ends$hashlink_linked_hash_map_Values_u16_u32_maps_linked_iters_c put(out, lower); put(out, option_unwrapOr$0l7j3f6(upper, 256)); } - const iter2: rt.Iter = rt.iterRev(rt.iterFrom(it, (it: linked_hash_map_Values.Values) => linked_hash_map_Values.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Values.Values) => linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: linked_hash_map_Values.Values) => linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32(it))); + const iter2: rt.Iter = rt.iterRev(rt.iterFrom(it, linked_hash_map_Values.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32 })); while (true) { const _41: rt.u32 | rt.Done = iter2.next(); if (_41 === rt.DONE) { @@ -994,7 +994,7 @@ export function linkedIters(dataData: Uint8Array, dataStart: number, dataLen: nu const _44: (a0: [rt.u16, rt.u32]) => undefined = (e2: [rt.u16, rt.u32]): undefined => { put(out, _34(e2)); }; - rt.iterForEach(rt.iterFrom(_42, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it))), _44); + rt.iterForEach(rt.iterFrom(_42, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }), _44); } else if (_35 === 2) { ends$hashlink_linked_hash_map_Keys_u16_u32_maps_linked_iters_closure3(LinkedHashMap.keys$u16_u32_hash_RandomState(m), new rt.ByteSlice(dataData, dataStart + 2, dataLen - 2), out, (k5: rt.u16): rt.usize => { return k5 as rt.usize; @@ -1016,14 +1016,14 @@ export function linkedIters(dataData: Uint8Array, dataStart: number, dataLen: nu } else if (_35 === 6) { it = LinkedHashMap.valuesMut$u16_u32_hash_RandomState(m); const _64: rt.usize = rt.usizeRem(k, 4); - put(out, option_mapOr$1787w44(rt.iterNthBack(rt.iterFrom(it, (it: ValuesMut.ValuesMut) => ValuesMut.next$iter_Iterator_u16_u32(it), undefined, (it: ValuesMut.ValuesMut) => ValuesMut.sizeHint$iter_Iterator_u16_u32(it), (it: ValuesMut.ValuesMut) => rt.iterFromOption(ValuesMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: ValuesMut.ValuesMut) => ValuesMut.len$iter_ExactSizeIterator_u16_u32(it)), _64), 256, (v: rt.Place): rt.usize => { + put(out, option_mapOr$1787w44(rt.iterNthBack(rt.iterFrom(it, ValuesMut.next$iter_Iterator_u16_u32, undefined, { hint: ValuesMut.sizeHint$iter_Iterator_u16_u32, back: (it: ValuesMut.ValuesMut) => rt.iterFromOption(ValuesMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: ValuesMut.len$iter_ExactSizeIterator_u16_u32 }), _64), 256, (v: rt.Place): rt.usize => { return v.v as rt.usize; })); put(out, ValuesMut.len$iter_ExactSizeIterator_u16_u32(it)); - rt.iterForEach(rt.iterRev(rt.iterFrom(it, (it: ValuesMut.ValuesMut) => ValuesMut.next$iter_Iterator_u16_u32(it), undefined, (it: ValuesMut.ValuesMut) => ValuesMut.sizeHint$iter_Iterator_u16_u32(it), (it: ValuesMut.ValuesMut) => rt.iterFromOption(ValuesMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: ValuesMut.ValuesMut) => ValuesMut.len$iter_ExactSizeIterator_u16_u32(it))), (v2: rt.Place): undefined => { + rt.iterForEach(rt.iterRev(rt.iterFrom(it, ValuesMut.next$iter_Iterator_u16_u32, undefined, { hint: ValuesMut.sizeHint$iter_Iterator_u16_u32, back: (it: ValuesMut.ValuesMut) => rt.iterFromOption(ValuesMut.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: ValuesMut.len$iter_ExactSizeIterator_u16_u32 })), (v2: rt.Place): undefined => { v2.v = rt.u32Add(v2.v, 1); }); - rt.iterForEach(rt.iterFrom(LinkedHashMap.values$u16_u32_hash_RandomState(m), (it: linked_hash_map_Values.Values) => linked_hash_map_Values.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Values.Values) => linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: linked_hash_map_Values.Values) => linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32(it)), (v3: rt.u32): undefined => { + rt.iterForEach(rt.iterFrom(LinkedHashMap.values$u16_u32_hash_RandomState(m), linked_hash_map_Values.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Values.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Values.Values) => rt.iterFromOption(linked_hash_map_Values.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: linked_hash_map_Values.len$iter_ExactSizeIterator_u16_u32 }), (v3: rt.u32): undefined => { put(out, v3 as rt.usize); }); } else { @@ -1031,15 +1031,15 @@ export function linkedIters(dataData: Uint8Array, dataStart: number, dataLen: nu put(out, option_mapOr$0iaogpf(rt.iterToOption(linked_hash_map_Iter.next$iter_Iterator_u16_u32(it2)), 256, (_210: [rt.u16, rt.u32]): rt.usize => { return rt.usizeAdd(rt.usizeMul(_210[0] as rt.usize, 4096), _210[1] as rt.usize); })); - put(out, rt.iterFrom(it2, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it))).len()); - const rest: rt.usize[] = rt.iterToArray(rt.iterMap(rt.iterSkip(rt.iterRev(rt.iterFrom(it2, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.next$iter_Iterator_u16_u32(it), undefined, (it: linked_hash_map_Iter.Iter) => linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32(it), (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)))), rt.usizeRem(k, 4)), (_211: [rt.u16, rt.u32]): rt.usize => { + put(out, rt.iterFrom(it2, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) }).len()); + const rest: rt.usize[] = rt.iterToArray(rt.iterMap(rt.iterSkip(rt.iterRev(rt.iterFrom(it2, linked_hash_map_Iter.next$iter_Iterator_u16_u32, undefined, { hint: linked_hash_map_Iter.sizeHint$iter_Iterator_u16_u32, back: (it: linked_hash_map_Iter.Iter) => rt.iterFromOption(linked_hash_map_Iter.nextBack$iter_DoubleEndedIterator_u16_u32(it)) })), rt.usizeRem(k, 4)), (_211: [rt.u16, rt.u32]): rt.usize => { return rt.usizeAdd(rt.usizeMul(_211[0] as rt.usize, 4096), _211[1] as rt.usize); }), "next", 4); put(out, rt.vecCapacity(rest, 4)); rt.iterForEach(rt.iterSlice(rest), (e: rt.usize): undefined => { put(out, e); }); - put(out, option_unwrapOr$0l7j3f6(rt.iterRposition(rt.iterFrom(LinkedHashMap.keys$u16_u32_hash_RandomState(m), (it: Keys.Keys) => Keys.next$iter_Iterator_u16_u32(it), undefined, (it: Keys.Keys) => Keys.sizeHint$iter_Iterator_u16_u32(it), (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), (it: Keys.Keys) => Keys.len$iter_ExactSizeIterator_u16_u32(it)), (k2: rt.u16): boolean => { + put(out, option_unwrapOr$0l7j3f6(rt.iterRposition(rt.iterFrom(LinkedHashMap.keys$u16_u32_hash_RandomState(m), Keys.next$iter_Iterator_u16_u32, undefined, { hint: Keys.sizeHint$iter_Iterator_u16_u32, back: (it: Keys.Keys) => rt.iterFromOption(Keys.nextBack$iter_DoubleEndedIterator_u16_u32(it)), len: Keys.len$iter_ExactSizeIterator_u16_u32 }), (k2: rt.u16): boolean => { return rt.u16Rem(k2, 2) === 0; }), 256)); } diff --git a/ts/fixtures/task/expected/core/result.ts b/ts/fixtures/task/expected/core/result.ts index 6aadff06d..b70062126 100644 --- a/ts/fixtures/task/expected/core/result.ts +++ b/ts/fixtures/task/expected/core/result.ts @@ -100,6 +100,13 @@ export function mapOrElse$196aho3(self: rt.Result, def return default_(self.error); } +export function mapErr$0nvqjog(self: rt.Result, op: (a0: Guard.Guard) => rt.u32): rt.Result { + if (self.ok) { + return self as rt.Result; + } + return rt.Err(op(self.error)); +} + export function mapErr$1c43xsx(self: rt.Result, op: (a0: rt.u32) => rt.u32): rt.Result { let _0!: rt.Result; let _9: boolean = false; diff --git a/ts/fixtures/task/expected/drops.ts b/ts/fixtures/task/expected/drops.ts index d2c515860..9c0e3186d 100644 --- a/ts/fixtures/task/expected/drops.ts +++ b/ts/fixtures/task/expected/drops.ts @@ -1274,8 +1274,8 @@ export function folded(log: Log.Log, id: rt.u32, arg: rt.u8): void { } /** - * Run scenario `arg % 9` of what folds back to front, and through what wraps a closure - * beside another. + * Run scenario `arg % 18` of what folds back to front, through what wraps a closure beside + * another, and through a crate's iterator with folds of its own. The last panics in a fold. */ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { folds_rfolded(log, id, arg); diff --git a/ts/fixtures/task/expected/drops/folds.Pile.ts b/ts/fixtures/task/expected/drops/folds.Pile.ts new file mode 100644 index 000000000..8048fbf64 --- /dev/null +++ b/ts/fixtures/task/expected/drops/folds.Pile.ts @@ -0,0 +1,121 @@ +// Generated by rust2-ts. Do not edit. + +import * as rt from "../rt.ts"; +import { then$1xpp3sz } from "../core/bool.ts"; +import * as Log from "../log.Log.ts"; +import type * as Guard from "../model.Guard.ts"; + +/** + * Guards popped from the back of a `Vec`, with its own `nth`, `nth_back`, folds, `count`, + * and `last`, each of which notes it was called. Its folds stop short of the last guard + * and drop their closure before they note they folded, and the rest drop with it. + */ +export class Pile { + held: Guard.Guard[]; + log: Log.Log; + + constructor(held: Guard.Guard[], log: Log.Log) { + this.held = held; + this.log = log; + } + + [Symbol.dispose](): void { + rt.dropAll(this.held); + this.log[Symbol.dispose](); + } +} + +export function next$iter_Iterator(self: Pile): Guard.Guard | rt.Done { + return rt.iterFromOption(self.held.pop()); +} + +export function sizeHint$iter_Iterator(self: Pile): [rt.usize, rt.usize | undefined] { + return [self.held.length, self.held.length] as [rt.usize, rt.usize | undefined]; +} + +export function nth$iter_Iterator(self: Pile, n: rt.usize): Guard.Guard | undefined { + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n, f)]; + const _5: string = rt.fmtFormat(["pile nth ", args2[0]]); + Log.note(self.log, _5); + let iterStart: rt.usize = 0; + const iterEnd: rt.usize = n; + while (iterStart++ < iterEnd) { + const _21: Guard.Guard | undefined = self.held.pop(); + if (_21 !== undefined) { + _21[Symbol.dispose](); + } else { + return undefined; + } + } + return self.held.pop(); +} + +export function fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32(self: Pile, init: rt.u32 | undefined, f: (a0: rt.u32 | undefined, a1: Guard.Guard) => rt.u32 | undefined): rt.u32 | undefined { + Log.note(self.log, "pile fold"); + let acc: rt.u32 | undefined = init; + while (self.held.length > 1) { + const part = rt.optionUnwrap(self.held.pop()); + acc = f(acc, part); + } + rt.drop(f); + Log.note(self.log, "pile folded"); + self[Symbol.dispose](); + return acc; +} + +export function count$iter_Iterator(self: Pile): rt.usize { + const part = self.held.length; + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(part, f)]; + const _4: string = rt.fmtFormat(["pile count ", args2[0]]); + Log.note(self.log, _4); + const _0: rt.usize = self.held.length; + self[Symbol.dispose](); + return _0; +} + +export function last$iter_Iterator(self: Pile): Guard.Guard | undefined { + Log.note(self.log, "pile last"); + const _0: Guard.Guard | undefined = then$1xpp3sz(!((self.held.length === 0)), (): Guard.Guard => { + return rt.vecRemove(self.held, 0); + }); + self[Symbol.dispose](); + return _0; +} + +export function nextBack$iter_DoubleEndedIterator(self: Pile): Guard.Guard | undefined { + return then$1xpp3sz(!((self.held.length === 0)), (): Guard.Guard => { + return rt.vecRemove(self.held, 0); + }); +} + +export function nthBack$iter_DoubleEndedIterator(self: Pile, n: rt.usize): Guard.Guard | undefined { + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n, f)]; + const _5: string = rt.fmtFormat(["pile nth_back ", args2[0]]); + Log.note(self.log, _5); + let iterStart: rt.usize = 0; + const iterEnd: rt.usize = n; + while (iterStart++ < iterEnd) { + const _21: Guard.Guard | undefined = nextBack$iter_DoubleEndedIterator(self); + if (_21 !== undefined) { + _21[Symbol.dispose](); + } else { + return undefined; + } + } + return nextBack$iter_DoubleEndedIterator(self); +} + +export function rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32(self: Pile, init: rt.u32 | undefined, f: (a0: rt.u32 | undefined, a1: Guard.Guard) => rt.u32 | undefined): rt.u32 | undefined { + Log.note(self.log, "pile rfold"); + let acc: rt.u32 | undefined = init; + while (self.held.length > 1) { + const part = rt.vecRemove(self.held, 0); + acc = f(acc, part); + } + rt.drop(f); + Log.note(self.log, "pile rfolded"); + self[Symbol.dispose](); + return acc; +} + +//# sourceMappingURL=folds.Pile.ts.map diff --git a/ts/fixtures/task/expected/drops/folds.ts b/ts/fixtures/task/expected/drops/folds.ts index 7e659f31c..6f11ee090 100644 --- a/ts/fixtures/task/expected/drops/folds.ts +++ b/ts/fixtures/task/expected/drops/folds.ts @@ -4,6 +4,8 @@ import * as rt from "../rt.ts"; import { drop$Option_tuple2_tuple2_model_Guard_model_Guard_model_Guard as lib_drop$Option_tuple2_tuple2_model_Guard_model_Guard_model_Guard, drop$tuple2_i32_model_Guard as lib_drop$tuple2_i32_model_Guard, drop$tuple2_model_Guard_i32 as lib_drop$tuple2_model_Guard_i32, drop$tuple2_model_Guard_model_Guard as lib_drop$tuple2_model_Guard_model_Guard, drop$tuple2_model_Guard_u64 as lib_drop$tuple2_model_Guard_u64, drop$tuple2_tuple2_model_Guard_model_Guard_model_Guard as lib_drop$tuple2_tuple2_model_Guard_model_Guard_model_Guard, drop$tuple2_usize_model_Guard as lib_drop$tuple2_usize_model_Guard } from "../lib.ts"; import { thenSome$0zvoczk, thenSome$1af3oea, then$06wuxll, then$1xpp3sz, then$0ea5h05 } from "../core/bool.ts"; import { map$0ccnsmq as option_map$0ccnsmq, map$1raha9y as option_map$1raha9y, map$0lq7mno as option_map$0lq7mno, map$01pvlgn as option_map$01pvlgn, map$14zg54s as option_map$14zg54s, mapOr$01ozsk3 as option_mapOr$01ozsk3 } from "../core/option.ts"; +import { mapErr$0nvqjog as result_mapErr$0nvqjog } from "../core/result.ts"; +import * as Pile from "../drops/folds.Pile.ts"; import * as Log from "../log.Log.ts"; import * as Guard from "../model.Guard.ts"; @@ -933,353 +935,734 @@ export function folded(log: Log.Log, id: rt.u32, arg: rt.u8): void { } /** - * Run scenario `arg % 9` of what folds back to front and through what wraps a closure - * beside another, as `folded` does. + * Run scenario `arg % 18` of what folds back to front and through what wraps a closure + * beside another, as `folded` does, of `rfold` and `try_rfold` themselves, and of a + * crate's iterator with folds of its own. The last panics in a `try_rfold`, with what + * dropped before. */ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { + let n!: rt.u32; let f!: Guard.Guard; - let _344: boolean = false; - let _343: boolean = false; - const guard: (a0: rt.u32) => Guard.Guard = (n7: rt.u32): Guard.Guard => { - return Guard.new(rt.u32Add(id, n7), Log.clone$Clone(log)); + let broke!: rt.u32 | undefined; + let _733: boolean = false; + let _732: boolean = false; + let _731: boolean = false; + const guard: (a0: rt.u32) => Guard.Guard = (n11: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(id, n11), Log.clone$Clone(log)); }; const guards: (a0: rt.u32, a1: rt.u32) => Guard.Guard[] = (from: rt.u32, to: rt.u32): Guard.Guard[] => { return rt.iterToArray(rt.iterMap(new rt.Range(from, to), guard), undefined, 8, true); }; const _11: [Guard.Guard, Guard.Guard, Guard.Guard] = [guard(10), guard(11), guard(12)]; + _733 = true; const c: Guard.Guard = _11[0]; - _344 = true; + _732 = true; const d: Guard.Guard = _11[1]; - _343 = true; + _731 = true; const e: Guard.Guard = _11[2]; - const _21: rt.u8 = rt.u8Rem(arg, 9); - if (_21 === 0) { - const _27: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - const captured24 = c; - const _25: rt.Iter = rt.iterRev(rt.iterMap(_27, rt.closure((g27: Guard.Guard): Guard.Guard => { - const _917: rt.u32 = Guard.id(g27); - const _1216: rt.u32 = Guard.id(captured24); - const args36: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_917, f), (f: rt.Formatter) => rt.u32Display(_1216, f)]; - Log.note(log, rt.fmtFormat(["map ", args36[0], " ", args36[1]])); - return g27; + const pile: (a0: rt.u32, a1: rt.u32) => Pile.Pile = (from2: rt.u32, to2: rt.u32): Pile.Pile => { + return new Pile.Pile(guards(from2, to2), Log.clone$Clone(log)); + }; + const _23: rt.u8 = rt.u8Rem(arg, 18); + if (_23 === 0) { + const _29: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); + _733 = false; + const captured46 = c; + const _27: rt.Iter = rt.iterRev(rt.iterMap(_29, rt.closure((g51: Guard.Guard): Guard.Guard => { + const _926: rt.u32 = Guard.id(g51); + const _1225: rt.u32 = Guard.id(captured46); + const args84: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_926, f), (f: rt.Formatter) => rt.u32Display(_1225, f)]; + Log.note(log, rt.fmtFormat(["map ", args84[0], " ", args84[1]])); + return g51; }, (): void => { - captured24[Symbol.dispose](); + captured46[Symbol.dispose](); }))); - _344 = false; - const captured25 = id; - const captured26 = d; - const n: rt.u32 = rt.iterSum(rt.iterMap(_25, rt.closure((g28: Guard.Guard): rt.u32 => { - const _029: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g28), captured25), Guard.id(captured26)), Guard.id(captured26)); - g28[Symbol.dispose](); - return _029; + _732 = false; + const captured47 = id; + const captured48 = d; + n = rt.iterSum(rt.iterMap(_27, rt.closure((g52: Guard.Guard): rt.u32 => { + const _058: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g52), captured47), Guard.id(captured48)), Guard.id(captured48)); + g52[Symbol.dispose](); + return _058; }, (): void => { - captured26[Symbol.dispose](); + captured48[Symbol.dispose](); })), rt.u32Add, 0, true); - const _39: rt.u32 = Guard.id(e); - const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n, f), (f: rt.Formatter) => rt.u32Display(_39, f)]; + const _41: rt.u32 = Guard.id(e); + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n, f), (f: rt.Formatter) => rt.u32Display(_41, f)]; Log.note(log, rt.fmtFormat(["map ", args2[0], " ", args2[1]])); - } else if (_21 === 1) { - const _51: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - const captured19 = c; - const _49: rt.Iter = rt.iterRev(rt.iterFilter(_51, rt.closure((g23: Guard.Guard): boolean => { - return Guard.id(g23) !== Guard.id(captured19); + } else if (_23 === 1) { + const _53: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); + _733 = false; + const captured41 = c; + const _51: rt.Iter = rt.iterRev(rt.iterFilter(_53, rt.closure((g47: Guard.Guard): boolean => { + return Guard.id(g47) !== Guard.id(captured41); }, (): void => { - captured19[Symbol.dispose](); + captured41[Symbol.dispose](); }), rt.drop)); - _344 = false; - const captured20 = id; - const captured21 = d; - const n2: rt.u32 = rt.iterSum(rt.iterMap(_49, rt.closure((g24: Guard.Guard): rt.u32 => { - const _025: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g24), captured20), Guard.id(captured21)), Guard.id(captured21)); - g24[Symbol.dispose](); - return _025; + _732 = false; + const captured42 = id; + const captured43 = d; + const n2: rt.u32 = rt.iterSum(rt.iterMap(_51, rt.closure((g48: Guard.Guard): rt.u32 => { + const _054: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g48), captured42), Guard.id(captured43)), Guard.id(captured43)); + g48[Symbol.dispose](); + return _054; }, (): void => { - captured21[Symbol.dispose](); + captured43[Symbol.dispose](); })), rt.u32Add, 0, true); f = guard(13); - const _64: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); - _343 = false; - const captured22 = e; - const _62: rt.Iter = rt.iterRev(rt.iterFilterMap(_64, rt.closure((g25: Guard.Guard): Guard.Guard | undefined => { - return thenSome$0zvoczk(Guard.id(g25) !== Guard.id(captured22), g25); + const _66: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); + _731 = false; + const captured44 = e; + const _64: rt.Iter = rt.iterRev(rt.iterFilterMap(_66, rt.closure((g49: Guard.Guard): Guard.Guard | undefined => { + return thenSome$0zvoczk(Guard.id(g49) !== Guard.id(captured44), g49); }, (): void => { - captured22[Symbol.dispose](); + captured44[Symbol.dispose](); }))); - const captured23 = f; - const m: rt.usize = rt.ownedCount(rt.iterMap(_62, rt.closure((g26: Guard.Guard): rt.u32 => { - const _027: rt.u32 = rt.u32Add(Guard.id(g26), Guard.id(captured23)); - g26[Symbol.dispose](); - return _027; + const captured45 = f; + const m: rt.usize = rt.ownedCount(rt.iterMap(_64, rt.closure((g50: Guard.Guard): rt.u32 => { + const _056: rt.u32 = rt.u32Add(Guard.id(g50), Guard.id(captured45)); + g50[Symbol.dispose](); + return _056; }, (): void => { - captured23[Symbol.dispose](); + captured45[Symbol.dispose](); }))); const args4: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n2, f), (f: rt.Formatter) => rt.usizeDisplay(m, f)]; Log.note(log, rt.fmtFormat(["filter ", args4[0], " ", args4[1]])); - } else if (_21 === 2) { - const _85: rt.Iter = rt.iterSlice(guards(1, 4), rt.drop); - const captured15 = c; - const _84: rt.Iter = rt.iterInspect(_85, rt.closure((g19: Guard.Guard): undefined => { - const _914: rt.u32 = Guard.id(g19); - const _1112: rt.u32 = Guard.id(captured15); - const args32: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_914, f), (f: rt.Formatter) => rt.u32Display(_1112, f)]; - Log.note(log, rt.fmtFormat(["inspect ", args32[0], " ", args32[1]])); + } else if (_23 === 2) { + const _87: rt.Iter = rt.iterSlice(guards(1, 4), rt.drop); + _733 = false; + const captured37 = c; + const _86: rt.Iter = rt.iterInspect(_87, rt.closure((g43: Guard.Guard): undefined => { + const _923: rt.u32 = Guard.id(g43); + const _1134: rt.u32 = Guard.id(captured37); + const args80: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_923, f), (f: rt.Formatter) => rt.u32Display(_1134, f)]; + Log.note(log, rt.fmtFormat(["inspect ", args80[0], " ", args80[1]])); }, (): void => { - captured15[Symbol.dispose](); + captured37[Symbol.dispose](); })); - _344 = false; - const captured16 = d; - const n3: rt.usize = rt.ownedCount(rt.iterMap(_84, rt.closure((g20: Guard.Guard): rt.u32 => { - const _022: rt.u32 = rt.u32Add(Guard.id(g20), Guard.id(captured16)); - g20[Symbol.dispose](); - return _022; + _732 = false; + const captured38 = d; + const n3: rt.usize = rt.ownedCount(rt.iterMap(_86, rt.closure((g44: Guard.Guard): rt.u32 => { + const _051: rt.u32 = rt.u32Add(Guard.id(g44), Guard.id(captured38)); + g44[Symbol.dispose](); + return _051; }, (): void => { - captured16[Symbol.dispose](); + captured38[Symbol.dispose](); }))); const f2: Guard.Guard = guard(13); - const _98: rt.Iter = rt.iterSlice(guards(4, 8), rt.drop); - _343 = false; - const captured17 = e; - const _96: rt.Iter = rt.iterRev(rt.iterInspect(_98, rt.closure((g21: Guard.Guard): undefined => { - const _915: rt.u32 = Guard.id(g21); - const _1113: rt.u32 = Guard.id(captured17); - const args34: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_915, f), (f: rt.Formatter) => rt.u32Display(_1113, f)]; - Log.note(log, rt.fmtFormat(["inspect ", args34[0], " ", args34[1]])); + const _100: rt.Iter = rt.iterSlice(guards(4, 8), rt.drop); + _731 = false; + const captured39 = e; + const _98: rt.Iter = rt.iterRev(rt.iterInspect(_100, rt.closure((g45: Guard.Guard): undefined => { + const _924: rt.u32 = Guard.id(g45); + const _1137: rt.u32 = Guard.id(captured39); + const args82: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_924, f), (f: rt.Formatter) => rt.u32Display(_1137, f)]; + Log.note(log, rt.fmtFormat(["inspect ", args82[0], " ", args82[1]])); }, (): void => { - captured17[Symbol.dispose](); + captured39[Symbol.dispose](); }))); - const captured18 = f2; - const m2: rt.usize = rt.ownedCount(rt.iterMap(_96, rt.closure((g22: Guard.Guard): rt.u32 => { - const _023: rt.u32 = rt.u32Add(Guard.id(g22), Guard.id(captured18)); - g22[Symbol.dispose](); - return _023; + const captured40 = f2; + const m2: rt.usize = rt.ownedCount(rt.iterMap(_98, rt.closure((g46: Guard.Guard): rt.u32 => { + const _052: rt.u32 = rt.u32Add(Guard.id(g46), Guard.id(captured40)); + g46[Symbol.dispose](); + return _052; }, (): void => { - captured18[Symbol.dispose](); + captured40[Symbol.dispose](); }))); const args6: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n3, f), (f: rt.Formatter) => rt.usizeDisplay(m2, f)]; Log.note(log, rt.fmtFormat(["inspect ", args6[0], " ", args6[1]])); - } else if (_21 === 3) { - const _120: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - const captured14 = c; - const _131: [rt.usize, rt.u32] | undefined = option_map$14zg54s(rt.ownedLast(rt.iterRev(rt.iterEnumerate(rt.iterMap(_120, rt.closure((g17: Guard.Guard): Guard.Guard => { - const _913: rt.u32 = Guard.id(g17); - const _1214: rt.u32 = Guard.id(captured14); - const args30: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_913, f), (f: rt.Formatter) => rt.u32Display(_1214, f)]; - Log.note(log, rt.fmtFormat(["map ", args30[0], " ", args30[1]])); - return g17; + } else if (_23 === 3) { + const _122: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); + _733 = false; + const captured36 = c; + const _133: [rt.usize, rt.u32] | undefined = option_map$14zg54s(rt.ownedLast(rt.iterRev(rt.iterEnumerate(rt.iterMap(_122, rt.closure((g41: Guard.Guard): Guard.Guard => { + const _922: rt.u32 = Guard.id(g41); + const _1223: rt.u32 = Guard.id(captured36); + const args78: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_922, f), (f: rt.Formatter) => rt.u32Display(_1223, f)]; + Log.note(log, rt.fmtFormat(["map ", args78[0], " ", args78[1]])); + return g41; }, (): void => { - captured14[Symbol.dispose](); - })))), lib_drop$tuple2_usize_model_Guard), (_2: [rt.usize, Guard.Guard]): [rt.usize, rt.u32] => { - const i: rt.usize = _2[0]; - const g18: Guard.Guard = _2[1]; - const _021: [rt.usize, rt.u32] = [i, Guard.id(g18)]; - g18[Symbol.dispose](); - return _021; + captured36[Symbol.dispose](); + })))), lib_drop$tuple2_usize_model_Guard), (_230: [rt.usize, Guard.Guard]): [rt.usize, rt.u32] => { + const i: rt.usize = _230[0]; + const g42: Guard.Guard = _230[1]; + const _050: [rt.usize, rt.u32] = [i, Guard.id(g42)]; + g42[Symbol.dispose](); + return _050; }); - const _133: rt.u32 = Guard.id(d); - const _136: rt.u32 = Guard.id(e); - const args8: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_131, f, (value: [rt.usize, rt.u32], f: rt.Formatter) => rt.fmtTuple([(f: rt.Formatter) => rt.usizeDebug(value[0], f), (f: rt.Formatter) => rt.u32Debug(value[1], f)], f)), (f: rt.Formatter) => rt.u32Display(_133, f), (f: rt.Formatter) => rt.u32Display(_136, f)]; + const _135: rt.u32 = Guard.id(d); + const _138: rt.u32 = Guard.id(e); + const args8: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_133, f, (value: [rt.usize, rt.u32], f: rt.Formatter) => rt.fmtTuple([(f: rt.Formatter) => rt.usizeDebug(value[0], f), (f: rt.Formatter) => rt.u32Debug(value[1], f)], f)), (f: rt.Formatter) => rt.u32Display(_135, f), (f: rt.Formatter) => rt.u32Display(_138, f)]; Log.note(log, rt.fmtFormat(["enumerate ", args8[0], " ", args8[1], " ", args8[2]])); - } else if (_21 === 4) { - const _148: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - const captured12 = c; - const n4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterRev(rt.iterMap(_148, rt.closure((g15: Guard.Guard): rt.u32 => { - const _017: rt.u32 = rt.u32Add(Guard.id(g15), Guard.id(captured12)); - g15[Symbol.dispose](); - return _017; + } else if (_23 === 4) { + const _150: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); + _733 = false; + const captured34 = c; + const n4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterRev(rt.iterMap(_150, rt.closure((g39: Guard.Guard): rt.u32 => { + const _046: rt.u32 = rt.u32Add(Guard.id(g39), Guard.id(captured34)); + g39[Symbol.dispose](); + return _046; }, (): void => { - captured12[Symbol.dispose](); + captured34[Symbol.dispose](); }))))); - const _156: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); - _344 = false; - const captured13 = d; - const m3: rt.u32 = rt.iterFold(rt.iterSkip(rt.iterMap(_156, rt.closure((g16: Guard.Guard): rt.u32 => { - const _018: rt.u32 = rt.u32Add(Guard.id(g16), Guard.id(captured13)); - g16[Symbol.dispose](); - return _018; + const _158: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); + _732 = false; + const captured35 = d; + const m3: rt.u32 = rt.iterFold(rt.iterSkip(rt.iterMap(_158, rt.closure((g40: Guard.Guard): rt.u32 => { + const _047: rt.u32 = rt.u32Add(Guard.id(g40), Guard.id(captured35)); + g40[Symbol.dispose](); + return _047; }, (): void => { - captured13[Symbol.dispose](); - })), 1), 0, (n8: rt.u32, k: rt.u32): rt.u32 => { - return rt.u32Add(n8, k); + captured35[Symbol.dispose](); + })), 1), 0, (n22: rt.u32, k5: rt.u32): rt.u32 => { + return rt.u32Add(n22, k5); }, true); - const _167: rt.u32 = Guard.id(e); - const args10: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n4, f), (f: rt.Formatter) => rt.u32Display(m3, f), (f: rt.Formatter) => rt.u32Display(_167, f)]; + const _169: rt.u32 = Guard.id(e); + const args10: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n4, f), (f: rt.Formatter) => rt.u32Display(m3, f), (f: rt.Formatter) => rt.u32Display(_169, f)]; Log.note(log, rt.fmtFormat(["twice ", args10[0], " ", args10[1], " ", args10[2]])); - } else if (_21 === 5) { - const _181: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - const captured10 = c; - const _179: rt.Iter = rt.iterStepBy(rt.iterMap(_181, rt.closure((g11: Guard.Guard): Guard.Guard => { - const _911: rt.u32 = Guard.id(g11); - const _1212: rt.u32 = Guard.id(captured10); - const args28: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_911, f), (f: rt.Formatter) => rt.u32Display(_1212, f)]; - Log.note(log, rt.fmtFormat(["map ", args28[0], " ", args28[1]])); - return g11; + } else if (_23 === 5) { + const _183: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); + _733 = false; + const captured32 = c; + const _181: rt.Iter = rt.iterStepBy(rt.iterMap(_183, rt.closure((g35: Guard.Guard): Guard.Guard => { + const _920: rt.u32 = Guard.id(g35); + const _1221: rt.u32 = Guard.id(captured32); + const args76: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_920, f), (f: rt.Formatter) => rt.u32Display(_1221, f)]; + Log.note(log, rt.fmtFormat(["map ", args76[0], " ", args76[1]])); + return g35; }, (): void => { - captured10[Symbol.dispose](); + captured32[Symbol.dispose](); })), 2, rt.drop); - _344 = false; - const captured11 = d; - const _197: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_179, rt.closure((g12: Guard.Guard): [Guard.Guard, rt.u32] => { - return [g12, Guard.id(captured11)] as [Guard.Guard, rt.u32]; + _732 = false; + const captured33 = d; + const _199: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_181, rt.closure((g36: Guard.Guard): [Guard.Guard, rt.u32] => { + return [g36, Guard.id(captured33)] as [Guard.Guard, rt.u32]; }, (): void => { - captured11[Symbol.dispose](); - })), guard(20), (kept4: Guard.Guard | undefined, _315: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { - let _015!: Guard.Guard | undefined; - let _1213: boolean = false; - let _1111: boolean = false; - _1213 = true; - _1111 = true; - const g13: Guard.Guard = _315[0]; - if (!(rt.u32Rem(Guard.id(g13), 2) === 1)) { - _1213 = false; - _015 = kept4; + captured33[Symbol.dispose](); + })), guard(20), (kept7: Guard.Guard | undefined, _347: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { + let _044!: Guard.Guard | undefined; + let _1222: boolean = false; + let _1126: boolean = false; + _1222 = true; + _1126 = true; + const g37: Guard.Guard = _347[0]; + if (!(rt.u32Rem(Guard.id(g37), 2) === 1)) { + _1222 = false; + _044 = kept7; } else { - _1111 = false; - _015 = g13; + _1126 = false; + _044 = g37; } - if (_1111) { - g13[Symbol.dispose](); + if (_1126) { + g37[Symbol.dispose](); } - _1111 = false; - if (_1213) { - rt.drop(kept4); - return _015; + _1126 = false; + if (_1222) { + rt.drop(kept7); + return _044; } - return _015; - }, true), (g14: Guard.Guard): rt.u32 => { - const _016: rt.u32 = Guard.id(g14); - g14[Symbol.dispose](); - return _016; + return _044; + }, true), (g38: Guard.Guard): rt.u32 => { + const _045: rt.u32 = Guard.id(g38); + g38[Symbol.dispose](); + return _045; }); - const _199: rt.u32 = Guard.id(e); - const args12: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_197, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_199, f)]; + const _201: rt.u32 = Guard.id(e); + const args12: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_199, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_201, f)]; Log.note(log, rt.fmtFormat(["step ", args12[0], " ", args12[1]])); - } else if (_21 === 6) { - const _211: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); - const captured8 = c; - const _208: rt.Iter = rt.iterRev(rt.iterStepBy(rt.iterMap(_211, rt.closure((g7: Guard.Guard): Guard.Guard => { - const _94: rt.u32 = Guard.id(g7); - const _1210: rt.u32 = Guard.id(captured8); - const args26: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_94, f), (f: rt.Formatter) => rt.u32Display(_1210, f)]; - Log.note(log, rt.fmtFormat(["map ", args26[0], " ", args26[1]])); - return g7; + } else if (_23 === 6) { + const _213: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); + _733 = false; + const captured30 = c; + const _210: rt.Iter = rt.iterRev(rt.iterStepBy(rt.iterMap(_213, rt.closure((g31: Guard.Guard): Guard.Guard => { + const _918: rt.u32 = Guard.id(g31); + const _1219: rt.u32 = Guard.id(captured30); + const args74: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_918, f), (f: rt.Formatter) => rt.u32Display(_1219, f)]; + Log.note(log, rt.fmtFormat(["map ", args74[0], " ", args74[1]])); + return g31; }, (): void => { - captured8[Symbol.dispose](); + captured30[Symbol.dispose](); })), 2, rt.drop)); - _344 = false; - const captured9 = d; - const _227: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_208, rt.closure((g8: Guard.Guard): [Guard.Guard, rt.u32] => { - return [g8, Guard.id(captured9)] as [Guard.Guard, rt.u32]; + _732 = false; + const captured31 = d; + const _229: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_210, rt.closure((g32: Guard.Guard): [Guard.Guard, rt.u32] => { + return [g32, Guard.id(captured31)] as [Guard.Guard, rt.u32]; }, (): void => { - captured9[Symbol.dispose](); - })), guard(20), (kept3: Guard.Guard | undefined, _311: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { - let _011!: Guard.Guard | undefined; - let _1211: boolean = false; - let _1110: boolean = false; - _1211 = true; - _1110 = true; - const g9: Guard.Guard = _311[0]; - if (!(rt.u32Rem(Guard.id(g9), 2) === 1)) { - _1211 = false; - _011 = kept3; + captured31[Symbol.dispose](); + })), guard(20), (kept6: Guard.Guard | undefined, _344: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { + let _040!: Guard.Guard | undefined; + let _1220: boolean = false; + let _1121: boolean = false; + _1220 = true; + _1121 = true; + const g33: Guard.Guard = _344[0]; + if (!(rt.u32Rem(Guard.id(g33), 2) === 1)) { + _1220 = false; + _040 = kept6; } else { - _1110 = false; - _011 = g9; + _1121 = false; + _040 = g33; } - if (_1110) { - g9[Symbol.dispose](); + if (_1121) { + g33[Symbol.dispose](); } - _1110 = false; - if (_1211) { - rt.drop(kept3); - return _011; + _1121 = false; + if (_1220) { + rt.drop(kept6); + return _040; } - return _011; - }, true), (g10: Guard.Guard): rt.u32 => { - const _012: rt.u32 = Guard.id(g10); - g10[Symbol.dispose](); - return _012; + return _040; + }, true), (g34: Guard.Guard): rt.u32 => { + const _041: rt.u32 = Guard.id(g34); + g34[Symbol.dispose](); + return _041; }); - const _229: rt.u32 = Guard.id(e); - const args14: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_227, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_229, f)]; + const _231: rt.u32 = Guard.id(e); + const args14: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_229, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_231, f)]; Log.note(log, rt.fmtFormat(["step ", args14[0], " ", args14[1]])); - } else if (_21 === 7) { - const _239: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - const captured5 = id; - const captured6 = c; - const n5: rt.u32 = rt.iterSum(rt.iterFuse(rt.iterMap(_239, rt.closure((g5: Guard.Guard): rt.u32 => { - const _07: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g5), captured5), Guard.id(captured6)), Guard.id(captured6)); - g5[Symbol.dispose](); - return _07; + } else if (_23 === 7) { + const _241: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); + _733 = false; + const captured27 = id; + const captured28 = c; + const n5: rt.u32 = rt.iterSum(rt.iterFuse(rt.iterMap(_241, rt.closure((g29: Guard.Guard): rt.u32 => { + const _036: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g29), captured27), Guard.id(captured28)), Guard.id(captured28)); + g29[Symbol.dispose](); + return _036; }, (): void => { - captured6[Symbol.dispose](); + captured28[Symbol.dispose](); })), true), rt.u32Add, 0, true); - const _248: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); - _344 = false; - const captured7 = d; - const m4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterFuse(rt.iterMap(_248, rt.closure((g6: Guard.Guard): rt.u32 => { - const _08: rt.u32 = rt.u32Add(Guard.id(g6), Guard.id(captured7)); - g6[Symbol.dispose](); - return _08; + const _250: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); + _732 = false; + const captured29 = d; + const m4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterFuse(rt.iterMap(_250, rt.closure((g30: Guard.Guard): rt.u32 => { + const _037: rt.u32 = rt.u32Add(Guard.id(g30), Guard.id(captured29)); + g30[Symbol.dispose](); + return _037; }, (): void => { - captured7[Symbol.dispose](); + captured29[Symbol.dispose](); })), true))); - const _259: rt.u32 = Guard.id(e); - const args16: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n5, f), (f: rt.Formatter) => rt.usizeDisplay(m4, f), (f: rt.Formatter) => rt.u32Display(_259, f)]; + const _261: rt.u32 = Guard.id(e); + const args16: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n5, f), (f: rt.Formatter) => rt.usizeDisplay(m4, f), (f: rt.Formatter) => rt.u32Display(_261, f)]; Log.note(log, rt.fmtFormat(["fuse ", args16[0], " ", args16[1], " ", args16[2]])); - } else { - const _271: rt.Iter = rt.iterSlice(guards(1, 4), rt.drop); - const captured = c; - const captured2 = guard; - const captured3 = id; - const flat: rt.Iter = rt.iterFlatten(rt.iterMap(_271, rt.closure((g: Guard.Guard): Guard.Guard[] => { - const _9: rt.u32 = Guard.id(g); - const _122: rt.u32 = Guard.id(captured); - const args24: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_9, f), (f: rt.Formatter) => rt.u32Display(_122, f)]; - Log.note(log, rt.fmtFormat(["map ", args24[0], " ", args24[1]])); + } else if (_23 === 8) { + const _273: rt.Iter = rt.iterSlice(guards(1, 4), rt.drop); + _733 = false; + const captured23 = c; + const captured24 = guard; + const captured25 = id; + const flat: rt.Iter = rt.iterFlatten(rt.iterMap(_273, rt.closure((g25: Guard.Guard): Guard.Guard[] => { + const _916: rt.u32 = Guard.id(g25); + const _1217: rt.u32 = Guard.id(captured23); + const args72: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_916, f), (f: rt.Formatter) => rt.u32Display(_1217, f)]; + Log.note(log, rt.fmtFormat(["map ", args72[0], " ", args72[1]])); const v: Guard.Guard[] = []; - const _225: Guard.Guard = captured2(rt.u32Add(rt.u32Sub(Guard.id(g), captured3), 3)); - v.push(_225); - v.push(g); + const _2211: Guard.Guard = captured24(rt.u32Add(rt.u32Sub(Guard.id(g25), captured25), 3)); + v.push(_2211); + v.push(g25); return v; }, (): void => { - captured[Symbol.dispose](); + captured23[Symbol.dispose](); })), (value: Guard.Guard[]) => rt.iterSlice(value, rt.drop), true); - const part2 = option_map$1raha9y(rt.iterToOption(flat.next()), (g2: Guard.Guard): rt.u32 => { - const _04: rt.u32 = Guard.id(g2); - g2[Symbol.dispose](); - return _04; + const part8 = option_map$1raha9y(rt.iterToOption(flat.next()), (g26: Guard.Guard): rt.u32 => { + const _033: rt.u32 = Guard.id(g26); + g26[Symbol.dispose](); + return _033; }); - const args18: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part2, f, rt.u32Debug)]; + const args18: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part8, f, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["ends ", args18[0]])); - const part3 = option_map$1raha9y(rt.iterToOption(flat.nextBack()), (g3: Guard.Guard): rt.u32 => { + const part9 = option_map$1raha9y(rt.iterToOption(flat.nextBack()), (g27: Guard.Guard): rt.u32 => { + const _034: rt.u32 = Guard.id(g27); + g27[Symbol.dispose](); + return _034; + }); + const args20: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part9, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["ends ", args20[0]])); + const _306: rt.Iter = flat; + _732 = false; + const captured26 = d; + const n6: rt.usize = rt.ownedCount(rt.iterMap(_306, rt.closure((g28: Guard.Guard): rt.u32 => { + const _035: rt.u32 = rt.u32Add(Guard.id(g28), Guard.id(captured26)); + g28[Symbol.dispose](); + return _035; + }, (): void => { + captured26[Symbol.dispose](); + }))); + const _314: rt.u32 = Guard.id(e); + const args22: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n6, f), (f: rt.Formatter) => rt.u32Display(_314, f)]; + Log.note(log, rt.fmtFormat(["flat ", args22[0], " ", args22[1]])); + } else if (_23 === 9) { + const _324: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); + _733 = false; + const captured20 = c; + const _323: rt.Iter = rt.iterMap(_324, rt.closure((g22: Guard.Guard): Guard.Guard => { + const _914: rt.u32 = Guard.id(g22); + const _1215: rt.u32 = Guard.id(captured20); + const args68: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_914, f), (f: rt.Formatter) => rt.u32Display(_1215, f)]; + Log.note(log, rt.fmtFormat(["map ", args68[0], " ", args68[1]])); + return g22; + }, (): void => { + captured20[Symbol.dispose](); + })); + const _329: Guard.Guard | undefined = guard(20); + _732 = false; + const captured21 = d; + const kept3: Guard.Guard | undefined = rt.iterRfold(_323, _329, rt.closure((kept5: Guard.Guard | undefined, g23: Guard.Guard): Guard.Guard | undefined => { + let _029!: Guard.Guard | undefined; + let _304: boolean = false; + let _296: boolean = false; + _304 = true; + _296 = true; + const _1014: rt.u32 = Guard.id(g23); + const _1316: rt.u32 = Guard.id(captured21); + const args70: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_1014, f), (f: rt.Formatter) => rt.u32Display(_1316, f)]; + Log.note(log, rt.fmtFormat(["rfold ", args70[0], " ", args70[1]])); + if (!(rt.u32Rem(Guard.id(g23), 2) === 1)) { + _304 = false; + _029 = kept5; + } else { + _296 = false; + _029 = g23; + } + if (_296) { + g23[Symbol.dispose](); + } + if (_304) { + rt.drop(kept5); + return _029; + } + return _029; + }, (): void => { + captured21[Symbol.dispose](); + }), true, true); + const _335: rt.Iter = rt.iterSlice([1, 2, 3]); + _731 = false; + const captured22 = e; + const n7: rt.u32 = rt.iterRfold(_335, 0, rt.closure((n21: rt.u32, _326: rt.u32): rt.u32 => { + return rt.u32Sub(rt.u32Add(rt.u32Add(rt.u32Mul(n21, 10), _326), Guard.id(captured22)), Guard.id(captured22)); + }, (): void => { + captured22[Symbol.dispose](); + }), undefined, true); + const _345: rt.u32 | undefined = option_map$1raha9y(kept3, (g24: Guard.Guard): rt.u32 => { + const _031: rt.u32 = Guard.id(g24); + g24[Symbol.dispose](); + return _031; + }); + const args24: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_345, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(n7, f)]; + Log.note(log, rt.fmtFormat(["rfold ", args24[0], " ", args24[1]])); + } else if (_23 === 10) { + const held: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); + _733 = false; + const captured17 = c; + const captured18 = id; + const sum: rt.u32 | undefined = rt.iterTryRfold(held, 0, rt.closure((n19: rt.u32, g20: Guard.Guard): rt.u32 | undefined => { + const _1012: rt.u32 = Guard.id(g20); + const _1314: rt.u32 = Guard.id(captured17); + const args66: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_1012, f), (f: rt.Formatter) => rt.u32Display(_1314, f)]; + Log.note(log, rt.fmtFormat(["try ", args66[0], " ", args66[1]])); + const _025: rt.u32 | undefined = then$0ea5h05(Guard.id(g20) !== rt.u32Add(captured18, 3), (): rt.u32 => { + return rt.u32Sub(rt.u32Add(n19, Guard.id(g20)), captured18); + }); + g20[Symbol.dispose](); + return _025; + }, (): void => { + captured17[Symbol.dispose](); + }), true, true); + const _365: rt.usize = held.len(); + const args26: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(sum, f, rt.u32Debug), (f: rt.Formatter) => rt.usizeDisplay(_365, f)]; + Log.note(log, rt.fmtFormat(["tried ", args26[0], " ", args26[1]])); + _732 = false; + const captured19 = d; + const rest: rt.u32 | undefined = rt.iterTryRfold(held, 0, rt.closure((n20: rt.u32, g21: Guard.Guard): rt.u32 | undefined => { + const _027: rt.u32 | undefined = rt.u32Sub(rt.u32Add(rt.u32Add(n20, Guard.id(g21)), Guard.id(captured19)), Guard.id(captured19)); + g21[Symbol.dispose](); + return _027; + }, (): void => { + captured19[Symbol.dispose](); + }), true, true); + const _382: rt.u32 = Guard.id(e); + const args28: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(rest, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_382, f)]; + Log.note(log, rt.fmtFormat(["rest ", args28[0], " ", args28[1]])); + rt.drop(held); + } else if (_23 === 11) { + const _391: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); + _733 = false; + const captured14 = c; + const mapped: rt.Iter = rt.iterMap(_391, rt.closure((g17: Guard.Guard): Guard.Guard => { + const _911: rt.u32 = Guard.id(g17); + const _1212: rt.u32 = Guard.id(captured14); + const args64: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_911, f), (f: rt.Formatter) => rt.u32Display(_1212, f)]; + Log.note(log, rt.fmtFormat(["map ", args64[0], " ", args64[1]])); + return g17; + }, (): void => { + captured14[Symbol.dispose](); + })); + _732 = false; + const captured15 = id; + const captured16 = d; + const part5 = result_mapErr$0nvqjog(rt.iterTryRfold(mapped, 0, rt.closure((n18: rt.u32, g18: Guard.Guard): rt.Result => { + let _023!: rt.Result; + let _233: boolean = false; + _233 = true; + if (!(Guard.id(g18) === rt.u32Add(captured15, 2))) { + _023 = rt.Ok(rt.u32Sub(rt.u32Add(rt.u32Add(n18, Guard.id(g18)), Guard.id(captured16)), Guard.id(captured16))); + } else { + _233 = false; + _023 = rt.Err(g18); + } + if (_233) { + g18[Symbol.dispose](); + return _023; + } + return _023; + }, (): void => { + captured16[Symbol.dispose](); + }), undefined, true), (g19: Guard.Guard): rt.u32 => { + const _024: rt.u32 = Guard.id(g19); + g19[Symbol.dispose](); + return _024; + }); + const args30: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtResult(part5, f, rt.u32Debug, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["tried ", args30[0]])); + rt.drop(mapped); + const part6 = Guard.id(e); + const args32: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part6, f)]; + Log.note(log, rt.fmtFormat(["dropped ", args32[0]])); + } else if (_23 === 12) { + const chained: rt.Iter = rt.iterRev(rt.iterChain(rt.iterSlice(guards(1, 3), rt.drop), rt.iterSlice(guards(3, 6), rt.drop))); + _733 = false; + const captured12 = id; + const captured13 = c; + const r2: rt.Result = rt.iterTryRfold(chained, 0, rt.closure((n16: rt.u32, g15: Guard.Guard): rt.Result => { + let _020!: rt.Result; + let _232: boolean = false; + _232 = true; + if (!(Guard.id(g15) === rt.u32Add(captured12, 4))) { + _020 = rt.Ok(rt.u32Sub(rt.u32Add(rt.u32Add(n16, Guard.id(g15)), Guard.id(captured13)), Guard.id(captured13))); + } else { + _232 = false; + _020 = rt.Err(g15); + } + if (_232) { + g15[Symbol.dispose](); + return _020; + } + return _020; + }, (): void => { + captured13[Symbol.dispose](); + }), undefined, true); + if (r2.ok) { + broke = undefined; + } else { + const g: Guard.Guard = r2.error; + broke = Guard.id(g); + g[Symbol.dispose](); + } + const args34: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(broke, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["broke ", args34[0]])); + const n8: rt.Result = rt.iterTryRfold(chained, 0, (n17: rt.u32, g16: Guard.Guard): rt.Result => { + const _021: rt.Result = rt.Ok(rt.u32Sub(rt.u32Add(n17, Guard.id(g16)), id)); + g16[Symbol.dispose](); + return _021; + }); + const _461: rt.u32 = Guard.id(d); + const _464: rt.u32 = Guard.id(e); + const args36: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtControlFlow(n8, f, rt.u32Debug, rt.fmtUnit), (f: rt.Formatter) => rt.u32Display(_461, f), (f: rt.Formatter) => rt.u32Display(_464, f)]; + Log.note(log, rt.fmtFormat(["rest ", args36[0], " ", args36[1], " ", args36[2]])); + rt.drop(chained); + } else if (_23 === 13) { + const _474: rt.Iter = rt.iterSlice(guards(1, 1), rt.drop); + const _478: Guard.Guard = guard(20); + _733 = false; + const captured9 = c; + const none: Guard.Guard = rt.iterRfold(_474, _478, rt.closure((acc: Guard.Guard, _316: Guard.Guard): Guard.Guard => { + const part3 = Guard.id(captured9); + const args60: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part3, f)]; + Log.note(log, rt.fmtFormat(["never ", args60[0]])); + _316[Symbol.dispose](); + return acc; + }, (): void => { + captured9[Symbol.dispose](); + }), true, true); + const _483: rt.Iter = rt.iterSlice(guards(1, 1), rt.drop); + _732 = false; + const captured10 = d; + const empty: rt.Iter = rt.iterMap(_483, rt.closure((g14: Guard.Guard): rt.u32 => { + const _018: rt.u32 = rt.u32Add(Guard.id(g14), Guard.id(captured10)); + g14[Symbol.dispose](); + return _018; + }, (): void => { + captured10[Symbol.dispose](); + })); + _731 = false; + const captured11 = e; + const tried: rt.u32 | undefined = rt.iterTryRfold(empty, 0, rt.closure((n15: rt.u32, k3: rt.u32): rt.u32 | undefined => { + const part4 = Guard.id(captured11); + const args62: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part4, f)]; + Log.note(log, rt.fmtFormat(["never ", args62[0]])); + return rt.u32CheckedAdd(n15, k3); + }, (): void => { + captured11[Symbol.dispose](); + }), true, true); + const _497: rt.u32 = Guard.id(none); + const args38: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_497, f), (f: rt.Formatter) => rt.fmtOption(tried, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["empty ", args38[0], " ", args38[1]])); + rt.drop(empty); + none[Symbol.dispose](); + } else if (_23 === 14) { + const _507: Pile.Pile = pile(1, 5); + _733 = false; + const captured5 = c; + const captured6 = id; + const _510: (a0: Guard.Guard) => rt.u32 = rt.closure((g11: Guard.Guard): rt.u32 => { + const _94: rt.u32 = Guard.id(g11); + const _1210: rt.u32 = Guard.id(captured5); + const args56: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_94, f), (f: rt.Formatter) => rt.u32Display(_1210, f)]; + Log.note(log, rt.fmtFormat(["map ", args56[0], " ", args56[1]])); + const _014: rt.u32 = rt.u32Sub(Guard.id(g11), captured6); + g11[Symbol.dispose](); + return _014; + }, (): void => { + captured5[Symbol.dispose](); + }); + const part2 = rt.iterFold(rt.iterMap(rt.iterFrom(_507, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), _510), 0, (n14: rt.u32, k2: rt.u32): rt.u32 => { + return rt.u32Add(rt.u32Mul(n14, 10), k2); + }, true); + const args40: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part2, f)]; + Log.note(log, rt.fmtFormat(["fold ", args40[0]])); + const _522: Pile.Pile = pile(5, 8); + _732 = false; + const captured7 = d; + const _525: (a0: Guard.Guard) => undefined = rt.closure((g12: Guard.Guard): undefined => { + const _84: rt.u32 = Guard.id(g12); + const _1110: rt.u32 = Guard.id(captured7); + const args58: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_84, f), (f: rt.Formatter) => rt.u32Display(_1110, f)]; + Log.note(log, rt.fmtFormat(["each ", args58[0], " ", args58[1]])); + g12[Symbol.dispose](); + }, (): void => { + captured7[Symbol.dispose](); + }); + rt.iterForEach(rt.iterFrom(_522, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), _525, true, true); + const _528: Pile.Pile = pile(1, 4); + _731 = false; + const captured8 = e; + const _531: (a0: Guard.Guard) => rt.u32 = rt.closure((g13: Guard.Guard): rt.u32 => { + const _016: rt.u32 = rt.u32Add(Guard.id(g13), Guard.id(captured8)); + g13[Symbol.dispose](); + return _016; + }, (): void => { + captured8[Symbol.dispose](); + }); + const m5: rt.usize = rt.ownedCount(rt.iterMap(rt.iterFrom(_528, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), _531)); + const _538: rt.usize = Pile.count$iter_Iterator(pile(4, 6)); + const args42: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(m5, f), (f: rt.Formatter) => rt.usizeDisplay(_538, f)]; + Log.note(log, rt.fmtFormat(["count ", args42[0], " ", args42[1]])); + } else if (_23 === 15) { + const last2: Guard.Guard | undefined = Pile.last$iter_Iterator(pile(1, 4)); + const back: Guard.Guard | undefined = rt.ownedLast(rt.iterRev(rt.iterFrom(pile(4, 7), Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 })), rt.drop); + const skipped: Guard.Guard | undefined = rt.ownedLast(rt.iterSkip(rt.iterFrom(pile(7, 9), Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), 1, rt.drop), rt.drop); + const _568: rt.u32 | undefined = option_map$1raha9y(last2, (g5: Guard.Guard): rt.u32 => { + const _08: rt.u32 = Guard.id(g5); + g5[Symbol.dispose](); + return _08; + }); + const _570: rt.u32 | undefined = option_map$1raha9y(back, (g6: Guard.Guard): rt.u32 => { + const _09: rt.u32 = Guard.id(g6); + g6[Symbol.dispose](); + return _09; + }); + const _572: rt.u32 | undefined = option_map$1raha9y(skipped, (g7: Guard.Guard): rt.u32 => { + const _010: rt.u32 = Guard.id(g7); + g7[Symbol.dispose](); + return _010; + }); + const args44: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_568, f, rt.u32Debug), (f: rt.Formatter) => rt.fmtOption(_570, f, rt.u32Debug), (f: rt.Formatter) => rt.fmtOption(_572, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["last ", args44[0], " ", args44[1], " ", args44[2]])); + const _581: rt.Iter = rt.iterRev(rt.iterFrom(pile(1, 6), Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 })); + _733 = false; + const captured4 = c; + const _593: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_581, rt.closure((g8: Guard.Guard): [Guard.Guard, rt.u32] => { + return [g8, Guard.id(captured4)] as [Guard.Guard, rt.u32]; + }, (): void => { + captured4[Symbol.dispose](); + })), undefined as Guard.Guard | undefined, (_2: Guard.Guard | undefined, _312: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { + const _012: Guard.Guard | undefined = _312[0]; + rt.drop(_2); + return _012; + }, true), (g10: Guard.Guard): rt.u32 => { + const _013: rt.u32 = Guard.id(g10); + g10[Symbol.dispose](); + return _013; + }); + const _595: rt.u32 = Guard.id(d); + const _598: rt.u32 = Guard.id(e); + const args46: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_593, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_595, f), (f: rt.Formatter) => rt.u32Display(_598, f)]; + Log.note(log, rt.fmtFormat(["rev ", args46[0], " ", args46[1], " ", args46[2]])); + } else if (_23 === 16) { + const held2: Pile.Pile = pile(1, 6); + const part = option_map$1raha9y(rt.iterNth(rt.iterRev(rt.iterFrom(held2, Pile.next$iter_Iterator, undefined, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)) })), 1, rt.drop), (g3: Guard.Guard): rt.u32 => { const _05: rt.u32 = Guard.id(g3); g3[Symbol.dispose](); return _05; }); - const args20: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part3, f, rt.u32Debug)]; - Log.note(log, rt.fmtFormat(["ends ", args20[0]])); - const _304: rt.Iter = flat; - _344 = false; - const captured4 = d; - const n6: rt.usize = rt.ownedCount(rt.iterMap(_304, rt.closure((g4: Guard.Guard): rt.u32 => { - const _06: rt.u32 = rt.u32Add(Guard.id(g4), Guard.id(captured4)); + const args48: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["nth ", args48[0]])); + _733 = false; + const captured3 = c; + const n10: rt.u32 = rt.iterFold(rt.iterMap(rt.iterFrom(held2, Pile.next$iter_Iterator, undefined, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.closure((g4: Guard.Guard): rt.u32 => { + const _06: rt.u32 = rt.u32Sub(rt.u32Add(Guard.id(g4), Guard.id(captured3)), Guard.id(captured3)); g4[Symbol.dispose](); return _06; }, (): void => { - captured4[Symbol.dispose](); - }))); - const _312: rt.u32 = Guard.id(e); - const args22: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n6, f), (f: rt.Formatter) => rt.u32Display(_312, f)]; - Log.note(log, rt.fmtFormat(["flat ", args22[0], " ", args22[1]])); + captured3[Symbol.dispose](); + })), 0, (n13: rt.u32, k: rt.u32): rt.u32 => { + return rt.u32Add(n13, k); + }, true); + const _635: rt.usize = held2.held.length; + const args50: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n10, f), (f: rt.Formatter) => rt.usizeDisplay(_635, f)]; + Log.note(log, rt.fmtFormat(["borrowed ", args50[0], " ", args50[1]])); + const _645: Pile.Pile = pile(6, 8); + const _648: Guard.Guard[] = guards(8, 10); + const m6: rt.usize = rt.ownedCount(rt.iterChain(rt.iterFrom(_645, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), rt.iterSlice(_648, rt.drop)), rt.drop); + const _657: rt.u32 = Guard.id(d); + const _660: rt.u32 = Guard.id(e); + const args52: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(m6, f), (f: rt.Formatter) => rt.u32Display(_657, f), (f: rt.Formatter) => rt.u32Display(_660, f)]; + Log.note(log, rt.fmtFormat(["chain ", args52[0], " ", args52[1], " ", args52[2]])); + held2[Symbol.dispose](); + } else { + const a: Guard.Guard = guard(20); + const _674: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); + const captured = id; + const captured2 = a; + rt.iterTryRfold(_674, 0, rt.closure((n12: rt.u32, g2: Guard.Guard): rt.u32 | undefined => { + if (!(Guard.id(g2) !== rt.u32Add(captured, 3))) { + const _145: rt.u32 = Guard.id(g2); + const _172: rt.u32 = Guard.id(captured2); + const _202: string = rt.resultUnwrap(rt.stringFromUtf8(Log.text(log)), rt.fmtFromUtf8ErrorDebug); + const args54: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_145, f), (f: rt.Formatter) => rt.u32Display(_172, f), (f: rt.Formatter) => rt.fmtPad(f, _202)]; + rt.panicFmt(["try_rfold of g", args54[0], " with g", args54[1], " after\n", args54[2]]); + } else { + const _04: rt.u32 | undefined = rt.u32Add(n12, Guard.id(g2)); + g2[Symbol.dispose](); + return _04; + } + }, (): void => { + captured2[Symbol.dispose](); + }), true, true); + rt.drop(_674); } - if (_343) { + if (_731) { e[Symbol.dispose](); } - _343 = false; - if (_344) { + _731 = false; + if (_732) { d[Symbol.dispose](); } - _344 = false; + _732 = false; + if (_733) { + c[Symbol.dispose](); + } + _733 = false; } /** `last` and `min` of `Option`s, by what drops: a `None` item apart from no items. */ diff --git a/ts/fixtures/task/src/drops.rs b/ts/fixtures/task/src/drops.rs index 972886355..53d5a8cc7 100644 --- a/ts/fixtures/task/src/drops.rs +++ b/ts/fixtures/task/src/drops.rs @@ -722,8 +722,8 @@ pub fn folded(log: &Log, id: u32, arg: u8) { folds::folded(log, id, arg); } -/// Run scenario `arg % 9` of what folds back to front, and through what wraps a closure -/// beside another. +/// Run scenario `arg % 18` of what folds back to front, through what wraps a closure beside +/// another, and through a crate's iterator with folds of its own. The last panics in a fold. pub fn rfolded(log: &Log, id: u32, arg: u8) { folds::rfolded(log, id, arg); } diff --git a/ts/fixtures/task/src/drops/folds.rs b/ts/fixtures/task/src/drops/folds.rs index d863f6d4b..92838ee69 100644 --- a/ts/fixtures/task/src/drops/folds.rs +++ b/ts/fixtures/task/src/drops/folds.rs @@ -405,13 +405,19 @@ pub(super) fn folded(log: &Log, id: u32, arg: u8) { } } -/// Run scenario `arg % 9` of what folds back to front and through what wraps a closure -/// beside another, as `folded` does. +/// Run scenario `arg % 18` of what folds back to front and through what wraps a closure +/// beside another, as `folded` does, of `rfold` and `try_rfold` themselves, and of a +/// crate's iterator with folds of its own. The last panics in a `try_rfold`, with what +/// dropped before. pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { let guard = |n: u32| Guard::new(id + n, log.clone()); let guards = |from: u32, to: u32| (from..to).map(guard).collect::>(); let (c, d, e) = (guard(10), guard(11), guard(12)); - match arg % 9 { + let pile = |from: u32, to: u32| Pile { + held: guards(from, to), + log: log.clone(), + }; + match arg % 18 { 0 => { let n: u32 = guards(1, 5) .into_iter() @@ -536,7 +542,7 @@ pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { .count(); log.note(format!("fuse {n} {m} {}", e.id())); } - _ => { + 8 => { // What is left between the front and back iterators, folded. let mut flat = guards(1, 4) .into_iter() @@ -550,6 +556,189 @@ pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { let n = flat.map(move |g| g.id() + d.id()).count(); log.note(format!("flat {n} {}", e.id())); } + 9 => { + // `rfold` through a closure that owns a guard, of an accumulator that drops. + let kept = guards(1, 6) + .into_iter() + .map(move |g| { + log.note(format!("map {} {}", g.id(), c.id())); + g + }) + .rfold(Some(guard(20)), move |kept, g| { + log.note(format!("rfold {} {}", g.id(), d.id())); + if g.id() % 2 == 1 { Some(g) } else { kept } + }); + // Of an iterator that drops nothing, by a closure that does. + let n = [1u32, 2, 3].iter().rfold(0, move |n, &k| n * 10 + k + e.id() - e.id()); + log.note(format!("rfold {:?} {n}", kept.map(|g| g.id()))); + } + 10 => { + // `try_rfold` breaks by `None`, dropping its closure as it returns, before what the + // iterator still holds, which drops with it. + let mut held = guards(1, 6).into_iter(); + let sum = held.try_rfold(0, move |n, g| { + log.note(format!("try {} {}", g.id(), c.id())); + (g.id() != id + 3).then(|| n + g.id() - id) + }); + log.note(format!("tried {sum:?} {}", held.len())); + let rest = held.try_rfold(0, move |n, g| Some(n + g.id() + d.id() - d.id())); + log.note(format!("rest {rest:?} {}", e.id())); + } + 11 => { + // By `Err`, through a `map` whose closure it borrows, which drops with the map. + let mut mapped = guards(1, 6).into_iter().map(move |g| { + log.note(format!("map {} {}", g.id(), c.id())); + g + }); + let r: Result = + mapped.try_rfold(0, move |n, g| if g.id() == id + 2 { Err(g) } else { Ok(n + g.id() + d.id() - d.id()) }); + log.note(format!("tried {:?}", r.map_err(|g| g.id()))); + drop(mapped); + log.note(format!("dropped {}", e.id())); + } + 12 => { + use std::ops::ControlFlow; + // By `Break`, through a chain, which drops each half it ends as it goes. + let mut chained = guards(1, 3).into_iter().chain(guards(3, 6)).rev(); + let r = chained.try_rfold(0, move |n, g| match g.id() == id + 4 { + true => ControlFlow::Break(g), + false => ControlFlow::Continue(n + g.id() + c.id() - c.id()), + }); + let broke = match r { + ControlFlow::Break(g) => Some(g.id()), + ControlFlow::Continue(_) => None, + }; + log.note(format!("broke {broke:?}")); + let n = chained.try_rfold(0, |n, g| ControlFlow::<(), u32>::Continue(n + g.id() - id)); + log.note(format!("rest {n:?} {} {}", d.id(), e.id())); + } + 13 => { + // Of nothing: each closure drops before the iterator, or as `try_rfold` returns. + let none = guards(1, 1).into_iter().rfold(guard(20), move |acc, _| { + log.note(format!("never {}", c.id())); + acc + }); + let mut empty = guards(1, 1).into_iter().map(move |g| g.id() + d.id()); + let tried = empty.try_rfold(0u32, move |n, k| { + log.note(format!("never {}", e.id())); + n.checked_add(k) + }); + log.note(format!("empty {} {tried:?}", none.id())); + } + 14 => { + // A crate's own `fold` and `count`, which std's `map` and `for_each` call, drop + // what they hold, and the closure std gives the fold, where their bodies do. + let n = pile(1, 5) + .map(move |g| { + log.note(format!("map {} {}", g.id(), c.id())); + g.id() - id + }) + .fold(0, |n, k| n * 10 + k); + log.note(format!("fold {n}")); + pile(5, 8).for_each(move |g| log.note(format!("each {} {}", g.id(), d.id()))); + let m = pile(1, 4).map(move |g| g.id() + e.id()).count(); + log.note(format!("count {m} {}", pile(4, 6).count())); + } + 15 => { + // Its own `last`, `rfold` through `rev`, and `nth` through `skip`. + let last = pile(1, 4).last(); + let back = pile(4, 7).rev().last(); + let skipped = pile(7, 9).skip(1).last(); + log.note(format!("last {:?} {:?} {:?}", last.map(|g| g.id()), back.map(|g| g.id()), skipped.map(|g| g.id()))); + let kept = pile(1, 6).rev().map(move |g| (g, c.id())).fold(None, |_, (g, _)| Some(g)); + log.note(format!("rev {:?} {} {}", kept.map(|g| g.id()), d.id(), e.id())); + } + 16 => { + // Its own `nth_back` through `rev`, `count` through `chain`, and its `fold`, not + // called through `&mut`. + let mut held = pile(1, 6); + log.note(format!("nth {:?}", held.by_ref().rev().nth(1).map(|g| g.id()))); + let n = (&mut held).map(move |g| g.id() + c.id() - c.id()).fold(0, |n, k| n + k); + log.note(format!("borrowed {n} {}", held.held.len())); + let m = pile(6, 8).chain(guards(8, 10)).count(); + log.note(format!("chain {m} {} {}", d.id(), e.id())); + } + _ => { + let a = guard(20); + guards(1, 6).into_iter().try_rfold(0, move |n, g| { + assert!(g.id() != id + 3, "try_rfold of g{} with g{} after\n{}", g.id(), a.id(), String::from_utf8(log.text()).unwrap()); + Some(n + g.id()) + }); + } + } +} + +/// Guards popped from the back of a `Vec`, with its own `nth`, `nth_back`, folds, `count`, +/// and `last`, each of which notes it was called. Its folds stop short of the last guard +/// and drop their closure before they note they folded, and the rest drop with it. +struct Pile { + held: Vec, + log: Log, +} + +impl Iterator for Pile { + type Item = Guard; + + fn next(&mut self) -> Option { + self.held.pop() + } + + fn size_hint(&self) -> (usize, Option) { + (self.held.len(), Some(self.held.len())) + } + + fn nth(&mut self, n: usize) -> Option { + self.log.note(format!("pile nth {n}")); + for _ in 0..n { + drop(self.held.pop()?); + } + self.held.pop() + } + + fn fold B>(mut self, init: B, mut f: F) -> B { + self.log.note("pile fold".into()); + let mut acc = init; + while self.held.len() > 1 { + acc = f(acc, self.held.pop().unwrap()); + } + drop(f); + self.log.note("pile folded".into()); + acc + } + + fn count(self) -> usize { + self.log.note(format!("pile count {}", self.held.len())); + self.held.len() + } + + fn last(mut self) -> Option { + self.log.note("pile last".into()); + (!self.held.is_empty()).then(|| self.held.remove(0)) + } +} + +impl DoubleEndedIterator for Pile { + fn next_back(&mut self) -> Option { + (!self.held.is_empty()).then(|| self.held.remove(0)) + } + + fn nth_back(&mut self, n: usize) -> Option { + self.log.note(format!("pile nth_back {n}")); + for _ in 0..n { + drop(self.next_back()?); + } + self.next_back() + } + + fn rfold B>(mut self, init: B, mut f: F) -> B { + self.log.note("pile rfold".into()); + let mut acc = init; + while self.held.len() > 1 { + acc = f(acc, self.held.remove(0)); + } + drop(f); + self.log.note("pile rfolded".into()); + acc } } diff --git a/ts/runtime/rt/iter.ts b/ts/runtime/rt/iter.ts index af602ba18..9e850e074 100644 --- a/ts/runtime/rt/iter.ts +++ b/ts/runtime/rt/iter.ts @@ -26,7 +26,7 @@ import { ByteSlice, ByteVec, byteVecExtendFromSlice, byteVecPush, byteVecReserve import { AtIndex, BTreeIter, HashIter, type Ordering } from "./collections.ts"; import { type Hasher, hash8 } from "./hash.ts"; import { charStep, intToBig, type Limbs, lt as wideLt, type Step } from "./int.ts"; -import { drop as dispose, dropRange } from "./task.ts"; +import { closure, drop as dispose, dropRange } from "./task.ts"; /** What `next` returns once an iterator is exhausted, which no item is. */ export const DONE: unique symbol = /* @__PURE__ */ Symbol("DONE"); @@ -543,12 +543,29 @@ export function iterSuccessors(first: T | undefined | None, succ: (item: T) = } /** - * An `impl Iterator` of the translated crate, which `next` calls the `next` of, and `drop` - * drops. `hint`, `back`, and `len` call its own `size_hint`, `next_back`, and `len`, where - * it has them. + * The methods of std's iterator traits an iterator of the translated crate has of its own, + * beside `next`, each a function of its source: `iterFrom` calls each where std's + * adaptors and consumers do. `fold`, `rfold`, `count`, and `last` take it by value. */ -export function iterFrom(source: S, next: (source: S) => T | Done, drop?: Drop, hint?: (source: S) => SizeHint, back?: (source: S) => T | Done, len?: (source: S) => number): Iter { - return new FromNext(source, next, drop, hint, back, len); +export interface Own { + readonly hint?: (source: S) => SizeHint; + readonly back?: (source: S) => T | Done; + readonly len?: (source: S) => number; + readonly nth?: (source: S, n: number) => T | Done; + readonly nthBack?: (source: S, n: number) => T | Done; + /** Of one accumulator type in Rust, which only moves the one it is given, as any it is called with. */ + readonly fold?: (source: S, acc: never, f: never) => unknown; + readonly rfold?: (source: S, acc: never, f: never) => unknown; + readonly count?: (source: S) => number; + readonly last?: (source: S) => T | Done; +} + +/** + * An `impl Iterator` of the translated crate, which `next` calls the `next` of, `drop` + * drops, and `own` reads by the methods it has of its own. + */ +export function iterFrom(source: S, next: (source: S) => T | Done, drop?: Drop, own?: Own): Iter { + return new FromNext(source, next, drop, own); } /** An iterator borrowed by `&mut`, which std's adaptors take as one: its items, but never it to drop. */ @@ -985,6 +1002,39 @@ export function iterFold(it: Iter, init: A, f: (acc: A, item: T) => A, return it.fold(init, f, owns ? () => dispose(f) : undefined); } +/** `DoubleEndedIterator::rfold`, from the back, as `iterFold`. */ +export function iterRfold(it: Iter, init: A, f: (acc: A, item: T) => A, drops = false, owns = false): A { + if (!drops) { + const folded = it.folded(true); + let acc = init; + for (let item = folded.nextBack(); item !== DONE; item = folded.nextBack()) acc = f(acc, item); + if (owns) dispose(f); + return acc; + } + return it.rfold(init, f, owns ? () => dispose(f) : undefined); +} + +/** + * `DoubleEndedIterator::try_rfold`, from the back as `try_rfold` steps it, until `f` + * breaks: by an `Option`'s `None`, `none` where that is `rt.None`, if `option`, and else by + * an `rt.Result`'s `Err`, as a `Result` or a `ControlFlow` breaks. It returns what broke, or + * the accumulator as the type continues with it. If it `owns` `f`, `f` drops as it returns. + */ +export function iterTryRfold(it: Iter, init: A, f: (acc: A, item: T) => R, option = false, owns = false, none?: None): R { + const folded = it.folded(); + let acc = init; + for (let item = folded.nextBack(); item !== DONE; item = folded.nextBack()) { + const step = f(acc, item); + if (option ? step === none : !(step as Result).ok) { + if (owns) dispose(f); + return step; + } + acc = option ? (step as unknown as A) : (step as { value: A }).value; + } + if (owns) dispose(f); + return (option ? acc : Ok(acc)) as R; +} + /** `Iterator::for_each`, which drops `f` if it `owns` it, as `iterFold` does. */ export function iterForEach(it: Iter, f: (item: T) => void, drops = false, owns = false): void { if (!drops) { @@ -1392,6 +1442,7 @@ export function ownedLast(it: Iter, drop?: Drop, none?: None): T | unde /** `count`, dropping each item by `drop`, and then `it`, as std's of its kind does. */ function count(it: Iter, drop: Drop | undefined): number { + if (it instanceof FromNext && it.own?.count !== undefined) return it.taken(it.own.count); if (it instanceof EnumerateIter) return count(it.inner, items(drop)); if (it instanceof ChainIter) { // std's: each iterator's own `count`, the first's first. @@ -1448,6 +1499,7 @@ function count(it: Iter, drop: Drop | undefined): number { * does. By `fold`, each item drops as the next replaces it. */ function last(it: Iter, drop: Drop | undefined): T | Done { + if (it instanceof FromNext && it.own?.last !== undefined) return it.taken(it.own.last); if ((it instanceof SliceIter && drop !== undefined) || (it instanceof BTreeIter && it.back)) { // std's, of a `Vec`'s or an array's, and of a B-tree's `into_keys` and // `into_values`: the last item, and then the rest drop with it. @@ -1919,25 +1971,21 @@ class OptionIter extends Iter implements Disposable { } /** - * An iterator whose `next` is a function of its source, which `drop` drops, as are its - * `size_hint`, `next_back`, and `len` where it has them. + * An iterator whose `next` is a function of its source, which `drop` drops, and which `own` + * reads by the methods it has of its own. */ class FromNext extends Iter implements Disposable { private readonly source: S; private readonly step: (source: S) => T | Done; private drop: Drop | undefined; - private readonly hint: ((source: S) => SizeHint) | undefined; - private readonly back: ((source: S) => T | Done) | undefined; - private readonly exact: ((source: S) => number) | undefined; + readonly own: Own | undefined; - constructor(source: S, step: (source: S) => T | Done, drop?: Drop, hint?: (source: S) => SizeHint, back?: (source: S) => T | Done, exact?: (source: S) => number) { + constructor(source: S, step: (source: S) => T | Done, drop?: Drop, own?: Own) { super(); this.source = source; this.step = step; this.drop = drop; - this.hint = hint; - this.back = back; - this.exact = exact; + this.own = own; } next(): T | Done { @@ -1946,21 +1994,60 @@ class FromNext extends Iter implements Disposable { /** Only an iterator with its own `next_back` is read from the back. */ override nextBack(): T | Done { - return (this.back as (source: S) => T | Done)(this.source); + return (this.own?.back as (source: S) => T | Done)(this.source); + } + + /** Its own, which drops what it skips itself. */ + override nth(n: number, drop?: Drop): T | Done { + const nth = this.own?.nth; + return nth === undefined ? super.nth(n, drop) : nth(this.source, n); + } + + override nthBack(n: number, drop?: Drop): T | Done { + const nthBack = this.own?.nthBack; + return nthBack === undefined ? super.nthBack(n, drop) : nthBack(this.source, n); } override sizeHint(): SizeHint { - return this.hint === undefined ? super.sizeHint() : this.hint(this.source); + const hint = this.own?.hint; + return hint === undefined ? super.sizeHint() : hint(this.source); } /** Its own, or std's, of its size hint. */ override len(): number { - return this.exact === undefined ? hintLen(this) : this.exact(this.source); + const len = this.own?.len; + return len === undefined ? hintLen(this) : len(this.source); + } + + override fold(acc: A, f: (acc: A, item: T) => A, release?: () => void): A { + const fold = this.own?.fold; + return fold === undefined ? super.fold(acc, f, release) : this.folds(fold, acc, f, release); + } + + override rfold(acc: A, f: (acc: A, item: T) => A, release?: () => void): A { + const rfold = this.own?.rfold; + return rfold === undefined ? super.rfold(acc, f, release) : this.folds(rfold, acc, f, release); + } + + /** + * Its own `fold` or `rfold`, which takes it by value: given `f` as a closure that drops + * what it owns by `release`, as the crate's drops the closure std gives it. + */ + private folds(fold: (source: S, acc: never, f: never) => unknown, acc: A, f: (acc: A, item: T) => A, release: (() => void) | undefined): A { + this.drop = undefined; + const g = release === undefined ? f : closure((acc: A, item: T) => f(acc, item), release); + return (fold as (source: S, acc: A, f: (acc: A, item: T) => A) => A)(this.source, acc, g); + } + + /** Its own `count` or `last`, which takes it by value. */ + taken(f: (source: S) => R): R { + this.drop = undefined; + return f(this.source); } /** Its source cloned by `h.v`, as the crate's own `Clone` of it. */ override clone(h?: Clones): Iter { - return new FromNext(cloned(this.source, h?.v), this.step, this.drop, this.hint, this.back, this.exact); + return new FromNext(cloned(this.source, h?.v), this.step, this.drop, this.own); } [Symbol.dispose](): void { diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index 950f51806..fc6397a3c 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -56,17 +56,34 @@ fn own_next<'tcx>(b: &Body<'_, '_, 'tcx>, ty: Ty<'tcx>) -> Option /// The methods of std's iterator traits, by trait, that an iterator of the crate may have /// of its own: `rt.iterFrom` calls each where std's adaptors do. -const OWN: [(&str, &str); 4] = [ +const OWN: [(&str, &str); 10] = [ ("Iterator", "next"), ("Iterator", "size_hint"), + ("Iterator", "nth"), + ("Iterator", "fold"), + ("Iterator", "count"), + ("Iterator", "last"), ("DoubleEndedIterator", "next_back"), + ("DoubleEndedIterator", "nth_back"), + ("DoubleEndedIterator", "rfold"), ("ExactSizeIterator", "len"), ]; +/// The methods in `OWN` that take the iterator by value, which std's consumers call of +/// one they own, but not through a `&mut`, which reads it by `try_fold`. +const BY_VALUE: [(&str, &str); 4] = [ + ("Iterator", "fold"), + ("DoubleEndedIterator", "rfold"), + ("Iterator", "count"), + ("Iterator", "last"), +]; + /// Refuse an `impl Iterator` of the crate, whose `next` is `next_fn`, that std's adaptors /// would read other than through the methods in `OWN`: one whose `Iterator` or -/// `DoubleEndedIterator` impl overrides another, such as `fold` or `nth_back`, which they -/// call in its place. +/// `DoubleEndedIterator` impl overrides another, such as `find`, which they call in its +/// place, or whose own `fold` or `rfold` holds its accumulator in an `Option` or a `Poll`, +/// as `fold_args` translates it for one that can't tell an `rt.None` or `rt.Pending` +/// accumulator apart. pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { let tcx = t.tcx; let Some(imp) = tcx.impl_of_assoc(next_fn) else { @@ -87,18 +104,64 @@ pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { }; for item in tcx.associated_items(other).in_definition_order() { let name = item.name(); - if item.is_fn() && !OWN.contains(&(tr.as_str(), name.as_str())) { + if !item.is_fn() { + continue; + } + if !OWN.contains(&(tr.as_str(), name.as_str())) { t.err( tcx.def_span(item.def_id), format!("overriding `{tr}::{name}`, which std's adaptors call in place of `next` or beside it"), ); + } else if matches!(name.as_str(), "fold" | "rfold") && wraps_acc(tcx, item.def_id) { + t.err( + tcx.def_span(item.def_id), + format!("overriding `{tr}::{name}` with its accumulator in an `Option` or a `Poll`, which is not supported yet"), + ); } } } } +/// Whether the crate's own `fold` or `rfold`, `def_id`, holds its accumulator, its first type +/// parameter, in an `Option` or a `Poll`. +fn wraps_acc(tcx: TyCtxt<'_>, def_id: DefId) -> bool { + let generics = tcx.generics_of(def_id); + let Some(acc) = generics.own_params.iter().find(|p| matches!(p.kind, ty::GenericParamDefKind::Type { .. })) else { + return false; + }; + tcx.optimized_mir(def_id).local_decls.iter().any(|local| { + local.ty.walk().filter_map(|arg| arg.as_type()).any(|t| match t.kind() { + ty::Adt(adt, args) => { + matches!(Std::of(tcx, adt.did()), Some(Std::Option | Std::Poll)) + && matches!(args.type_at(0).kind(), ty::Param(p) if p.index == acc.index) + } + _ => false, + }) + }) +} + +/// The generic arguments the crate's own `fold` or `rfold` of `item`s is translated for: +/// the accumulator, as an `Option`, whose `None` in an `Option` of it is `rt.None` +/// and which nothing else tells apart from any other value, as a body generic over it +/// can't, and the closure, as a `Box acc>`, whose JS value is the +/// function `rt.iterFrom` gives it and which drops what std's closure owns as it drops. +fn fold_args<'tcx>(tcx: TyCtxt<'tcx>, item: Ty<'tcx>) -> Option<[Ty<'tcx>; 2]> { + let lang = tcx.lang_items(); + let acc = Ty::new_option(tcx, tcx.types.u32); + let inputs = Ty::new_tup(tcx, &[acc, item]); + let call = ty::ExistentialTraitRef::new(tcx, lang.fn_mut_trait()?, [inputs]); + let output = ty::ExistentialProjection::new(tcx, lang.fn_once_output()?, [inputs], acc.into()); + let preds = tcx.mk_poly_existential_predicates(&[ + ty::Binder::dummy(ty::ExistentialPredicate::Trait(call)), + ty::Binder::dummy(ty::ExistentialPredicate::Projection(output)), + ]); + let f = Ty::new_box(tcx, Ty::new_dynamic(tcx, preds, tcx.lifetimes.re_erased)); + Some([acc, f]) +} + /// The crate's own `tr::name` of an iterator of type `ty`, through any references, if `ty` -/// is one of the crate's own that overrides it or has it as a required method. +/// is one of the crate's own that overrides it or has it as a required method: its +/// instance for `fold_args` if it is a `fold` or `rfold`. fn own_method<'tcx>(b: &Body<'_, '_, 'tcx>, ty: Ty<'tcx>, tr: &str, name: &str) -> Option> { let tcx = b.t.tcx; let ty = ty.peel_refs(); @@ -114,10 +177,75 @@ fn own_method<'tcx>(b: &Body<'_, '_, 'tcx>, ty: Ty<'tcx>, tr: &str, name: &str) .filter_by_name_unhygienic(rustc_span::Symbol::intern(name)) .next()? .def_id; - let instance = Instance::try_resolve(tcx, b.t.typing_env_pub(), method, tcx.mk_args(&[ty.into()])).ok()??; + let mut args = vec![ty::GenericArg::from(ty)]; + if matches!(name, "fold" | "rfold") { + args.extend(fold_args(tcx, b.t.iter_item(ty)?)?.map(ty::GenericArg::from)); + } + let instance = Instance::try_resolve(tcx, b.t.typing_env_pub(), method, tcx.mk_args(&args)).ok()??; (instance.def_id() != method).then_some(instance) } +/// Whether `ty` holds, by value rather than through a reference, an iterator of the crate with a +/// method in `BY_VALUE` of its own, which std's consumers call where they take it. +fn folds_own<'tcx>(b: &Body<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool { + let mut walk = ty.walk(); + while let Some(arg) = walk.next() { + let Some(t) = arg.as_type() else { + continue; + }; + if t.is_ref() { + walk.skip_current_subtree(); + } else if BY_VALUE.iter().any(|&(tr, name)| own_method(b, t, tr, name).is_some()) { + return true; + } + } + false +} + +/// The `rt.Own` of the crate's iterator of type `ty`: each method of `OWN` but `next` that +/// it has of its own, as a function of its source, and those in `BY_VALUE` only if it is +/// `owned`. `undefined` if it has none. +fn own_methods<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, owned: bool, span: Span) -> Expr { + let none = b.t.iter_item(ty.peel_refs()).and_then(|item| b.t.none_arg(item)); + let mut props = Vec::new(); + for (tr, name) in &OWN[1..] { + if !owned && BY_VALUE.contains(&(tr, name)) { + continue; + } + let Some(instance) = own_method(b, ty, tr, name) else { + continue; + }; + let sym = Expr::Sym(b.t.instance(instance)); + // Each that returns an `Option` of an item, as the protocol returns it: an item or + // `rt.DONE`. + let method = match *name { + "next_back" | "nth" | "nth_back" | "last" => { + let n = (*name != "next_back" && *name != "last").then_some("n"); + let args = [Expr::ident("it")].into_iter().chain(n.map(Expr::ident)).collect(); + let option = [sym.call(args)].into_iter().chain(none.clone()).collect(); + let it = Param { + name: "it".into(), + ty: Some(b.t.ty(ty.peel_refs(), span)), + }; + // `n` is typed by its place in `rt.Own`. + let params = [it].into_iter().chain(n.map(|n| Param { name: n.into(), ty: None })); + Expr::Lambda(params.collect(), Box::new(Expr::rt("iterFromOption", option))) + } + _ => sym, + }; + let key = match *name { + "size_hint" => "hint".into(), + "next_back" => "back".into(), + other => super::camel(other), + }; + props.push((Key::Name(key), method)); + } + match props.is_empty() { + true => Expr::undefined(), + false => Expr::Object(props), + } +} + /// `iter.next_back()` of the crate's own iterator of type `ty`, as the protocol returns it: /// an item or `rt.DONE`. fn own_back<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, iter: Expr) -> Option { @@ -165,38 +293,13 @@ pub fn into_iter<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, value: Expr, sp not_bound(b, ty, span); return Some(match own_next(b, ty) { Some(instance) => { - let sym = b.t.instance(instance); - let param_ty = b.t.ty(ty.peel_refs(), span); - let it = "it".to_string(); - let next = Expr::Sym(sym).call(vec![Expr::ident(&it)]); - // Each of its own methods `rt.iterFrom` calls, as a function of the source. - let of = |body: Option| match body { - Some(body) => { - let param = Param { - name: it.clone(), - ty: Some(param_ty.clone()), - }; - Expr::Lambda(vec![param], Box::new(body)) - } - None => Expr::undefined(), - }; - let call = |b: &mut Body<'_, '_, 'tcx>, tr: &str, name: &str| { - let instance = own_method(b, ty, tr, name)?; - Some(Expr::Sym(b.t.instance(instance)).call(vec![Expr::ident(&it)])) - }; + let next = Expr::Sym(b.t.instance(instance)); let drop = match owned && b.t.drops(ty) { true => b.t.dropper(ty, span), false => Expr::undefined(), }; - let own = [ - call(b, "Iterator", "size_hint"), - own_back(b, ty, Expr::ident(&it)), - call(b, "ExactSizeIterator", "len"), - ]; - Expr::rt( - "iterFrom", - tail(vec![value, of(Some(next))], [vec![drop], own.map(of).to_vec()].concat()), - ) + let own = own_methods(b, ty, owned, span); + Expr::rt("iterFrom", tail(vec![value, next], vec![drop, own])) } // One borrowed by `&mut`, which std's adaptors may drop once it ends, but which // is its owner's to drop, and which a consumer reads on through the borrow @@ -569,11 +672,18 @@ pub fn call<'tcx>( } } // Each owns a closure it is given by value, which drops as its fold ends. - "for_each" | "fold" => { + "for_each" | "fold" | "rfold" => { let drops = iter_drops(b, self_ty, span); let owns = flag(b.t.drops(targ(gargs.types().count() - 1)?)); method(&camel, tail(rest, vec![drops, owns])) } + // `try_rfold::`, which drops its closure as it returns, but not the + // iterator, which it borrows. + "try_rfold" => { + let (option, none) = try_flow(b, targ(3)?)?; + let owns = flag(b.t.drops(targ(2)?)); + method(&camel, tail(rest, [flag(option), owns].into_iter().chain(none).collect())) + } // std's `Sum` and `Product` are of the type or a reference to it: another is the crate's. "sum" | "product" if item.peel_refs() != targ(1)? => None, // `Duration`'s carries its nanoseconds and panics as std's does, not as `+` would. @@ -1461,6 +1571,23 @@ pub(super) fn text_items<'tcx>(t: &Translator<'_, 'tcx>, item: Ty<'tcx>) -> Opti } } +/// How a `try_` fold's closure returning an `r` breaks: by `None`, and the `rt.None` that is +/// where it is, if it is an `Option`, or a `ControlFlow` held as one, and else by `Err`, if +/// it is a `Result`, or a `ControlFlow` held as one. +fn try_flow<'tcx>(b: &Body<'_, '_, 'tcx>, r: Ty<'tcx>) -> Option<(bool, Option)> { + let ty::Adt(_, args) = r.kind() else { + return None; + }; + match b.t.std_of(r)? { + Std::Option => Some((true, b.t.none_arg(args.type_at(0)))), + Std::ControlFlow if library::Flow::of(b.t.tcx, args) == library::Flow::Option => { + Some((true, b.t.none_arg(args.type_at(1)))) + } + Std::Result | Std::ControlFlow => Some((false, None)), + _ => None, + } +} + /// Whether an iterator of type `ty` that a runtime function takes by value drops what it /// holds, which its `rt.Iter` drops as std's does: `true`, or `undefined` for one that /// drops nothing. @@ -1487,11 +1614,13 @@ pub(super) fn iter_take<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, folds: b } } -/// Whether an iterator of type `ty` drops, refusing one it can't drop: the crate's own -/// drops through `rt.iterFrom`. +/// Whether a runtime function takes an iterator of type `ty` by value as std's consumers +/// do, by its `fold` or its kind's own `count` and `last`, rather than as `folded` steps +/// it: if it drops, refusing one it can't drop, as the crate's own drops through +/// `rt.iterFrom`, or holds one of the crate's own that `folds_own`. fn drops_iter<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, span: Span) -> bool { if !b.t.drops(ty) { - return false; + return folds_own(b, ty); } if own_next(b, ty).is_none() { b.t.dropper(ty, span); diff --git a/ts/src/lower/library.rs b/ts/src/lower/library.rs index 4a0ab4100..f21ac26b6 100644 --- a/ts/src/lower/library.rs +++ b/ts/src/lower/library.rs @@ -958,7 +958,8 @@ fn releases(owner: &str, name: &str) -> bool { | "eq_by" | "cmp_by" | "partial_cmp_by" - ) | ("Entry", "or_insert_with" | "or_insert_with_key" | "and_modify") + ) | ("DoubleEndedIterator", "rfold" | "try_rfold") + | ("Entry", "or_insert_with" | "or_insert_with_key" | "and_modify") ) } @@ -1002,7 +1003,7 @@ fn takes_none(owner: &str, name: &str) -> bool { "get" | "get_mut" | "set" | "get_or_init" | "get_or_try_init" | "take" | "into_inner" ) | ("Arc" | "Rc", "into_inner") - | ("DoubleEndedIterator", "next_back" | "nth_back" | "rfind") + | ("DoubleEndedIterator", "next_back" | "nth_back" | "rfind" | "try_rfold") | ("dyn Any", "downcast_ref" | "downcast_mut") | ("ptr", "as_ref" | "as_mut") | ("from_fn", "from_fn") diff --git a/ts/tests/task.ts b/ts/tests/task.ts index 6959edb1a..81ef2c5cf 100644 --- a/ts/tests/task.ts +++ b/ts/tests/task.ts @@ -425,7 +425,7 @@ export const cases: Uint8Array[] = [ ...Array.from({ length: 6 }, (_, arg) => script(["cells", arg])), // Each scenario of adaptors' closures that drop, folded either way. ...Array.from({ length: 42 }, (_, arg) => script(["folded", arg])), - ...Array.from({ length: 9 }, (_, arg) => script(["rfolded", arg])), + ...Array.from({ length: 18 }, (_, arg) => script(["rfolded", arg])), // Where std drops values inside its iterators and formatting. ...[...Array.from({ length: 10 }, (_, arg) => arg), 19, 29].map((arg) => script(["inside", arg])), // Where std drops a closure given to a consumer or an entry. From b46c2f817ad19087ce1113d347939e57620af174 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:14:52 -0800 Subject: [PATCH 03/13] style(ts): format Co-Authored-By: Claude Opus 5.5 --- ts/fixtures/lang/src/ends.rs | 8 +++++++- ts/fixtures/task/src/drops/folds.rs | 29 ++++++++++++++++++++++++----- ts/src/lower/iter.rs | 20 ++++++++++++++++---- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/ts/fixtures/lang/src/ends.rs b/ts/fixtures/lang/src/ends.rs index fa8665190..bab5b1e68 100644 --- a/ts/fixtures/lang/src/ends.rs +++ b/ts/fixtures/lang/src/ends.rs @@ -328,7 +328,13 @@ fn consumed + ExactSizeIterator>(mut it: I, pi /// `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its /// `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One /// fold panics past `k` items, with what was logged so far. -fn folded + ExactSizeIterator>(mut it: I, pick: u8, k: usize, log: &RefCell>, out: &mut Vec) { +fn folded + ExactSizeIterator>( + mut it: I, + pick: u8, + k: usize, + log: &RefCell>, + out: &mut Vec, +) { let k8 = k as u8; match pick { 0 => out.push(it.fold(1u8, |a, b| a.wrapping_mul(3) ^ b)), diff --git a/ts/fixtures/task/src/drops/folds.rs b/ts/fixtures/task/src/drops/folds.rs index 92838ee69..64b8f5487 100644 --- a/ts/fixtures/task/src/drops/folds.rs +++ b/ts/fixtures/task/src/drops/folds.rs @@ -590,8 +590,13 @@ pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { log.note(format!("map {} {}", g.id(), c.id())); g }); - let r: Result = - mapped.try_rfold(0, move |n, g| if g.id() == id + 2 { Err(g) } else { Ok(n + g.id() + d.id() - d.id()) }); + let r: Result = mapped.try_rfold(0, move |n, g| { + if g.id() == id + 2 { + Err(g) + } else { + Ok(n + g.id() + d.id() - d.id()) + } + }); log.note(format!("tried {:?}", r.map_err(|g| g.id()))); drop(mapped); log.note(format!("dropped {}", e.id())); @@ -644,8 +649,16 @@ pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { let last = pile(1, 4).last(); let back = pile(4, 7).rev().last(); let skipped = pile(7, 9).skip(1).last(); - log.note(format!("last {:?} {:?} {:?}", last.map(|g| g.id()), back.map(|g| g.id()), skipped.map(|g| g.id()))); - let kept = pile(1, 6).rev().map(move |g| (g, c.id())).fold(None, |_, (g, _)| Some(g)); + log.note(format!( + "last {:?} {:?} {:?}", + last.map(|g| g.id()), + back.map(|g| g.id()), + skipped.map(|g| g.id()) + )); + let kept = pile(1, 6) + .rev() + .map(move |g| (g, c.id())) + .fold(None, |_, (g, _)| Some(g)); log.note(format!("rev {:?} {} {}", kept.map(|g| g.id()), d.id(), e.id())); } 16 => { @@ -661,7 +674,13 @@ pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { _ => { let a = guard(20); guards(1, 6).into_iter().try_rfold(0, move |n, g| { - assert!(g.id() != id + 3, "try_rfold of g{} with g{} after\n{}", g.id(), a.id(), String::from_utf8(log.text()).unwrap()); + assert!( + g.id() != id + 3, + "try_rfold of g{} with g{} after\n{}", + g.id(), + a.id(), + String::from_utf8(log.text()).unwrap() + ); Some(n + g.id()) }); } diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index df0fe90d1..6adae80c2 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -115,7 +115,9 @@ pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { } else if matches!(name.as_str(), "fold" | "rfold") && wraps_acc(tcx, item.def_id) { t.err( tcx.def_span(item.def_id), - format!("overriding `{tr}::{name}` with its accumulator in an `Option` or a `Poll`, which is not supported yet"), + format!( + "overriding `{tr}::{name}` with its accumulator in an `Option` or a `Poll`, which is not supported yet" + ), ); } } @@ -126,7 +128,11 @@ pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { /// parameter, in an `Option` or a `Poll`. fn wraps_acc(tcx: TyCtxt<'_>, def_id: DefId) -> bool { let generics = tcx.generics_of(def_id); - let Some(acc) = generics.own_params.iter().find(|p| matches!(p.kind, ty::GenericParamDefKind::Type { .. })) else { + let Some(acc) = generics + .own_params + .iter() + .find(|p| matches!(p.kind, ty::GenericParamDefKind::Type { .. })) + else { return false; }; tcx.optimized_mir(def_id).local_decls.iter().any(|local| { @@ -228,7 +234,10 @@ fn own_methods<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, owned: bool, span ty: Some(b.t.ty(ty.peel_refs(), span)), }; // `n` is typed by its place in `rt.Own`. - let params = [it].into_iter().chain(n.map(|n| Param { name: n.into(), ty: None })); + let params = [it].into_iter().chain(n.map(|n| Param { + name: n.into(), + ty: None, + })); Expr::Lambda(params.collect(), Box::new(Expr::rt("iterFromOption", option))) } _ => sym, @@ -682,7 +691,10 @@ pub fn call<'tcx>( "try_rfold" => { let (option, none) = try_flow(b, targ(3)?)?; let owns = flag(b.t.drops(targ(2)?)); - method(&camel, tail(rest, [flag(option), owns].into_iter().chain(none).collect())) + method( + &camel, + tail(rest, [flag(option), owns].into_iter().chain(none).collect()), + ) } // std's `Sum` and `Product` are of the type or a reference to it: another is the crate's. "sum" | "product" if item.peel_refs() != targ(1)? => None, From 6428d1c2b67116c802f7fc35bc02c9a15c59510a Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:16:02 -0800 Subject: [PATCH 04/13] fix(ts): keep Poll verbatim in the census Co-Authored-By: Claude Opus 5.5 --- ts/fixtures/reject/census.md | 8 ++++---- ts/src/census.rs | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ts/fixtures/reject/census.md b/ts/fixtures/reject/census.md index 93e951eaa..13f7d59b2 100644 --- a/ts/fixtures/reject/census.md +++ b/ts/fixtures/reject/census.md @@ -95,7 +95,7 @@ | 1 | hashing `_` as a key, which is not supported yet | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | fixtures/reject/src/lib.rs:266:16 | -| 1 | overriding `_` with its accumulator in an `Option` or a `_`, which is not supported yet | fixtures/reject/src/lib.rs:125:2 | +| 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | fixtures/reject/src/lib.rs:125:2 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | fixtures/reject/src/lib.rs:150:2 | | 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | fixtures/reject/src/lib.rs:530:1 | @@ -121,7 +121,6 @@ The type or module each refused type or path belongs to. | 3 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 3 | `Mid` | fixtures/reject/src/lib.rs:1303:34 | | 3 | `Outer` | fixtures/reject/src/lib.rs:1303:34 | -| 3 | `Poll` | fixtures/reject/src/lib.rs:72:20 | | 3 | `Reused` | fixtures/reject/src/lib.rs:21:4 | | 3 | `dyn std::any::Any` | fixtures/reject/src/lib.rs:474:32 | | 3 | `std::mem::ManuallyDrop` | fixtures/reject/src/lib.rs:2314:2 | @@ -134,6 +133,7 @@ The type or module each refused type or path belongs to. | 2 | `InTuple` | fixtures/reject/src/lib.rs:1254:9 | | 2 | `InWritten` | fixtures/reject/src/lib.rs:1274:9 | | 2 | `Inside` | fixtures/reject/src/lib.rs:1793:20 | +| 2 | `Poll` | fixtures/reject/src/lib.rs:72:20 | | 2 | `Scaled` | fixtures/reject/src/lib.rs:406:23 | | 2 | `[u32; 3]` | fixtures/reject/src/lib.rs:2138:10 | | 2 | `[u8; 2]` | fixtures/reject/src/lib.rs:1674:37 | @@ -429,7 +429,7 @@ The type or module each refused type or path belongs to. | 1 | hashing `_` as a key, which is not supported yet | `std::collections::BTreeSet` | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | `std::vec::Vec`, `Batched` | fixtures/reject/src/lib.rs:266:16 | -| 1 | overriding `_` with its accumulator in an `Option` or a `_`, which is not supported yet | `Iterator::fold`, `Poll` | fixtures/reject/src/lib.rs:125:2 | +| 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:125:2 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | `DoubleEndedIterator::rfind` | fixtures/reject/src/lib.rs:150:2 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `String::retain` | fixtures/reject/src/lib.rs:732:4 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `str::contains` | fixtures/reject/src/lib.rs:275:4 | @@ -1150,7 +1150,7 @@ The type or module each refused type or path belongs to.
-
overriding `_` with its accumulator in an `Option` or a `_`, which is not supported yet (1) +
overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet (1) - fixtures/reject/src/lib.rs:125:2: overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet diff --git a/ts/src/census.rs b/ts/src/census.rs index 5d32ef700..44b38836e 100644 --- a/ts/src/census.rs +++ b/ts/src/census.rs @@ -162,6 +162,7 @@ const VERBATIM: &[&str] = &[ "Ord", "Pending", "Pointer", + "Poll", "Ready", "Reborrow", "Result", From 61ea38d4ab295fe55a3aa257b350e3f0f424018d Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:23:34 -0800 Subject: [PATCH 05/13] docs(ts): note rt.iterFrom's Own record in MIGRATE Co-Authored-By: Claude Opus 5.5 --- ts/MIGRATE.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ts/MIGRATE.md b/ts/MIGRATE.md index aeaea18fd..5e8383f01 100644 --- a/ts/MIGRATE.md +++ b/ts/MIGRATE.md @@ -2,6 +2,9 @@ ## Unreleased +- `rt.iterFrom` takes `hint`, `back`, and `len` in one `rt.Own` record after `drop`, + which also holds the crate's own `nth`, `fold`, and the rest, as in + `rt.iterFrom(source, next, drop, { hint, back, len })`. - `rt.sliceSort` is the stable sorts and takes the element's size in bytes on wasm32 and whether it is `Freeze` after the test, as in `rt.sliceSort(v, rt.lt, 4, true)`; `rt.sliceSortUnstable` is the unstable ones and takes whether it is `Copy` too. From 8505ceea95b9b536d06ddb4bfdc349e07e3f3c9e Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:38:36 -0800 Subject: [PATCH 06/13] fix(ts): lend a fold's closure to the crate's own fold, and refuse folds generic in more than moves A chain lends its closure to its first half's own fold, which dropped it there. The crate's fold, translated for one accumulator and closure, now refuses a body that tells either apart: a call or constant generic over them, or a drop of the accumulator, in it or its closures. Co-Authored-By: Claude Opus 5.5 --- ts/README.md | 6 +- ts/fixtures/reject/census.md | 36 +- ts/fixtures/reject/expected.txt | 5 +- ts/fixtures/reject/src/lib.rs | 67 ++ ts/fixtures/reject/ts.toml | 3 + ts/fixtures/task/expected/drops/folds.ts | 827 ++++++++++++----------- ts/fixtures/task/src/drops/folds.rs | 8 + ts/runtime/rt/iter.ts | 7 +- ts/src/lower/iter.rs | 171 ++++- 9 files changed, 686 insertions(+), 444 deletions(-) diff --git a/ts/README.md b/ts/README.md index 74e3ee698..e05fe33f7 100644 --- a/ts/README.md +++ b/ts/README.md @@ -892,8 +892,10 @@ copies that std makes, other than a map's, or hands a closure, as `iter_mut` and `and_modify` do, one into a `Result`'s payload passed on or kept, the adaptors without a mapping in `src/lower/iter.rs` (such as `partition`), an own `impl Iterator` or `DoubleEndedIterator` that overrides a provided method other than -those, such as `find` or `for_each`, or whose own `fold` or `rfold` holds its accumulator in an -`Option` or a `Poll`, +those, such as `find` or `for_each`, or whose own `fold` or `rfold` tells its accumulator or +closure apart from another, by an `Option` or a `Poll` of it, a call or constant generic over it +other than calling or dropping the closure or passing them to std's iterators, or a drop of the +accumulator, a pointer's address (`{:p}`), `write!` with a placeholder into the crate's own `fmt::Write`, a `str` pattern other than a `char`, a `&str`, a predicate, or chars, a mutable `str` slice, a copy of a closure that changes diff --git a/ts/fixtures/reject/census.md b/ts/fixtures/reject/census.md index 13f7d59b2..f188634a3 100644 --- a/ts/fixtures/reject/census.md +++ b/ts/fixtures/reject/census.md @@ -1,7 +1,7 @@ # Census of `reject-fixture` -- Refusals: 260 -- Function instances: 296 +- Refusals: 263 +- Function instances: 306 - Generic functions no instance reached, lowered over their type parameters: 13 ## By construct @@ -95,7 +95,10 @@ | 1 | hashing `_` as a key, which is not supported yet | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | fixtures/reject/src/lib.rs:266:16 | -| 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | fixtures/reject/src/lib.rs:125:2 | +| 1 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2422:3 | +| 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2446:11 | +| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | fixtures/reject/src/lib.rs:2469:3 | +| 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | fixtures/reject/src/lib.rs:126:3 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | fixtures/reject/src/lib.rs:150:2 | | 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | fixtures/reject/src/lib.rs:530:1 | @@ -111,6 +114,7 @@ The type or module each refused type or path belongs to. | 11 | `(u8, u8)` | fixtures/reject/src/lib.rs:1220:31 | | 9 | `[u8; 4]` | fixtures/reject/src/lib.rs:423:26 | | 8 | `u8` | fixtures/reject/src/lib.rs:224:6 | +| 6 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 6 | `f16` | fixtures/reject/src/lib.rs:7:14 | | 6 | `std::borrow::Cow` | fixtures/reject/src/lib.rs:280:2 | | 5 | `Gap` | fixtures/reject/src/lib.rs:856:10 | @@ -118,7 +122,6 @@ The type or module each refused type or path belongs to. | 5 | `i32` | fixtures/reject/src/lib.rs:2294:7 | | 4 | `std::pin::Pin` | fixtures/reject/src/lib.rs:91:2 | | 4 | `std::str` | fixtures/reject/src/lib.rs:388:4 | -| 3 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 3 | `Mid` | fixtures/reject/src/lib.rs:1303:34 | | 3 | `Outer` | fixtures/reject/src/lib.rs:1303:34 | | 3 | `Reused` | fixtures/reject/src/lib.rs:21:4 | @@ -429,7 +432,10 @@ The type or module each refused type or path belongs to. | 1 | hashing `_` as a key, which is not supported yet | `std::collections::BTreeSet` | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | `std::vec::Vec`, `Batched` | fixtures/reject/src/lib.rs:266:16 | -| 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:125:2 | +| 1 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2422:3 | +| 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2446:11 | +| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2469:3 | +| 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:126:3 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | `DoubleEndedIterator::rfind` | fixtures/reject/src/lib.rs:150:2 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `String::retain` | fixtures/reject/src/lib.rs:732:4 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `str::contains` | fixtures/reject/src/lib.rs:275:4 | @@ -1150,9 +1156,27 @@ The type or module each refused type or path belongs to.
+
overriding `_` with a call generic over its accumulator or closure, which is not supported yet (1) + +- fixtures/reject/src/lib.rs:2422:3: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet + +
+ +
overriding `_` with a constant generic over its accumulator or closure, which is not supported yet (1) + +- fixtures/reject/src/lib.rs:2446:11: overriding `Iterator::fold` with a constant generic over its accumulator or closure, which is not supported yet + +
+ +
overriding `_` with a drop of its accumulator, which is not supported yet (1) + +- fixtures/reject/src/lib.rs:2469:3: overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet + +
+
overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet (1) -- fixtures/reject/src/lib.rs:125:2: overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet +- fixtures/reject/src/lib.rs:126:3: overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet
diff --git a/ts/fixtures/reject/expected.txt b/ts/fixtures/reject/expected.txt index 4d9b73fee..9356beb68 100644 --- a/ts/fixtures/reject/expected.txt +++ b/ts/fixtures/reject/expected.txt @@ -241,7 +241,7 @@ memory from `alloc` cast to pointers to `i32` and to `u32`, which reads the byte memory from `alloc` cast to pointers to `i32` and to `u32`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:2297:17 memory from `alloc` cast to pointers to `u32` and to `i32`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:2298:21 memory from `alloc` cast to pointers to `i32` and to `u32`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:2300:17 -overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet at fixtures/reject/src/lib.rs:125:2 +overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet at fixtures/reject/src/lib.rs:126:3 overriding `DoubleEndedIterator::rfind`, which std's adaptors call in place of `next` or beside it at fixtures/reject/src/lib.rs:150:2 a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Escaped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1020:43 a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Called`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1034:28 @@ -258,3 +258,6 @@ a raw pointer to `(u8, u8)` in `([Cloned; 2], (u8, u8))`, which the crate may pu a raw pointer to `(u8, u8)` in `(Dropped, (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2321:23 a raw pointer to `(u8, u8)` in `([Greatest; 2], (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2377:13 a raw pointer to `(u8, u8)` in `([Touched; 2], (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2321:23 +overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2422:3 +overriding `Iterator::fold` with a constant generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2446:11 +overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet at fixtures/reject/src/lib.rs:2469:3 diff --git a/ts/fixtures/reject/src/lib.rs b/ts/fixtures/reject/src/lib.rs index 41e48beb8..d149ebfc0 100644 --- a/ts/fixtures/reject/src/lib.rs +++ b/ts/fixtures/reject/src/lib.rs @@ -2407,3 +2407,70 @@ fn given_slots(fill: [T; 2]) -> u8 { } tagged_slots!(slots) } + +/// An iterator whose own `fold` tells its accumulator apart by a helper generic over it. +pub struct Keeps; + +impl Iterator for Keeps { + type Item = u8; + + fn next(&mut self) -> Option { + None + } + + fn fold B>(self, init: B, _f: F) -> B { + keep(init) + } +} + +#[inline(never)] +fn keep(x: T) -> T { + Some(x).unwrap() +} + +pub fn keeps() -> usize { + Keeps.map(|b| b + 1).count() +} + +/// An iterator whose own `fold` tells its accumulator apart by its size. +pub struct Sizes; + +impl Iterator for Sizes { + type Item = u8; + + fn next(&mut self) -> Option { + None + } + + fn fold B>(self, init: B, _f: F) -> B { + assert!(const { size_of::() } > 0); + init + } +} + +pub fn sizes() -> usize { + Sizes.map(|b| b + 1).count() +} + +/// An iterator whose own `fold` drops its accumulator, as the one it is translated for drops. +pub struct Discards; + +impl Iterator for Discards { + type Item = u8; + + fn next(&mut self) -> Option { + None + } + + #[allow(clippy::empty_loop)] + fn fold B>(self, init: B, _f: F) -> B { + { + let _held = init; + } + loop {} + } +} + +pub fn discards() -> usize { + Discards.map(|b| b + 1).count() +} diff --git a/ts/fixtures/reject/ts.toml b/ts/fixtures/reject/ts.toml index 6f3febbf5..0668d51fb 100644 --- a/ts/fixtures/reject/ts.toml +++ b/ts/fixtures/reject/ts.toml @@ -187,5 +187,8 @@ roots = [ "dropped_slots", "ranked_slots", "touched_slots", + "keeps", + "sizes", + "discards", ] printable = ["Meters"] diff --git a/ts/fixtures/task/expected/drops/folds.ts b/ts/fixtures/task/expected/drops/folds.ts index 6f11ee090..62a3a391a 100644 --- a/ts/fixtures/task/expected/drops/folds.ts +++ b/ts/fixtures/task/expected/drops/folds.ts @@ -944,21 +944,21 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { let n!: rt.u32; let f!: Guard.Guard; let broke!: rt.u32 | undefined; - let _733: boolean = false; - let _732: boolean = false; - let _731: boolean = false; - const guard: (a0: rt.u32) => Guard.Guard = (n11: rt.u32): Guard.Guard => { - return Guard.new(rt.u32Add(id, n11), Log.clone$Clone(log)); + let _775: boolean = false; + let _774: boolean = false; + let _773: boolean = false; + const guard: (a0: rt.u32) => Guard.Guard = (n12: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(id, n12), Log.clone$Clone(log)); }; const guards: (a0: rt.u32, a1: rt.u32) => Guard.Guard[] = (from: rt.u32, to: rt.u32): Guard.Guard[] => { return rt.iterToArray(rt.iterMap(new rt.Range(from, to), guard), undefined, 8, true); }; const _11: [Guard.Guard, Guard.Guard, Guard.Guard] = [guard(10), guard(11), guard(12)]; - _733 = true; + _775 = true; const c: Guard.Guard = _11[0]; - _732 = true; + _774 = true; const d: Guard.Guard = _11[1]; - _731 = true; + _773 = true; const e: Guard.Guard = _11[2]; const pile: (a0: rt.u32, a1: rt.u32) => Pile.Pile = (from2: rt.u32, to2: rt.u32): Pile.Pile => { return new Pile.Pile(guards(from2, to2), Log.clone$Clone(log)); @@ -966,129 +966,129 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { const _23: rt.u8 = rt.u8Rem(arg, 18); if (_23 === 0) { const _29: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - _733 = false; - const captured46 = c; - const _27: rt.Iter = rt.iterRev(rt.iterMap(_29, rt.closure((g51: Guard.Guard): Guard.Guard => { - const _926: rt.u32 = Guard.id(g51); - const _1225: rt.u32 = Guard.id(captured46); - const args84: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_926, f), (f: rt.Formatter) => rt.u32Display(_1225, f)]; - Log.note(log, rt.fmtFormat(["map ", args84[0], " ", args84[1]])); - return g51; + _775 = false; + const captured48 = c; + const _27: rt.Iter = rt.iterRev(rt.iterMap(_29, rt.closure((g53: Guard.Guard): Guard.Guard => { + const _928: rt.u32 = Guard.id(g53); + const _1226: rt.u32 = Guard.id(captured48); + const args86: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_928, f), (f: rt.Formatter) => rt.u32Display(_1226, f)]; + Log.note(log, rt.fmtFormat(["map ", args86[0], " ", args86[1]])); + return g53; }, (): void => { - captured46[Symbol.dispose](); + captured48[Symbol.dispose](); }))); - _732 = false; - const captured47 = id; - const captured48 = d; - n = rt.iterSum(rt.iterMap(_27, rt.closure((g52: Guard.Guard): rt.u32 => { - const _058: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g52), captured47), Guard.id(captured48)), Guard.id(captured48)); - g52[Symbol.dispose](); - return _058; + _774 = false; + const captured49 = id; + const captured50 = d; + n = rt.iterSum(rt.iterMap(_27, rt.closure((g54: Guard.Guard): rt.u32 => { + const _060: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g54), captured49), Guard.id(captured50)), Guard.id(captured50)); + g54[Symbol.dispose](); + return _060; }, (): void => { - captured48[Symbol.dispose](); + captured50[Symbol.dispose](); })), rt.u32Add, 0, true); const _41: rt.u32 = Guard.id(e); const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n, f), (f: rt.Formatter) => rt.u32Display(_41, f)]; Log.note(log, rt.fmtFormat(["map ", args2[0], " ", args2[1]])); } else if (_23 === 1) { const _53: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - _733 = false; - const captured41 = c; - const _51: rt.Iter = rt.iterRev(rt.iterFilter(_53, rt.closure((g47: Guard.Guard): boolean => { - return Guard.id(g47) !== Guard.id(captured41); + _775 = false; + const captured43 = c; + const _51: rt.Iter = rt.iterRev(rt.iterFilter(_53, rt.closure((g49: Guard.Guard): boolean => { + return Guard.id(g49) !== Guard.id(captured43); }, (): void => { - captured41[Symbol.dispose](); + captured43[Symbol.dispose](); }), rt.drop)); - _732 = false; - const captured42 = id; - const captured43 = d; - const n2: rt.u32 = rt.iterSum(rt.iterMap(_51, rt.closure((g48: Guard.Guard): rt.u32 => { - const _054: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g48), captured42), Guard.id(captured43)), Guard.id(captured43)); - g48[Symbol.dispose](); - return _054; + _774 = false; + const captured44 = id; + const captured45 = d; + const n2: rt.u32 = rt.iterSum(rt.iterMap(_51, rt.closure((g50: Guard.Guard): rt.u32 => { + const _056: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g50), captured44), Guard.id(captured45)), Guard.id(captured45)); + g50[Symbol.dispose](); + return _056; }, (): void => { - captured43[Symbol.dispose](); + captured45[Symbol.dispose](); })), rt.u32Add, 0, true); f = guard(13); const _66: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); - _731 = false; - const captured44 = e; - const _64: rt.Iter = rt.iterRev(rt.iterFilterMap(_66, rt.closure((g49: Guard.Guard): Guard.Guard | undefined => { - return thenSome$0zvoczk(Guard.id(g49) !== Guard.id(captured44), g49); + _773 = false; + const captured46 = e; + const _64: rt.Iter = rt.iterRev(rt.iterFilterMap(_66, rt.closure((g51: Guard.Guard): Guard.Guard | undefined => { + return thenSome$0zvoczk(Guard.id(g51) !== Guard.id(captured46), g51); }, (): void => { - captured44[Symbol.dispose](); + captured46[Symbol.dispose](); }))); - const captured45 = f; - const m: rt.usize = rt.ownedCount(rt.iterMap(_64, rt.closure((g50: Guard.Guard): rt.u32 => { - const _056: rt.u32 = rt.u32Add(Guard.id(g50), Guard.id(captured45)); - g50[Symbol.dispose](); - return _056; + const captured47 = f; + const m: rt.usize = rt.ownedCount(rt.iterMap(_64, rt.closure((g52: Guard.Guard): rt.u32 => { + const _058: rt.u32 = rt.u32Add(Guard.id(g52), Guard.id(captured47)); + g52[Symbol.dispose](); + return _058; }, (): void => { - captured45[Symbol.dispose](); + captured47[Symbol.dispose](); }))); const args4: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n2, f), (f: rt.Formatter) => rt.usizeDisplay(m, f)]; Log.note(log, rt.fmtFormat(["filter ", args4[0], " ", args4[1]])); } else if (_23 === 2) { const _87: rt.Iter = rt.iterSlice(guards(1, 4), rt.drop); - _733 = false; - const captured37 = c; - const _86: rt.Iter = rt.iterInspect(_87, rt.closure((g43: Guard.Guard): undefined => { - const _923: rt.u32 = Guard.id(g43); - const _1134: rt.u32 = Guard.id(captured37); - const args80: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_923, f), (f: rt.Formatter) => rt.u32Display(_1134, f)]; - Log.note(log, rt.fmtFormat(["inspect ", args80[0], " ", args80[1]])); + _775 = false; + const captured39 = c; + const _86: rt.Iter = rt.iterInspect(_87, rt.closure((g45: Guard.Guard): undefined => { + const _925: rt.u32 = Guard.id(g45); + const _1136: rt.u32 = Guard.id(captured39); + const args82: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_925, f), (f: rt.Formatter) => rt.u32Display(_1136, f)]; + Log.note(log, rt.fmtFormat(["inspect ", args82[0], " ", args82[1]])); }, (): void => { - captured37[Symbol.dispose](); + captured39[Symbol.dispose](); })); - _732 = false; - const captured38 = d; - const n3: rt.usize = rt.ownedCount(rt.iterMap(_86, rt.closure((g44: Guard.Guard): rt.u32 => { - const _051: rt.u32 = rt.u32Add(Guard.id(g44), Guard.id(captured38)); - g44[Symbol.dispose](); - return _051; + _774 = false; + const captured40 = d; + const n3: rt.usize = rt.ownedCount(rt.iterMap(_86, rt.closure((g46: Guard.Guard): rt.u32 => { + const _053: rt.u32 = rt.u32Add(Guard.id(g46), Guard.id(captured40)); + g46[Symbol.dispose](); + return _053; }, (): void => { - captured38[Symbol.dispose](); + captured40[Symbol.dispose](); }))); const f2: Guard.Guard = guard(13); const _100: rt.Iter = rt.iterSlice(guards(4, 8), rt.drop); - _731 = false; - const captured39 = e; - const _98: rt.Iter = rt.iterRev(rt.iterInspect(_100, rt.closure((g45: Guard.Guard): undefined => { - const _924: rt.u32 = Guard.id(g45); - const _1137: rt.u32 = Guard.id(captured39); - const args82: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_924, f), (f: rt.Formatter) => rt.u32Display(_1137, f)]; - Log.note(log, rt.fmtFormat(["inspect ", args82[0], " ", args82[1]])); + _773 = false; + const captured41 = e; + const _98: rt.Iter = rt.iterRev(rt.iterInspect(_100, rt.closure((g47: Guard.Guard): undefined => { + const _926: rt.u32 = Guard.id(g47); + const _1139: rt.u32 = Guard.id(captured41); + const args84: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_926, f), (f: rt.Formatter) => rt.u32Display(_1139, f)]; + Log.note(log, rt.fmtFormat(["inspect ", args84[0], " ", args84[1]])); }, (): void => { - captured39[Symbol.dispose](); + captured41[Symbol.dispose](); }))); - const captured40 = f2; - const m2: rt.usize = rt.ownedCount(rt.iterMap(_98, rt.closure((g46: Guard.Guard): rt.u32 => { - const _052: rt.u32 = rt.u32Add(Guard.id(g46), Guard.id(captured40)); - g46[Symbol.dispose](); - return _052; + const captured42 = f2; + const m2: rt.usize = rt.ownedCount(rt.iterMap(_98, rt.closure((g48: Guard.Guard): rt.u32 => { + const _054: rt.u32 = rt.u32Add(Guard.id(g48), Guard.id(captured42)); + g48[Symbol.dispose](); + return _054; }, (): void => { - captured40[Symbol.dispose](); + captured42[Symbol.dispose](); }))); const args6: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n3, f), (f: rt.Formatter) => rt.usizeDisplay(m2, f)]; Log.note(log, rt.fmtFormat(["inspect ", args6[0], " ", args6[1]])); } else if (_23 === 3) { const _122: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - _733 = false; - const captured36 = c; - const _133: [rt.usize, rt.u32] | undefined = option_map$14zg54s(rt.ownedLast(rt.iterRev(rt.iterEnumerate(rt.iterMap(_122, rt.closure((g41: Guard.Guard): Guard.Guard => { - const _922: rt.u32 = Guard.id(g41); - const _1223: rt.u32 = Guard.id(captured36); - const args78: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_922, f), (f: rt.Formatter) => rt.u32Display(_1223, f)]; - Log.note(log, rt.fmtFormat(["map ", args78[0], " ", args78[1]])); - return g41; + _775 = false; + const captured38 = c; + const _133: [rt.usize, rt.u32] | undefined = option_map$14zg54s(rt.ownedLast(rt.iterRev(rt.iterEnumerate(rt.iterMap(_122, rt.closure((g43: Guard.Guard): Guard.Guard => { + const _924: rt.u32 = Guard.id(g43); + const _1224: rt.u32 = Guard.id(captured38); + const args80: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_924, f), (f: rt.Formatter) => rt.u32Display(_1224, f)]; + Log.note(log, rt.fmtFormat(["map ", args80[0], " ", args80[1]])); + return g43; }, (): void => { - captured36[Symbol.dispose](); + captured38[Symbol.dispose](); })))), lib_drop$tuple2_usize_model_Guard), (_230: [rt.usize, Guard.Guard]): [rt.usize, rt.u32] => { const i: rt.usize = _230[0]; - const g42: Guard.Guard = _230[1]; - const _050: [rt.usize, rt.u32] = [i, Guard.id(g42)]; - g42[Symbol.dispose](); - return _050; + const g44: Guard.Guard = _230[1]; + const _052: [rt.usize, rt.u32] = [i, Guard.id(g44)]; + g44[Symbol.dispose](); + return _052; }); const _135: rt.u32 = Guard.id(d); const _138: rt.u32 = Guard.id(e); @@ -1096,289 +1096,289 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { Log.note(log, rt.fmtFormat(["enumerate ", args8[0], " ", args8[1], " ", args8[2]])); } else if (_23 === 4) { const _150: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - _733 = false; - const captured34 = c; - const n4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterRev(rt.iterMap(_150, rt.closure((g39: Guard.Guard): rt.u32 => { - const _046: rt.u32 = rt.u32Add(Guard.id(g39), Guard.id(captured34)); - g39[Symbol.dispose](); - return _046; + _775 = false; + const captured36 = c; + const n4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterRev(rt.iterMap(_150, rt.closure((g41: Guard.Guard): rt.u32 => { + const _048: rt.u32 = rt.u32Add(Guard.id(g41), Guard.id(captured36)); + g41[Symbol.dispose](); + return _048; }, (): void => { - captured34[Symbol.dispose](); + captured36[Symbol.dispose](); }))))); const _158: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); - _732 = false; - const captured35 = d; - const m3: rt.u32 = rt.iterFold(rt.iterSkip(rt.iterMap(_158, rt.closure((g40: Guard.Guard): rt.u32 => { - const _047: rt.u32 = rt.u32Add(Guard.id(g40), Guard.id(captured35)); - g40[Symbol.dispose](); - return _047; + _774 = false; + const captured37 = d; + const m3: rt.u32 = rt.iterFold(rt.iterSkip(rt.iterMap(_158, rt.closure((g42: Guard.Guard): rt.u32 => { + const _049: rt.u32 = rt.u32Add(Guard.id(g42), Guard.id(captured37)); + g42[Symbol.dispose](); + return _049; }, (): void => { - captured35[Symbol.dispose](); - })), 1), 0, (n22: rt.u32, k5: rt.u32): rt.u32 => { - return rt.u32Add(n22, k5); + captured37[Symbol.dispose](); + })), 1), 0, (n25: rt.u32, k6: rt.u32): rt.u32 => { + return rt.u32Add(n25, k6); }, true); const _169: rt.u32 = Guard.id(e); const args10: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n4, f), (f: rt.Formatter) => rt.u32Display(m3, f), (f: rt.Formatter) => rt.u32Display(_169, f)]; Log.note(log, rt.fmtFormat(["twice ", args10[0], " ", args10[1], " ", args10[2]])); } else if (_23 === 5) { const _183: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - _733 = false; - const captured32 = c; - const _181: rt.Iter = rt.iterStepBy(rt.iterMap(_183, rt.closure((g35: Guard.Guard): Guard.Guard => { - const _920: rt.u32 = Guard.id(g35); - const _1221: rt.u32 = Guard.id(captured32); - const args76: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_920, f), (f: rt.Formatter) => rt.u32Display(_1221, f)]; - Log.note(log, rt.fmtFormat(["map ", args76[0], " ", args76[1]])); - return g35; + _775 = false; + const captured34 = c; + const _181: rt.Iter = rt.iterStepBy(rt.iterMap(_183, rt.closure((g37: Guard.Guard): Guard.Guard => { + const _922: rt.u32 = Guard.id(g37); + const _1222: rt.u32 = Guard.id(captured34); + const args78: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_922, f), (f: rt.Formatter) => rt.u32Display(_1222, f)]; + Log.note(log, rt.fmtFormat(["map ", args78[0], " ", args78[1]])); + return g37; }, (): void => { - captured32[Symbol.dispose](); + captured34[Symbol.dispose](); })), 2, rt.drop); - _732 = false; - const captured33 = d; - const _199: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_181, rt.closure((g36: Guard.Guard): [Guard.Guard, rt.u32] => { - return [g36, Guard.id(captured33)] as [Guard.Guard, rt.u32]; + _774 = false; + const captured35 = d; + const _199: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_181, rt.closure((g38: Guard.Guard): [Guard.Guard, rt.u32] => { + return [g38, Guard.id(captured35)] as [Guard.Guard, rt.u32]; }, (): void => { - captured33[Symbol.dispose](); + captured35[Symbol.dispose](); })), guard(20), (kept7: Guard.Guard | undefined, _347: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { - let _044!: Guard.Guard | undefined; - let _1222: boolean = false; - let _1126: boolean = false; - _1222 = true; - _1126 = true; - const g37: Guard.Guard = _347[0]; - if (!(rt.u32Rem(Guard.id(g37), 2) === 1)) { - _1222 = false; - _044 = kept7; + let _046!: Guard.Guard | undefined; + let _1223: boolean = false; + let _1128: boolean = false; + _1223 = true; + _1128 = true; + const g39: Guard.Guard = _347[0]; + if (!(rt.u32Rem(Guard.id(g39), 2) === 1)) { + _1223 = false; + _046 = kept7; } else { - _1126 = false; - _044 = g37; + _1128 = false; + _046 = g39; } - if (_1126) { - g37[Symbol.dispose](); + if (_1128) { + g39[Symbol.dispose](); } - _1126 = false; - if (_1222) { + _1128 = false; + if (_1223) { rt.drop(kept7); - return _044; + return _046; } - return _044; - }, true), (g38: Guard.Guard): rt.u32 => { - const _045: rt.u32 = Guard.id(g38); - g38[Symbol.dispose](); - return _045; + return _046; + }, true), (g40: Guard.Guard): rt.u32 => { + const _047: rt.u32 = Guard.id(g40); + g40[Symbol.dispose](); + return _047; }); const _201: rt.u32 = Guard.id(e); const args12: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_199, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_201, f)]; Log.note(log, rt.fmtFormat(["step ", args12[0], " ", args12[1]])); } else if (_23 === 6) { const _213: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); - _733 = false; - const captured30 = c; - const _210: rt.Iter = rt.iterRev(rt.iterStepBy(rt.iterMap(_213, rt.closure((g31: Guard.Guard): Guard.Guard => { - const _918: rt.u32 = Guard.id(g31); - const _1219: rt.u32 = Guard.id(captured30); - const args74: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_918, f), (f: rt.Formatter) => rt.u32Display(_1219, f)]; - Log.note(log, rt.fmtFormat(["map ", args74[0], " ", args74[1]])); - return g31; + _775 = false; + const captured32 = c; + const _210: rt.Iter = rt.iterRev(rt.iterStepBy(rt.iterMap(_213, rt.closure((g33: Guard.Guard): Guard.Guard => { + const _920: rt.u32 = Guard.id(g33); + const _1220: rt.u32 = Guard.id(captured32); + const args76: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_920, f), (f: rt.Formatter) => rt.u32Display(_1220, f)]; + Log.note(log, rt.fmtFormat(["map ", args76[0], " ", args76[1]])); + return g33; }, (): void => { - captured30[Symbol.dispose](); + captured32[Symbol.dispose](); })), 2, rt.drop)); - _732 = false; - const captured31 = d; - const _229: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_210, rt.closure((g32: Guard.Guard): [Guard.Guard, rt.u32] => { - return [g32, Guard.id(captured31)] as [Guard.Guard, rt.u32]; + _774 = false; + const captured33 = d; + const _229: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_210, rt.closure((g34: Guard.Guard): [Guard.Guard, rt.u32] => { + return [g34, Guard.id(captured33)] as [Guard.Guard, rt.u32]; }, (): void => { - captured31[Symbol.dispose](); + captured33[Symbol.dispose](); })), guard(20), (kept6: Guard.Guard | undefined, _344: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { - let _040!: Guard.Guard | undefined; - let _1220: boolean = false; - let _1121: boolean = false; - _1220 = true; - _1121 = true; - const g33: Guard.Guard = _344[0]; - if (!(rt.u32Rem(Guard.id(g33), 2) === 1)) { - _1220 = false; - _040 = kept6; + let _042!: Guard.Guard | undefined; + let _1221: boolean = false; + let _1123: boolean = false; + _1221 = true; + _1123 = true; + const g35: Guard.Guard = _344[0]; + if (!(rt.u32Rem(Guard.id(g35), 2) === 1)) { + _1221 = false; + _042 = kept6; } else { - _1121 = false; - _040 = g33; + _1123 = false; + _042 = g35; } - if (_1121) { - g33[Symbol.dispose](); + if (_1123) { + g35[Symbol.dispose](); } - _1121 = false; - if (_1220) { + _1123 = false; + if (_1221) { rt.drop(kept6); - return _040; + return _042; } - return _040; - }, true), (g34: Guard.Guard): rt.u32 => { - const _041: rt.u32 = Guard.id(g34); - g34[Symbol.dispose](); - return _041; + return _042; + }, true), (g36: Guard.Guard): rt.u32 => { + const _043: rt.u32 = Guard.id(g36); + g36[Symbol.dispose](); + return _043; }); const _231: rt.u32 = Guard.id(e); const args14: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_229, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_231, f)]; Log.note(log, rt.fmtFormat(["step ", args14[0], " ", args14[1]])); } else if (_23 === 7) { const _241: rt.Iter = rt.iterSlice(guards(1, 5), rt.drop); - _733 = false; - const captured27 = id; - const captured28 = c; - const n5: rt.u32 = rt.iterSum(rt.iterFuse(rt.iterMap(_241, rt.closure((g29: Guard.Guard): rt.u32 => { - const _036: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g29), captured27), Guard.id(captured28)), Guard.id(captured28)); - g29[Symbol.dispose](); - return _036; + _775 = false; + const captured29 = id; + const captured30 = c; + const n5: rt.u32 = rt.iterSum(rt.iterFuse(rt.iterMap(_241, rt.closure((g31: Guard.Guard): rt.u32 => { + const _038: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Sub(Guard.id(g31), captured29), Guard.id(captured30)), Guard.id(captured30)); + g31[Symbol.dispose](); + return _038; }, (): void => { - captured28[Symbol.dispose](); + captured30[Symbol.dispose](); })), true), rt.u32Add, 0, true); const _250: rt.Iter = rt.iterSlice(guards(5, 8), rt.drop); - _732 = false; - const captured29 = d; - const m4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterFuse(rt.iterMap(_250, rt.closure((g30: Guard.Guard): rt.u32 => { - const _037: rt.u32 = rt.u32Add(Guard.id(g30), Guard.id(captured29)); - g30[Symbol.dispose](); - return _037; + _774 = false; + const captured31 = d; + const m4: rt.usize = rt.ownedCount(rt.iterRev(rt.iterFuse(rt.iterMap(_250, rt.closure((g32: Guard.Guard): rt.u32 => { + const _039: rt.u32 = rt.u32Add(Guard.id(g32), Guard.id(captured31)); + g32[Symbol.dispose](); + return _039; }, (): void => { - captured29[Symbol.dispose](); + captured31[Symbol.dispose](); })), true))); const _261: rt.u32 = Guard.id(e); const args16: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n5, f), (f: rt.Formatter) => rt.usizeDisplay(m4, f), (f: rt.Formatter) => rt.u32Display(_261, f)]; Log.note(log, rt.fmtFormat(["fuse ", args16[0], " ", args16[1], " ", args16[2]])); } else if (_23 === 8) { const _273: rt.Iter = rt.iterSlice(guards(1, 4), rt.drop); - _733 = false; - const captured23 = c; - const captured24 = guard; - const captured25 = id; - const flat: rt.Iter = rt.iterFlatten(rt.iterMap(_273, rt.closure((g25: Guard.Guard): Guard.Guard[] => { - const _916: rt.u32 = Guard.id(g25); - const _1217: rt.u32 = Guard.id(captured23); - const args72: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_916, f), (f: rt.Formatter) => rt.u32Display(_1217, f)]; - Log.note(log, rt.fmtFormat(["map ", args72[0], " ", args72[1]])); + _775 = false; + const captured25 = c; + const captured26 = guard; + const captured27 = id; + const flat: rt.Iter = rt.iterFlatten(rt.iterMap(_273, rt.closure((g27: Guard.Guard): Guard.Guard[] => { + const _918: rt.u32 = Guard.id(g27); + const _1218: rt.u32 = Guard.id(captured25); + const args74: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_918, f), (f: rt.Formatter) => rt.u32Display(_1218, f)]; + Log.note(log, rt.fmtFormat(["map ", args74[0], " ", args74[1]])); const v: Guard.Guard[] = []; - const _2211: Guard.Guard = captured24(rt.u32Add(rt.u32Sub(Guard.id(g25), captured25), 3)); + const _2211: Guard.Guard = captured26(rt.u32Add(rt.u32Sub(Guard.id(g27), captured27), 3)); v.push(_2211); - v.push(g25); + v.push(g27); return v; }, (): void => { - captured23[Symbol.dispose](); + captured25[Symbol.dispose](); })), (value: Guard.Guard[]) => rt.iterSlice(value, rt.drop), true); - const part8 = option_map$1raha9y(rt.iterToOption(flat.next()), (g26: Guard.Guard): rt.u32 => { - const _033: rt.u32 = Guard.id(g26); - g26[Symbol.dispose](); - return _033; + const part8 = option_map$1raha9y(rt.iterToOption(flat.next()), (g28: Guard.Guard): rt.u32 => { + const _035: rt.u32 = Guard.id(g28); + g28[Symbol.dispose](); + return _035; }); const args18: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part8, f, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["ends ", args18[0]])); - const part9 = option_map$1raha9y(rt.iterToOption(flat.nextBack()), (g27: Guard.Guard): rt.u32 => { - const _034: rt.u32 = Guard.id(g27); - g27[Symbol.dispose](); - return _034; + const part9 = option_map$1raha9y(rt.iterToOption(flat.nextBack()), (g29: Guard.Guard): rt.u32 => { + const _036: rt.u32 = Guard.id(g29); + g29[Symbol.dispose](); + return _036; }); const args20: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part9, f, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["ends ", args20[0]])); const _306: rt.Iter = flat; - _732 = false; - const captured26 = d; - const n6: rt.usize = rt.ownedCount(rt.iterMap(_306, rt.closure((g28: Guard.Guard): rt.u32 => { - const _035: rt.u32 = rt.u32Add(Guard.id(g28), Guard.id(captured26)); - g28[Symbol.dispose](); - return _035; + _774 = false; + const captured28 = d; + const n6: rt.usize = rt.ownedCount(rt.iterMap(_306, rt.closure((g30: Guard.Guard): rt.u32 => { + const _037: rt.u32 = rt.u32Add(Guard.id(g30), Guard.id(captured28)); + g30[Symbol.dispose](); + return _037; }, (): void => { - captured26[Symbol.dispose](); + captured28[Symbol.dispose](); }))); const _314: rt.u32 = Guard.id(e); const args22: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(n6, f), (f: rt.Formatter) => rt.u32Display(_314, f)]; Log.note(log, rt.fmtFormat(["flat ", args22[0], " ", args22[1]])); } else if (_23 === 9) { const _324: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); - _733 = false; - const captured20 = c; - const _323: rt.Iter = rt.iterMap(_324, rt.closure((g22: Guard.Guard): Guard.Guard => { - const _914: rt.u32 = Guard.id(g22); - const _1215: rt.u32 = Guard.id(captured20); - const args68: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_914, f), (f: rt.Formatter) => rt.u32Display(_1215, f)]; - Log.note(log, rt.fmtFormat(["map ", args68[0], " ", args68[1]])); - return g22; + _775 = false; + const captured22 = c; + const _323: rt.Iter = rt.iterMap(_324, rt.closure((g24: Guard.Guard): Guard.Guard => { + const _916: rt.u32 = Guard.id(g24); + const _1216: rt.u32 = Guard.id(captured22); + const args70: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_916, f), (f: rt.Formatter) => rt.u32Display(_1216, f)]; + Log.note(log, rt.fmtFormat(["map ", args70[0], " ", args70[1]])); + return g24; }, (): void => { - captured20[Symbol.dispose](); + captured22[Symbol.dispose](); })); const _329: Guard.Guard | undefined = guard(20); - _732 = false; - const captured21 = d; - const kept3: Guard.Guard | undefined = rt.iterRfold(_323, _329, rt.closure((kept5: Guard.Guard | undefined, g23: Guard.Guard): Guard.Guard | undefined => { - let _029!: Guard.Guard | undefined; + _774 = false; + const captured23 = d; + const kept3: Guard.Guard | undefined = rt.iterRfold(_323, _329, rt.closure((kept5: Guard.Guard | undefined, g25: Guard.Guard): Guard.Guard | undefined => { + let _031!: Guard.Guard | undefined; let _304: boolean = false; let _296: boolean = false; _304 = true; _296 = true; - const _1014: rt.u32 = Guard.id(g23); - const _1316: rt.u32 = Guard.id(captured21); - const args70: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_1014, f), (f: rt.Formatter) => rt.u32Display(_1316, f)]; - Log.note(log, rt.fmtFormat(["rfold ", args70[0], " ", args70[1]])); - if (!(rt.u32Rem(Guard.id(g23), 2) === 1)) { + const _1014: rt.u32 = Guard.id(g25); + const _1316: rt.u32 = Guard.id(captured23); + const args72: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_1014, f), (f: rt.Formatter) => rt.u32Display(_1316, f)]; + Log.note(log, rt.fmtFormat(["rfold ", args72[0], " ", args72[1]])); + if (!(rt.u32Rem(Guard.id(g25), 2) === 1)) { _304 = false; - _029 = kept5; + _031 = kept5; } else { _296 = false; - _029 = g23; + _031 = g25; } if (_296) { - g23[Symbol.dispose](); + g25[Symbol.dispose](); } if (_304) { rt.drop(kept5); - return _029; + return _031; } - return _029; + return _031; }, (): void => { - captured21[Symbol.dispose](); + captured23[Symbol.dispose](); }), true, true); const _335: rt.Iter = rt.iterSlice([1, 2, 3]); - _731 = false; - const captured22 = e; - const n7: rt.u32 = rt.iterRfold(_335, 0, rt.closure((n21: rt.u32, _326: rt.u32): rt.u32 => { - return rt.u32Sub(rt.u32Add(rt.u32Add(rt.u32Mul(n21, 10), _326), Guard.id(captured22)), Guard.id(captured22)); + _773 = false; + const captured24 = e; + const n7: rt.u32 = rt.iterRfold(_335, 0, rt.closure((n24: rt.u32, _326: rt.u32): rt.u32 => { + return rt.u32Sub(rt.u32Add(rt.u32Add(rt.u32Mul(n24, 10), _326), Guard.id(captured24)), Guard.id(captured24)); }, (): void => { - captured22[Symbol.dispose](); + captured24[Symbol.dispose](); }), undefined, true); - const _345: rt.u32 | undefined = option_map$1raha9y(kept3, (g24: Guard.Guard): rt.u32 => { - const _031: rt.u32 = Guard.id(g24); - g24[Symbol.dispose](); - return _031; + const _345: rt.u32 | undefined = option_map$1raha9y(kept3, (g26: Guard.Guard): rt.u32 => { + const _033: rt.u32 = Guard.id(g26); + g26[Symbol.dispose](); + return _033; }); const args24: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_345, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(n7, f)]; Log.note(log, rt.fmtFormat(["rfold ", args24[0], " ", args24[1]])); } else if (_23 === 10) { const held: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); - _733 = false; - const captured17 = c; - const captured18 = id; - const sum: rt.u32 | undefined = rt.iterTryRfold(held, 0, rt.closure((n19: rt.u32, g20: Guard.Guard): rt.u32 | undefined => { - const _1012: rt.u32 = Guard.id(g20); - const _1314: rt.u32 = Guard.id(captured17); - const args66: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_1012, f), (f: rt.Formatter) => rt.u32Display(_1314, f)]; - Log.note(log, rt.fmtFormat(["try ", args66[0], " ", args66[1]])); - const _025: rt.u32 | undefined = then$0ea5h05(Guard.id(g20) !== rt.u32Add(captured18, 3), (): rt.u32 => { - return rt.u32Sub(rt.u32Add(n19, Guard.id(g20)), captured18); + _775 = false; + const captured19 = c; + const captured20 = id; + const sum: rt.u32 | undefined = rt.iterTryRfold(held, 0, rt.closure((n22: rt.u32, g22: Guard.Guard): rt.u32 | undefined => { + const _1012: rt.u32 = Guard.id(g22); + const _1314: rt.u32 = Guard.id(captured19); + const args68: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_1012, f), (f: rt.Formatter) => rt.u32Display(_1314, f)]; + Log.note(log, rt.fmtFormat(["try ", args68[0], " ", args68[1]])); + const _027: rt.u32 | undefined = then$0ea5h05(Guard.id(g22) !== rt.u32Add(captured20, 3), (): rt.u32 => { + return rt.u32Sub(rt.u32Add(n22, Guard.id(g22)), captured20); }); - g20[Symbol.dispose](); - return _025; + g22[Symbol.dispose](); + return _027; }, (): void => { - captured17[Symbol.dispose](); + captured19[Symbol.dispose](); }), true, true); const _365: rt.usize = held.len(); const args26: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(sum, f, rt.u32Debug), (f: rt.Formatter) => rt.usizeDisplay(_365, f)]; Log.note(log, rt.fmtFormat(["tried ", args26[0], " ", args26[1]])); - _732 = false; - const captured19 = d; - const rest: rt.u32 | undefined = rt.iterTryRfold(held, 0, rt.closure((n20: rt.u32, g21: Guard.Guard): rt.u32 | undefined => { - const _027: rt.u32 | undefined = rt.u32Sub(rt.u32Add(rt.u32Add(n20, Guard.id(g21)), Guard.id(captured19)), Guard.id(captured19)); - g21[Symbol.dispose](); - return _027; + _774 = false; + const captured21 = d; + const rest: rt.u32 | undefined = rt.iterTryRfold(held, 0, rt.closure((n23: rt.u32, g23: Guard.Guard): rt.u32 | undefined => { + const _029: rt.u32 | undefined = rt.u32Sub(rt.u32Add(rt.u32Add(n23, Guard.id(g23)), Guard.id(captured21)), Guard.id(captured21)); + g23[Symbol.dispose](); + return _029; }, (): void => { - captured19[Symbol.dispose](); + captured21[Symbol.dispose](); }), true, true); const _382: rt.u32 = Guard.id(e); const args28: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(rest, f, rt.u32Debug), (f: rt.Formatter) => rt.u32Display(_382, f)]; @@ -1386,41 +1386,41 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { rt.drop(held); } else if (_23 === 11) { const _391: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); - _733 = false; - const captured14 = c; - const mapped: rt.Iter = rt.iterMap(_391, rt.closure((g17: Guard.Guard): Guard.Guard => { - const _911: rt.u32 = Guard.id(g17); - const _1212: rt.u32 = Guard.id(captured14); - const args64: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_911, f), (f: rt.Formatter) => rt.u32Display(_1212, f)]; - Log.note(log, rt.fmtFormat(["map ", args64[0], " ", args64[1]])); - return g17; + _775 = false; + const captured16 = c; + const mapped: rt.Iter = rt.iterMap(_391, rt.closure((g19: Guard.Guard): Guard.Guard => { + const _913: rt.u32 = Guard.id(g19); + const _1213: rt.u32 = Guard.id(captured16); + const args66: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_913, f), (f: rt.Formatter) => rt.u32Display(_1213, f)]; + Log.note(log, rt.fmtFormat(["map ", args66[0], " ", args66[1]])); + return g19; }, (): void => { - captured14[Symbol.dispose](); + captured16[Symbol.dispose](); })); - _732 = false; - const captured15 = id; - const captured16 = d; - const part5 = result_mapErr$0nvqjog(rt.iterTryRfold(mapped, 0, rt.closure((n18: rt.u32, g18: Guard.Guard): rt.Result => { - let _023!: rt.Result; + _774 = false; + const captured17 = id; + const captured18 = d; + const part5 = result_mapErr$0nvqjog(rt.iterTryRfold(mapped, 0, rt.closure((n21: rt.u32, g20: Guard.Guard): rt.Result => { + let _025!: rt.Result; let _233: boolean = false; _233 = true; - if (!(Guard.id(g18) === rt.u32Add(captured15, 2))) { - _023 = rt.Ok(rt.u32Sub(rt.u32Add(rt.u32Add(n18, Guard.id(g18)), Guard.id(captured16)), Guard.id(captured16))); + if (!(Guard.id(g20) === rt.u32Add(captured17, 2))) { + _025 = rt.Ok(rt.u32Sub(rt.u32Add(rt.u32Add(n21, Guard.id(g20)), Guard.id(captured18)), Guard.id(captured18))); } else { _233 = false; - _023 = rt.Err(g18); + _025 = rt.Err(g20); } if (_233) { - g18[Symbol.dispose](); - return _023; + g20[Symbol.dispose](); + return _025; } - return _023; + return _025; }, (): void => { - captured16[Symbol.dispose](); - }), undefined, true), (g19: Guard.Guard): rt.u32 => { - const _024: rt.u32 = Guard.id(g19); - g19[Symbol.dispose](); - return _024; + captured18[Symbol.dispose](); + }), undefined, true), (g21: Guard.Guard): rt.u32 => { + const _026: rt.u32 = Guard.id(g21); + g21[Symbol.dispose](); + return _026; }); const args30: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtResult(part5, f, rt.u32Debug, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["tried ", args30[0]])); @@ -1430,26 +1430,26 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { Log.note(log, rt.fmtFormat(["dropped ", args32[0]])); } else if (_23 === 12) { const chained: rt.Iter = rt.iterRev(rt.iterChain(rt.iterSlice(guards(1, 3), rt.drop), rt.iterSlice(guards(3, 6), rt.drop))); - _733 = false; - const captured12 = id; - const captured13 = c; - const r2: rt.Result = rt.iterTryRfold(chained, 0, rt.closure((n16: rt.u32, g15: Guard.Guard): rt.Result => { - let _020!: rt.Result; + _775 = false; + const captured14 = id; + const captured15 = c; + const r2: rt.Result = rt.iterTryRfold(chained, 0, rt.closure((n19: rt.u32, g17: Guard.Guard): rt.Result => { + let _022!: rt.Result; let _232: boolean = false; _232 = true; - if (!(Guard.id(g15) === rt.u32Add(captured12, 4))) { - _020 = rt.Ok(rt.u32Sub(rt.u32Add(rt.u32Add(n16, Guard.id(g15)), Guard.id(captured13)), Guard.id(captured13))); + if (!(Guard.id(g17) === rt.u32Add(captured14, 4))) { + _022 = rt.Ok(rt.u32Sub(rt.u32Add(rt.u32Add(n19, Guard.id(g17)), Guard.id(captured15)), Guard.id(captured15))); } else { _232 = false; - _020 = rt.Err(g15); + _022 = rt.Err(g17); } if (_232) { - g15[Symbol.dispose](); - return _020; + g17[Symbol.dispose](); + return _022; } - return _020; + return _022; }, (): void => { - captured13[Symbol.dispose](); + captured15[Symbol.dispose](); }), undefined, true); if (r2.ok) { broke = undefined; @@ -1460,10 +1460,10 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { } const args34: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(broke, f, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["broke ", args34[0]])); - const n8: rt.Result = rt.iterTryRfold(chained, 0, (n17: rt.u32, g16: Guard.Guard): rt.Result => { - const _021: rt.Result = rt.Ok(rt.u32Sub(rt.u32Add(n17, Guard.id(g16)), id)); - g16[Symbol.dispose](); - return _021; + const n8: rt.Result = rt.iterTryRfold(chained, 0, (n20: rt.u32, g18: Guard.Guard): rt.Result => { + const _023: rt.Result = rt.Ok(rt.u32Sub(rt.u32Add(n20, Guard.id(g18)), id)); + g18[Symbol.dispose](); + return _023; }); const _461: rt.u32 = Guard.id(d); const _464: rt.u32 = Guard.id(e); @@ -1473,36 +1473,36 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { } else if (_23 === 13) { const _474: rt.Iter = rt.iterSlice(guards(1, 1), rt.drop); const _478: Guard.Guard = guard(20); - _733 = false; - const captured9 = c; + _775 = false; + const captured11 = c; const none: Guard.Guard = rt.iterRfold(_474, _478, rt.closure((acc: Guard.Guard, _316: Guard.Guard): Guard.Guard => { - const part3 = Guard.id(captured9); - const args60: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part3, f)]; - Log.note(log, rt.fmtFormat(["never ", args60[0]])); + const part3 = Guard.id(captured11); + const args62: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part3, f)]; + Log.note(log, rt.fmtFormat(["never ", args62[0]])); _316[Symbol.dispose](); return acc; }, (): void => { - captured9[Symbol.dispose](); + captured11[Symbol.dispose](); }), true, true); const _483: rt.Iter = rt.iterSlice(guards(1, 1), rt.drop); - _732 = false; - const captured10 = d; - const empty: rt.Iter = rt.iterMap(_483, rt.closure((g14: Guard.Guard): rt.u32 => { - const _018: rt.u32 = rt.u32Add(Guard.id(g14), Guard.id(captured10)); - g14[Symbol.dispose](); - return _018; + _774 = false; + const captured12 = d; + const empty: rt.Iter = rt.iterMap(_483, rt.closure((g16: Guard.Guard): rt.u32 => { + const _020: rt.u32 = rt.u32Add(Guard.id(g16), Guard.id(captured12)); + g16[Symbol.dispose](); + return _020; }, (): void => { - captured10[Symbol.dispose](); + captured12[Symbol.dispose](); })); - _731 = false; - const captured11 = e; - const tried: rt.u32 | undefined = rt.iterTryRfold(empty, 0, rt.closure((n15: rt.u32, k3: rt.u32): rt.u32 | undefined => { - const part4 = Guard.id(captured11); - const args62: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part4, f)]; - Log.note(log, rt.fmtFormat(["never ", args62[0]])); - return rt.u32CheckedAdd(n15, k3); + _773 = false; + const captured13 = e; + const tried: rt.u32 | undefined = rt.iterTryRfold(empty, 0, rt.closure((n18: rt.u32, k4: rt.u32): rt.u32 | undefined => { + const part4 = Guard.id(captured13); + const args64: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part4, f)]; + Log.note(log, rt.fmtFormat(["never ", args64[0]])); + return rt.u32CheckedAdd(n18, k4); }, (): void => { - captured11[Symbol.dispose](); + captured13[Symbol.dispose](); }), true, true); const _497: rt.u32 = Guard.id(none); const args38: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_497, f), (f: rt.Formatter) => rt.fmtOption(tried, f, rt.u32Debug)]; @@ -1511,47 +1511,47 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { none[Symbol.dispose](); } else if (_23 === 14) { const _507: Pile.Pile = pile(1, 5); - _733 = false; - const captured5 = c; - const captured6 = id; - const _510: (a0: Guard.Guard) => rt.u32 = rt.closure((g11: Guard.Guard): rt.u32 => { - const _94: rt.u32 = Guard.id(g11); - const _1210: rt.u32 = Guard.id(captured5); - const args56: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_94, f), (f: rt.Formatter) => rt.u32Display(_1210, f)]; - Log.note(log, rt.fmtFormat(["map ", args56[0], " ", args56[1]])); - const _014: rt.u32 = rt.u32Sub(Guard.id(g11), captured6); - g11[Symbol.dispose](); - return _014; + _775 = false; + const captured7 = c; + const captured8 = id; + const _510: (a0: Guard.Guard) => rt.u32 = rt.closure((g13: Guard.Guard): rt.u32 => { + const _910: rt.u32 = Guard.id(g13); + const _1211: rt.u32 = Guard.id(captured7); + const args58: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_910, f), (f: rt.Formatter) => rt.u32Display(_1211, f)]; + Log.note(log, rt.fmtFormat(["map ", args58[0], " ", args58[1]])); + const _016: rt.u32 = rt.u32Sub(Guard.id(g13), captured8); + g13[Symbol.dispose](); + return _016; }, (): void => { - captured5[Symbol.dispose](); + captured7[Symbol.dispose](); }); - const part2 = rt.iterFold(rt.iterMap(rt.iterFrom(_507, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), _510), 0, (n14: rt.u32, k2: rt.u32): rt.u32 => { - return rt.u32Add(rt.u32Mul(n14, 10), k2); + const part2 = rt.iterFold(rt.iterMap(rt.iterFrom(_507, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), _510), 0, (n17: rt.u32, k3: rt.u32): rt.u32 => { + return rt.u32Add(rt.u32Mul(n17, 10), k3); }, true); const args40: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part2, f)]; Log.note(log, rt.fmtFormat(["fold ", args40[0]])); const _522: Pile.Pile = pile(5, 8); - _732 = false; - const captured7 = d; - const _525: (a0: Guard.Guard) => undefined = rt.closure((g12: Guard.Guard): undefined => { - const _84: rt.u32 = Guard.id(g12); - const _1110: rt.u32 = Guard.id(captured7); - const args58: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_84, f), (f: rt.Formatter) => rt.u32Display(_1110, f)]; - Log.note(log, rt.fmtFormat(["each ", args58[0], " ", args58[1]])); - g12[Symbol.dispose](); + _774 = false; + const captured9 = d; + const _525: (a0: Guard.Guard) => undefined = rt.closure((g14: Guard.Guard): undefined => { + const _810: rt.u32 = Guard.id(g14); + const _1112: rt.u32 = Guard.id(captured9); + const args60: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_810, f), (f: rt.Formatter) => rt.u32Display(_1112, f)]; + Log.note(log, rt.fmtFormat(["each ", args60[0], " ", args60[1]])); + g14[Symbol.dispose](); }, (): void => { - captured7[Symbol.dispose](); + captured9[Symbol.dispose](); }); rt.iterForEach(rt.iterFrom(_522, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), _525, true, true); const _528: Pile.Pile = pile(1, 4); - _731 = false; - const captured8 = e; - const _531: (a0: Guard.Guard) => rt.u32 = rt.closure((g13: Guard.Guard): rt.u32 => { - const _016: rt.u32 = rt.u32Add(Guard.id(g13), Guard.id(captured8)); - g13[Symbol.dispose](); - return _016; + _773 = false; + const captured10 = e; + const _531: (a0: Guard.Guard) => rt.u32 = rt.closure((g15: Guard.Guard): rt.u32 => { + const _018: rt.u32 = rt.u32Add(Guard.id(g15), Guard.id(captured10)); + g15[Symbol.dispose](); + return _018; }, (): void => { - captured8[Symbol.dispose](); + captured10[Symbol.dispose](); }); const m5: rt.usize = rt.ownedCount(rt.iterMap(rt.iterFrom(_528, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), _531)); const _538: rt.usize = Pile.count$iter_Iterator(pile(4, 6)); @@ -1561,38 +1561,38 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { const last2: Guard.Guard | undefined = Pile.last$iter_Iterator(pile(1, 4)); const back: Guard.Guard | undefined = rt.ownedLast(rt.iterRev(rt.iterFrom(pile(4, 7), Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 })), rt.drop); const skipped: Guard.Guard | undefined = rt.ownedLast(rt.iterSkip(rt.iterFrom(pile(7, 9), Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), 1, rt.drop), rt.drop); - const _568: rt.u32 | undefined = option_map$1raha9y(last2, (g5: Guard.Guard): rt.u32 => { - const _08: rt.u32 = Guard.id(g5); - g5[Symbol.dispose](); - return _08; - }); - const _570: rt.u32 | undefined = option_map$1raha9y(back, (g6: Guard.Guard): rt.u32 => { - const _09: rt.u32 = Guard.id(g6); - g6[Symbol.dispose](); - return _09; - }); - const _572: rt.u32 | undefined = option_map$1raha9y(skipped, (g7: Guard.Guard): rt.u32 => { + const _568: rt.u32 | undefined = option_map$1raha9y(last2, (g7: Guard.Guard): rt.u32 => { const _010: rt.u32 = Guard.id(g7); g7[Symbol.dispose](); return _010; }); + const _570: rt.u32 | undefined = option_map$1raha9y(back, (g8: Guard.Guard): rt.u32 => { + const _011: rt.u32 = Guard.id(g8); + g8[Symbol.dispose](); + return _011; + }); + const _572: rt.u32 | undefined = option_map$1raha9y(skipped, (g9: Guard.Guard): rt.u32 => { + const _012: rt.u32 = Guard.id(g9); + g9[Symbol.dispose](); + return _012; + }); const args44: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(_568, f, rt.u32Debug), (f: rt.Formatter) => rt.fmtOption(_570, f, rt.u32Debug), (f: rt.Formatter) => rt.fmtOption(_572, f, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["last ", args44[0], " ", args44[1], " ", args44[2]])); const _581: rt.Iter = rt.iterRev(rt.iterFrom(pile(1, 6), Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 })); - _733 = false; - const captured4 = c; - const _593: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_581, rt.closure((g8: Guard.Guard): [Guard.Guard, rt.u32] => { - return [g8, Guard.id(captured4)] as [Guard.Guard, rt.u32]; + _775 = false; + const captured6 = c; + const _593: rt.u32 | undefined = option_map$1raha9y(rt.iterFold(rt.iterMap(_581, rt.closure((g10: Guard.Guard): [Guard.Guard, rt.u32] => { + return [g10, Guard.id(captured6)] as [Guard.Guard, rt.u32]; }, (): void => { - captured4[Symbol.dispose](); + captured6[Symbol.dispose](); })), undefined as Guard.Guard | undefined, (_2: Guard.Guard | undefined, _312: [Guard.Guard, rt.u32]): Guard.Guard | undefined => { - const _012: Guard.Guard | undefined = _312[0]; + const _014: Guard.Guard | undefined = _312[0]; rt.drop(_2); - return _012; - }, true), (g10: Guard.Guard): rt.u32 => { - const _013: rt.u32 = Guard.id(g10); - g10[Symbol.dispose](); - return _013; + return _014; + }, true), (g12: Guard.Guard): rt.u32 => { + const _015: rt.u32 = Guard.id(g12); + g12[Symbol.dispose](); + return _015; }); const _595: rt.u32 = Guard.id(d); const _598: rt.u32 = Guard.id(e); @@ -1607,7 +1607,7 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { }); const args48: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part, f, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["nth ", args48[0]])); - _733 = false; + _775 = false; const captured3 = c; const n10: rt.u32 = rt.iterFold(rt.iterMap(rt.iterFrom(held2, Pile.next$iter_Iterator, undefined, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.closure((g4: Guard.Guard): rt.u32 => { const _06: rt.u32 = rt.u32Sub(rt.u32Add(Guard.id(g4), Guard.id(captured3)), Guard.id(captured3)); @@ -1615,8 +1615,8 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { return _06; }, (): void => { captured3[Symbol.dispose](); - })), 0, (n13: rt.u32, k: rt.u32): rt.u32 => { - return rt.u32Add(n13, k); + })), 0, (n14: rt.u32, k2: rt.u32): rt.u32 => { + return rt.u32Add(n14, k2); }, true); const _635: rt.usize = held2.held.length; const args50: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n10, f), (f: rt.Formatter) => rt.usizeDisplay(_635, f)]; @@ -1628,41 +1628,66 @@ export function rfolded(log: Log.Log, id: rt.u32, arg: rt.u8): void { const _660: rt.u32 = Guard.id(e); const args52: rt.Fmt[] = [(f: rt.Formatter) => rt.usizeDisplay(m6, f), (f: rt.Formatter) => rt.u32Display(_657, f), (f: rt.Formatter) => rt.u32Display(_660, f)]; Log.note(log, rt.fmtFormat(["chain ", args52[0], " ", args52[1], " ", args52[2]])); + const _671: [Guard.Guard, Guard.Guard] = [guard(30), guard(31)]; + const k: Guard.Guard = _671[0]; + const l: Guard.Guard = _671[1]; + const _680: Pile.Pile = pile(1, 4); + const _683: Guard.Guard[] = guards(4, 6); + const _679: rt.Iter = rt.iterChain(rt.iterFrom(_680, Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 }), rt.iterSlice(_683, rt.drop)); + const captured4 = k; + const n11: rt.u32 = rt.iterFold(_679, 0, rt.closure((n15: rt.u32, g5: Guard.Guard): rt.u32 => { + const _08: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Add(n15, Guard.id(g5)), Guard.id(captured4)), Guard.id(captured4)); + g5[Symbol.dispose](); + return _08; + }, (): void => { + captured4[Symbol.dispose](); + }), true, true); + const _688: rt.Iter = rt.iterChain(rt.iterSlice(guards(1, 3), rt.drop), rt.iterFrom(pile(3, 6), Pile.next$iter_Iterator, rt.drop, { hint: Pile.sizeHint$iter_Iterator, nth: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nth$iter_Iterator(it, n)), fold: Pile.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32, count: Pile.count$iter_Iterator, last: (it: Pile.Pile) => rt.iterFromOption(Pile.last$iter_Iterator(it)), back: (it: Pile.Pile) => rt.iterFromOption(Pile.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Pile.Pile, n) => rt.iterFromOption(Pile.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Pile.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_model_Guard_Option_u32 })); + const captured5 = l; + const r3: rt.u32 = rt.iterRfold(_688, 0, rt.closure((n16: rt.u32, g6: Guard.Guard): rt.u32 => { + const _09: rt.u32 = rt.u32Sub(rt.u32Add(rt.u32Add(n16, Guard.id(g6)), Guard.id(captured5)), Guard.id(captured5)); + g6[Symbol.dispose](); + return _09; + }, (): void => { + captured5[Symbol.dispose](); + }), true, true); + const args54: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(n11, f), (f: rt.Formatter) => rt.u32Display(r3, f)]; + Log.note(log, rt.fmtFormat(["lent ", args54[0], " ", args54[1]])); held2[Symbol.dispose](); } else { const a: Guard.Guard = guard(20); - const _674: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); + const _714: rt.Iter = rt.iterSlice(guards(1, 6), rt.drop); const captured = id; const captured2 = a; - rt.iterTryRfold(_674, 0, rt.closure((n12: rt.u32, g2: Guard.Guard): rt.u32 | undefined => { + rt.iterTryRfold(_714, 0, rt.closure((n13: rt.u32, g2: Guard.Guard): rt.u32 | undefined => { if (!(Guard.id(g2) !== rt.u32Add(captured, 3))) { const _145: rt.u32 = Guard.id(g2); const _172: rt.u32 = Guard.id(captured2); const _202: string = rt.resultUnwrap(rt.stringFromUtf8(Log.text(log)), rt.fmtFromUtf8ErrorDebug); - const args54: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_145, f), (f: rt.Formatter) => rt.u32Display(_172, f), (f: rt.Formatter) => rt.fmtPad(f, _202)]; - rt.panicFmt(["try_rfold of g", args54[0], " with g", args54[1], " after\n", args54[2]]); + const args56: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_145, f), (f: rt.Formatter) => rt.u32Display(_172, f), (f: rt.Formatter) => rt.fmtPad(f, _202)]; + rt.panicFmt(["try_rfold of g", args56[0], " with g", args56[1], " after\n", args56[2]]); } else { - const _04: rt.u32 | undefined = rt.u32Add(n12, Guard.id(g2)); + const _04: rt.u32 | undefined = rt.u32Add(n13, Guard.id(g2)); g2[Symbol.dispose](); return _04; } }, (): void => { captured2[Symbol.dispose](); }), true, true); - rt.drop(_674); + rt.drop(_714); } - if (_731) { + if (_773) { e[Symbol.dispose](); } - _731 = false; - if (_732) { + _773 = false; + if (_774) { d[Symbol.dispose](); } - _732 = false; - if (_733) { + _774 = false; + if (_775) { c[Symbol.dispose](); } - _733 = false; + _775 = false; } /** `last` and `min` of `Option`s, by what drops: a `None` item apart from no items. */ diff --git a/ts/fixtures/task/src/drops/folds.rs b/ts/fixtures/task/src/drops/folds.rs index 64b8f5487..1749ecb1a 100644 --- a/ts/fixtures/task/src/drops/folds.rs +++ b/ts/fixtures/task/src/drops/folds.rs @@ -670,6 +670,14 @@ pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { log.note(format!("borrowed {n} {}", held.held.len())); let m = pile(6, 8).chain(guards(8, 10)).count(); log.note(format!("chain {m} {} {}", d.id(), e.id())); + // Its folds through a chain, which lends them its closure: theirs drop the loan. + let (k, l) = (guard(30), guard(31)); + let n = pile(1, 4).chain(guards(4, 6)).fold(0, move |n, g| n + g.id() + k.id() - k.id()); + let r = guards(1, 3) + .into_iter() + .chain(pile(3, 6)) + .rfold(0, move |n, g| n + g.id() + l.id() - l.id()); + log.note(format!("lent {n} {r}")); } _ => { let a = guard(20); diff --git a/ts/runtime/rt/iter.ts b/ts/runtime/rt/iter.ts index 9e850e074..b65622851 100644 --- a/ts/runtime/rt/iter.ts +++ b/ts/runtime/rt/iter.ts @@ -2031,12 +2031,13 @@ class FromNext extends Iter implements Disposable { /** * Its own `fold` or `rfold`, which takes it by value: given `f` as a closure that drops - * what it owns by `release`, as the crate's drops the closure std gives it. + * what it owns by `release`, as the crate's drops the closure std gives it, and nothing + * without it, as a loan of `f` does. */ private folds
(fold: (source: S, acc: never, f: never) => unknown, acc: A, f: (acc: A, item: T) => A, release: (() => void) | undefined): A { this.drop = undefined; - const g = release === undefined ? f : closure((acc: A, item: T) => f(acc, item), release); - return (fold as (source: S, acc: A, f: (acc: A, item: T) => A) => A)(this.source, acc, g); + const g = (acc: A, item: T) => f(acc, item); + return (fold as (source: S, acc: A, f: (acc: A, item: T) => A) => A)(this.source, acc, release === undefined ? g : closure(g, release)); } /** Its own `count` or `last`, which takes it by value. */ diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index 6adae80c2..c181c001c 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -81,9 +81,8 @@ const BY_VALUE: [(&str, &str); 4] = [ /// Refuse an `impl Iterator` of the crate, whose `next` is `next_fn`, that std's adaptors /// would read other than through the methods in `OWN`: one whose `Iterator` or /// `DoubleEndedIterator` impl overrides another, such as `find`, which they call in its -/// place, or whose own `fold` or `rfold` holds its accumulator in an `Option` or a `Poll`, -/// as `fold_args` translates it for one that can't tell an `rt.None` or `rt.Pending` -/// accumulator apart. +/// place, or whose own `fold` or `rfold` tells its accumulator or closure apart from the +/// ones `fold_args` translates it for. pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { let tcx = t.tcx; let Some(imp) = tcx.impl_of_assoc(next_fn) else { @@ -112,45 +111,155 @@ pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { tcx.def_span(item.def_id), format!("overriding `{tr}::{name}`, which std's adaptors call in place of `next` or beside it"), ); - } else if matches!(name.as_str(), "fold" | "rfold") && wraps_acc(tcx, item.def_id) { - t.err( - tcx.def_span(item.def_id), - format!( - "overriding `{tr}::{name}` with its accumulator in an `Option` or a `Poll`, which is not supported yet" - ), - ); + } else if matches!(name.as_str(), "fold" | "rfold") + && let Some((span, what)) = erases(tcx, item.def_id) + { + t.err(span, format!("overriding `{tr}::{name}` with {what}, which is not supported yet")); } } } } -/// Whether the crate's own `fold` or `rfold`, `def_id`, holds its accumulator, its first type -/// parameter, in an `Option` or a `Poll`. -fn wraps_acc(tcx: TyCtxt<'_>, def_id: DefId) -> bool { +/// Where the crate's own `fold` or `rfold`, `def_id`, or a closure in it, tells its +/// accumulator `B` or closure `F` apart from the others it is generic over, and how: by an +/// `Option` or a `Poll` of `B`, whose `None` or `Pending` is the one of whichever `B` it is +/// translated for; a call generic over either, but `F`'s, a `drop` of `F`, and std's +/// iterators', which take any; a constant generic over either, such as its size; or a drop of +/// `B`, which drops as the one it is translated for does. +fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { + use rustc_middle::mir::visit::Visitor; + use rustc_middle::mir::{self, AggregateKind, BasicBlock, BasicBlockData, ConstOperand, Location, Rvalue, TerminatorKind}; + + struct Erases<'a, 'tcx> { + tcx: TyCtxt<'tcx>, + mir: &'a mir::Body<'tcx>, + /// The indices of `B` and `F`. + params: [u32; 2], + closures: Vec, + found: Option<(Span, &'static str)>, + } + impl<'tcx> Erases<'_, 'tcx> { + fn mentions(&self, arg: ty::GenericArg<'tcx>) -> bool { + arg.walk().any(|a| matches!(a.as_type().map(Ty::kind), Some(ty::Param(p)) if self.params.contains(&p.index))) + } + + /// Whether `ty` is `F`. + fn is_f(&self, ty: Ty<'tcx>) -> bool { + matches!(ty.kind(), ty::Param(p) if p.index == self.params[1]) + } + + /// Whether a call of `def_id` for `args` takes any `B` and `F`. + fn takes_any(&self, def_id: DefId, args: ty::GenericArgsRef<'tcx>) -> bool { + let tcx = self.tcx; + if tcx.is_diagnostic_item(rustc_span::sym::mem_drop, def_id) { + return self.is_f(args.type_at(0)); + } + tcx.trait_of_assoc(def_id).is_some_and(|tr| { + tcx.is_fn_trait(tr) || [core_trait(tcx, "Iterator"), core_trait(tcx, "DoubleEndedIterator")].contains(&Some(tr)) + }) + } + + fn find(&mut self, span: Span, what: &'static str) { + self.found.get_or_insert((span, what)); + } + } + impl<'tcx> Visitor<'tcx> for Erases<'_, 'tcx> { + fn visit_basic_block_data(&mut self, bb: BasicBlock, data: &BasicBlockData<'tcx>) { + // A panic aborts on wasm32 before its cleanup runs. + if !data.is_cleanup { + self.super_basic_block_data(bb, data); + } + } + + fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, loc: Location) { + if let Rvalue::Aggregate(kind, _) = rvalue + && let AggregateKind::Closure(closure, _) = **kind + { + self.closures.push(closure); + } + self.super_rvalue(rvalue, loc); + } + + fn visit_terminator(&mut self, term: &mir::Terminator<'tcx>, loc: Location) { + let span = term.source_info.span; + match &term.kind { + TerminatorKind::Call { func, args, .. } => { + if let Some((callee, callee_args)) = func.const_fn_def() + && !self.takes_any(callee, callee_args) + && callee_args.iter().any(|a| self.mentions(a)) + { + self.find(span, "a call generic over its accumulator or closure"); + } + for arg in args { + self.visit_operand(&arg.node, loc); + } + return; + } + TerminatorKind::Drop { place, .. } => { + let ty = place.ty(self.mir, self.tcx).ty; + if !self.is_f(ty) && self.mentions(ty.into()) { + self.find(span, "a drop of its accumulator"); + } + } + _ => {} + } + self.super_terminator(term, loc); + } + + fn visit_const_operand(&mut self, c: &ConstOperand<'tcx>, _: Location) { + let args = match c.const_ { + mir::Const::Unevaluated(uv, _) => uv.args, + _ => ty::List::empty(), + }; + if self.mentions(c.const_.ty().into()) || args.iter().any(|a| self.mentions(a)) { + self.find(c.span, "a constant generic over its accumulator or closure"); + } + } + } + let generics = tcx.generics_of(def_id); - let Some(acc) = generics + let mut params = generics .own_params .iter() - .find(|p| matches!(p.kind, ty::GenericParamDefKind::Type { .. })) - else { - return false; - }; - tcx.optimized_mir(def_id).local_decls.iter().any(|local| { - local.ty.walk().filter_map(|arg| arg.as_type()).any(|t| match t.kind() { - ty::Adt(adt, args) => { - matches!(Std::of(tcx, adt.did()), Some(Std::Option | Std::Poll)) - && matches!(args.type_at(0).kind(), ty::Param(p) if p.index == acc.index) + .filter(|p| matches!(p.kind, ty::GenericParamDefKind::Type { .. })) + .map(|p| p.index); + let params = [params.next()?, params.next()?]; + let mut bodies = vec![def_id]; + while let Some(def_id) = bodies.pop() { + let mir = tcx.optimized_mir(def_id); + for local in &mir.local_decls { + let wraps = local.ty.walk().filter_map(|arg| arg.as_type()).any(|t| match t.kind() { + ty::Adt(adt, args) => { + matches!(Std::of(tcx, adt.did()), Some(Std::Option | Std::Poll)) + && matches!(args.type_at(0).kind(), ty::Param(p) if p.index == params[0]) + } + _ => false, + }); + if wraps { + return Some((local.source_info.span, "its accumulator in an `Option` or a `Poll`")); } - _ => false, - }) - }) + } + let mut erases = Erases { + tcx, + mir, + params, + closures: Vec::new(), + found: None, + }; + erases.visit_body(mir); + if erases.found.is_some() { + return erases.found; + } + bodies.extend(erases.closures); + } + None } -/// The generic arguments the crate's own `fold` or `rfold` of `item`s is translated for: -/// the accumulator, as an `Option`, whose `None` in an `Option` of it is `rt.None` -/// and which nothing else tells apart from any other value, as a body generic over it -/// can't, and the closure, as a `Box acc>`, whose JS value is the -/// function `rt.iterFrom` gives it and which drops what std's closure owns as it drops. +/// The generic arguments the crate's own `fold` or `rfold` of `item`s is translated for, +/// which a body `erases` doesn't refuse can't tell apart from any others: the accumulator, +/// as an `Option`, and the closure, as a `Box acc>`, whose JS +/// value is the function `rt.iterFrom` gives it and which drops what std's closure owns as +/// it drops. fn fold_args<'tcx>(tcx: TyCtxt<'tcx>, item: Ty<'tcx>) -> Option<[Ty<'tcx>; 2]> { let lang = tcx.lang_items(); let acc = Ty::new_option(tcx, tcx.types.u32); From f718af8a9fbae3b5aa4fd803a3491aadfe1f6c5b Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:53:30 -0800 Subject: [PATCH 07/13] fix(ts): check the closures in a crate's own fold, and refuse its drop of the accumulator Co-Authored-By: Claude Opus 5.5 --- ts/fixtures/reject/census.md | 35 +++++++++--------- ts/fixtures/reject/expected.txt | 7 ++-- ts/fixtures/reject/src/lib.rs | 28 +++++++++++++-- ts/fixtures/reject/ts.toml | 1 + ts/src/lower/iter.rs | 63 ++++++++++++++++++--------------- 5 files changed, 84 insertions(+), 50 deletions(-) diff --git a/ts/fixtures/reject/census.md b/ts/fixtures/reject/census.md index f188634a3..d3bd3c1ec 100644 --- a/ts/fixtures/reject/census.md +++ b/ts/fixtures/reject/census.md @@ -1,7 +1,7 @@ # Census of `reject-fixture` -- Refusals: 263 -- Function instances: 306 +- Refusals: 264 +- Function instances: 309 - Generic functions no instance reached, lowered over their type parameters: 13 ## By construct @@ -38,6 +38,7 @@ | 2 | a raw pointer to a place of `()`, which has no address of its own | fixtures/reject/src/lib.rs:676:15 | | 2 | an upcast from `_` to `_`, which is not supported yet | fixtures/reject/src/lib.rs:474:32 | | 2 | comparing pointers to `_`, each a place JS makes of its own | fixtures/reject/src/lib.rs:544:2 | +| 2 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2423:18 | | 2 | passing `_`, which drops, to `_`, which is not supported yet | fixtures/reject/src/lib.rs:275:4 | | 2 | unsupported type `_` from another crate | fixtures/reject/src/lib.rs:387:32 | | 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | fixtures/reject/src/lib.rs:709:2 | @@ -95,9 +96,8 @@ | 1 | hashing `_` as a key, which is not supported yet | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | fixtures/reject/src/lib.rs:266:16 | -| 1 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2422:3 | -| 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2446:11 | -| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | fixtures/reject/src/lib.rs:2469:3 | +| 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2448:11 | +| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | fixtures/reject/src/lib.rs:2471:3 | | 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | fixtures/reject/src/lib.rs:126:3 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | fixtures/reject/src/lib.rs:150:2 | | 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | fixtures/reject/src/lib.rs:530:1 | @@ -114,7 +114,7 @@ The type or module each refused type or path belongs to. | 11 | `(u8, u8)` | fixtures/reject/src/lib.rs:1220:31 | | 9 | `[u8; 4]` | fixtures/reject/src/lib.rs:423:26 | | 8 | `u8` | fixtures/reject/src/lib.rs:224:6 | -| 6 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | +| 7 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 6 | `f16` | fixtures/reject/src/lib.rs:7:14 | | 6 | `std::borrow::Cow` | fixtures/reject/src/lib.rs:280:2 | | 5 | `Gap` | fixtures/reject/src/lib.rs:856:10 | @@ -300,6 +300,7 @@ The type or module each refused type or path belongs to. | 2 | an upcast from `_` to `_`, which is not supported yet | `dyn Keyed`, `dyn std::any::Any` | fixtures/reject/src/lib.rs:474:32 | | 2 | comparing pointers to `_`, each a place JS makes of its own | `u32` | fixtures/reject/src/lib.rs:544:2 | | 2 | memory from `alloc` cast to pointers to `_` and to `_`, which reads the bytes of one type as another | `u32`, `i32` | fixtures/reject/src/lib.rs:2294:7 | +| 2 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2423:18 | | 2 | replacing the value behind a reference to `_` | `std::pin::Pin` | fixtures/reject/src/lib.rs:91:2 | | 2 | unsupported call to `_` | `::sum` | fixtures/reject/src/lib.rs:383:17 | | 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | `Blank` | fixtures/reject/src/lib.rs:709:2 | @@ -432,9 +433,8 @@ The type or module each refused type or path belongs to. | 1 | hashing `_` as a key, which is not supported yet | `std::collections::BTreeSet` | fixtures/reject/src/lib.rs:206:75 | | 1 | hashing `_` by its address, which JS has no counterpart of | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | `std::vec::Vec`, `Batched` | fixtures/reject/src/lib.rs:266:16 | -| 1 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2422:3 | -| 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2446:11 | -| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2469:3 | +| 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2448:11 | +| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2471:3 | | 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:126:3 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | `DoubleEndedIterator::rfind` | fixtures/reject/src/lib.rs:150:2 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `String::retain` | fixtures/reject/src/lib.rs:732:4 | @@ -812,6 +812,13 @@ The type or module each refused type or path belongs to.
+
overriding `_` with a call generic over its accumulator or closure, which is not supported yet (2) + +- fixtures/reject/src/lib.rs:2423:18: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet +- fixtures/reject/src/lib.rs:2493:3: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet + +
+
passing `_`, which drops, to `_`, which is not supported yet (2) - fixtures/reject/src/lib.rs:275:4: passing `{closure@fixtures/reject/src/lib.rs:275:13: 275:27}`, which drops, to `str::contains`, which is not supported yet @@ -1156,21 +1163,15 @@ The type or module each refused type or path belongs to.
-
overriding `_` with a call generic over its accumulator or closure, which is not supported yet (1) - -- fixtures/reject/src/lib.rs:2422:3: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet - -
-
overriding `_` with a constant generic over its accumulator or closure, which is not supported yet (1) -- fixtures/reject/src/lib.rs:2446:11: overriding `Iterator::fold` with a constant generic over its accumulator or closure, which is not supported yet +- fixtures/reject/src/lib.rs:2448:11: overriding `Iterator::fold` with a constant generic over its accumulator or closure, which is not supported yet
overriding `_` with a drop of its accumulator, which is not supported yet (1) -- fixtures/reject/src/lib.rs:2469:3: overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet +- fixtures/reject/src/lib.rs:2471:3: overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet
diff --git a/ts/fixtures/reject/expected.txt b/ts/fixtures/reject/expected.txt index 9356beb68..ba62f675f 100644 --- a/ts/fixtures/reject/expected.txt +++ b/ts/fixtures/reject/expected.txt @@ -258,6 +258,7 @@ a raw pointer to `(u8, u8)` in `([Cloned; 2], (u8, u8))`, which the crate may pu a raw pointer to `(u8, u8)` in `(Dropped, (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2321:23 a raw pointer to `(u8, u8)` in `([Greatest; 2], (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2377:13 a raw pointer to `(u8, u8)` in `([Touched; 2], (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2321:23 -overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2422:3 -overriding `Iterator::fold` with a constant generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2446:11 -overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet at fixtures/reject/src/lib.rs:2469:3 +overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2423:18 +overriding `Iterator::fold` with a constant generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2448:11 +overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet at fixtures/reject/src/lib.rs:2471:3 +overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2493:3 diff --git a/ts/fixtures/reject/src/lib.rs b/ts/fixtures/reject/src/lib.rs index d149ebfc0..0a433f360 100644 --- a/ts/fixtures/reject/src/lib.rs +++ b/ts/fixtures/reject/src/lib.rs @@ -2408,7 +2408,8 @@ fn given_slots(fill: [T; 2]) -> u8 { tagged_slots!(slots) } -/// An iterator whose own `fold` tells its accumulator apart by a helper generic over it. +/// An iterator whose own `fold` tells its accumulator apart by a helper generic over it, +/// in a closure. pub struct Keeps; impl Iterator for Keeps { @@ -2419,7 +2420,8 @@ impl Iterator for Keeps { } fn fold B>(self, init: B, _f: F) -> B { - keep(init) + let kept = |x| keep(x); + kept(init) } } @@ -2474,3 +2476,25 @@ impl Iterator for Discards { pub fn discards() -> usize { Discards.map(|b| b + 1).count() } + +/// An iterator whose own `fold` drops its accumulator by `drop`, which only its closure can be. +pub struct Disposes; + +impl Iterator for Disposes { + type Item = u8; + + fn next(&mut self) -> Option { + None + } + + #[allow(clippy::empty_loop)] + fn fold B>(self, init: B, f: F) -> B { + drop(f); + drop(init); + loop {} + } +} + +pub fn disposes() -> usize { + Disposes.map(|b| b + 1).count() +} diff --git a/ts/fixtures/reject/ts.toml b/ts/fixtures/reject/ts.toml index 0668d51fb..6cb475cc1 100644 --- a/ts/fixtures/reject/ts.toml +++ b/ts/fixtures/reject/ts.toml @@ -190,5 +190,6 @@ roots = [ "keeps", "sizes", "discards", + "disposes", ] printable = ["Meters"] diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index c181c001c..a2ceb2a5d 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -128,7 +128,7 @@ pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { /// `B`, which drops as the one it is translated for does. fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { use rustc_middle::mir::visit::Visitor; - use rustc_middle::mir::{self, AggregateKind, BasicBlock, BasicBlockData, ConstOperand, Location, Rvalue, TerminatorKind}; + use rustc_middle::mir::{self, ConstOperand, Location, TerminatorKind}; struct Erases<'a, 'tcx> { tcx: TyCtxt<'tcx>, @@ -139,8 +139,25 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { found: Option<(Span, &'static str)>, } impl<'tcx> Erases<'_, 'tcx> { - fn mentions(&self, arg: ty::GenericArg<'tcx>) -> bool { - arg.walk().any(|a| matches!(a.as_type().map(Ty::kind), Some(ty::Param(p)) if self.params.contains(&p.index))) + /// Whether `arg` is over `B` or `F` other than through a closure, whose own body is + /// checked in its place, as one in this body is over both. + fn mentions(&mut self, arg: ty::GenericArg<'tcx>) -> bool { + let mut walk = arg.walk(); + let mut mentions = false; + while let Some(a) = walk.next() { + let Some(t) = a.as_type() else { + continue; + }; + match *t.kind() { + ty::Closure(closure, _) => { + self.closures.push(closure); + walk.skip_current_subtree(); + } + ty::Param(p) if self.params.contains(&p.index) => mentions = true, + _ => {} + } + } + mentions } /// Whether `ty` is `F`. @@ -164,22 +181,6 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { } } impl<'tcx> Visitor<'tcx> for Erases<'_, 'tcx> { - fn visit_basic_block_data(&mut self, bb: BasicBlock, data: &BasicBlockData<'tcx>) { - // A panic aborts on wasm32 before its cleanup runs. - if !data.is_cleanup { - self.super_basic_block_data(bb, data); - } - } - - fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, loc: Location) { - if let Rvalue::Aggregate(kind, _) = rvalue - && let AggregateKind::Closure(closure, _) = **kind - { - self.closures.push(closure); - } - self.super_rvalue(rvalue, loc); - } - fn visit_terminator(&mut self, term: &mir::Terminator<'tcx>, loc: Location) { let span = term.source_info.span; match &term.kind { @@ -206,13 +207,13 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { self.super_terminator(term, loc); } - fn visit_const_operand(&mut self, c: &ConstOperand<'tcx>, _: Location) { + fn visit_const_operand(&mut self, c: &ConstOperand<'tcx>, loc: Location) { let args = match c.const_ { mir::Const::Unevaluated(uv, _) => uv.args, _ => ty::List::empty(), }; if self.mentions(c.const_.ty().into()) || args.iter().any(|a| self.mentions(a)) { - self.find(c.span, "a constant generic over its accumulator or closure"); + self.find(self.mir.source_info(loc).span, "a constant generic over its accumulator or closure"); } } } @@ -225,8 +226,20 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { .map(|p| p.index); let params = [params.next()?, params.next()?]; let mut bodies = vec![def_id]; + let mut seen = Vec::new(); while let Some(def_id) = bodies.pop() { + if seen.contains(&def_id) { + continue; + } + seen.push(def_id); let mir = tcx.optimized_mir(def_id); + let mut erases = Erases { + tcx, + mir, + params, + closures: Vec::new(), + found: None, + }; for local in &mir.local_decls { let wraps = local.ty.walk().filter_map(|arg| arg.as_type()).any(|t| match t.kind() { ty::Adt(adt, args) => { @@ -238,14 +251,8 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { if wraps { return Some((local.source_info.span, "its accumulator in an `Option` or a `Poll`")); } + erases.mentions(local.ty.into()); } - let mut erases = Erases { - tcx, - mir, - params, - closures: Vec::new(), - found: None, - }; erases.visit_body(mir); if erases.found.is_some() { return erases.found; From 87285d7872448a2604a29ec556c3a8ef8fe6bd87 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:54:39 -0800 Subject: [PATCH 08/13] style(ts): format Co-Authored-By: Claude Opus 5.5 --- ts/fixtures/task/src/drops/folds.rs | 4 +++- ts/src/lower/iter.rs | 13 ++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ts/fixtures/task/src/drops/folds.rs b/ts/fixtures/task/src/drops/folds.rs index 1749ecb1a..1aad78296 100644 --- a/ts/fixtures/task/src/drops/folds.rs +++ b/ts/fixtures/task/src/drops/folds.rs @@ -672,7 +672,9 @@ pub(super) fn rfolded(log: &Log, id: u32, arg: u8) { log.note(format!("chain {m} {} {}", d.id(), e.id())); // Its folds through a chain, which lends them its closure: theirs drop the loan. let (k, l) = (guard(30), guard(31)); - let n = pile(1, 4).chain(guards(4, 6)).fold(0, move |n, g| n + g.id() + k.id() - k.id()); + let n = pile(1, 4) + .chain(guards(4, 6)) + .fold(0, move |n, g| n + g.id() + k.id() - k.id()); let r = guards(1, 3) .into_iter() .chain(pile(3, 6)) diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index a2ceb2a5d..56dd97279 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -114,7 +114,10 @@ pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { } else if matches!(name.as_str(), "fold" | "rfold") && let Some((span, what)) = erases(tcx, item.def_id) { - t.err(span, format!("overriding `{tr}::{name}` with {what}, which is not supported yet")); + t.err( + span, + format!("overriding `{tr}::{name}` with {what}, which is not supported yet"), + ); } } } @@ -172,7 +175,8 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { return self.is_f(args.type_at(0)); } tcx.trait_of_assoc(def_id).is_some_and(|tr| { - tcx.is_fn_trait(tr) || [core_trait(tcx, "Iterator"), core_trait(tcx, "DoubleEndedIterator")].contains(&Some(tr)) + tcx.is_fn_trait(tr) + || [core_trait(tcx, "Iterator"), core_trait(tcx, "DoubleEndedIterator")].contains(&Some(tr)) }) } @@ -213,7 +217,10 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { _ => ty::List::empty(), }; if self.mentions(c.const_.ty().into()) || args.iter().any(|a| self.mentions(a)) { - self.find(self.mir.source_info(loc).span, "a constant generic over its accumulator or closure"); + self.find( + self.mir.source_info(loc).span, + "a constant generic over its accumulator or closure", + ); } } } From 6c6d137841ef2a390b27fa6bc5acce7074013483 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 18:14:34 -0800 Subject: [PATCH 09/13] fix(ts): refuse a crate's own fold that tells its accumulator or closure apart through a closure or a type of the crate A closure is over what it captures, and std's iterators take any accumulator and closure only outside the crate's own types. Co-Authored-By: Claude Opus 5.5 --- ts/README.md | 4 +- ts/fixtures/lang/expected/ends.Overrides.ts | 36 +++++----- ts/fixtures/lang/src/ends.rs | 7 +- ts/fixtures/reject/expected.txt | 6 +- ts/fixtures/reject/src/lib.rs | 63 +++++++++++++++++ ts/fixtures/reject/ts.toml | 2 + ts/src/lower/iter.rs | 75 +++++++++++++-------- 7 files changed, 135 insertions(+), 58 deletions(-) diff --git a/ts/README.md b/ts/README.md index e05fe33f7..628e36bbd 100644 --- a/ts/README.md +++ b/ts/README.md @@ -894,8 +894,8 @@ without a mapping in `src/lower/iter.rs` (such as `partition`), an own `impl Iterator` or `DoubleEndedIterator` that overrides a provided method other than those, such as `find` or `for_each`, or whose own `fold` or `rfold` tells its accumulator or closure apart from another, by an `Option` or a `Poll` of it, a call or constant generic over it -other than calling or dropping the closure or passing them to std's iterators, or a drop of the -accumulator, +other than calling or dropping the closure or passing them to std's iterators outside the crate's +own types, or a drop of the accumulator, a pointer's address (`{:p}`), `write!` with a placeholder into the crate's own `fmt::Write`, a `str` pattern other than a `char`, a `&str`, a predicate, or chars, a mutable `str` slice, a copy of a closure that changes diff --git a/ts/fixtures/lang/expected/ends.Overrides.ts b/ts/fixtures/lang/expected/ends.Overrides.ts index 7bea32441..6d63d9043 100644 --- a/ts/fixtures/lang/expected/ends.Overrides.ts +++ b/ts/fixtures/lang/expected/ends.Overrides.ts @@ -88,30 +88,26 @@ export function nthBack$iter_DoubleEndedIterator(self: Overrides, n: rt.usize): export function rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32(self: Overrides, init: rt.u32 | undefined, f: (a0: rt.u32 | undefined, a1: rt.u8) => rt.u32 | undefined): rt.u32 | undefined { ends_Run.logged(self._0, 114); - let acc: rt.u32 | undefined = init; - while (true) { - const _7: rt.u8 | undefined = ends_Run.nextBack$iter_DoubleEndedIterator(self._0); - if (_7 !== undefined) { - acc = f(acc, _7); - } else { - break; - } - } - rt.drop(f); - return acc; + const _6: rt.Iter = rt.iterFromFn((): rt.u8 | undefined => { + return ends_Run.nextBack$iter_DoubleEndedIterator(self._0); + }); + let captured = f; + return rt.iterFold(_6, init, rt.closure((acc: rt.u32 | undefined, b: rt.u8): rt.u32 | undefined => { + return captured(acc, b); + }, (): void => { + rt.drop(captured); + }), undefined, true); } export function rfold$iter_DoubleEndedIterator_u8_ends_folded_closure1_ends_Overrides(self: Overrides, init: rt.u8, f: (a0: rt.u8, a1: rt.u8) => rt.u8): rt.u8 { ends_Run.logged(self._0, 114); - let acc: rt.u8 = init; - while (true) { - const _7: rt.u8 | undefined = ends_Run.nextBack$iter_DoubleEndedIterator(self._0); - if (_7 !== undefined) { - acc = f(acc, _7); - } else { - return acc; - } - } + const _6: rt.Iter = rt.iterFromFn((): rt.u8 | undefined => { + return ends_Run.nextBack$iter_DoubleEndedIterator(self._0); + }); + let captured = f; + return rt.iterFold(_6, init, (acc: rt.u8, b: rt.u8): rt.u8 => { + return captured(acc, b); + }, true); } //# sourceMappingURL=ends.Overrides.ts.map diff --git a/ts/fixtures/lang/src/ends.rs b/ts/fixtures/lang/src/ends.rs index bab5b1e68..75ec51dd9 100644 --- a/ts/fixtures/lang/src/ends.rs +++ b/ts/fixtures/lang/src/ends.rs @@ -147,11 +147,8 @@ impl DoubleEndedIterator for Overrides<'_> { fn rfold B>(mut self, init: B, mut f: F) -> B { self.0.logged(b'r'); - let mut acc = init; - while let Some(b) = self.0.next_back() { - acc = f(acc, b); - } - acc + // Through std's fold, by a closure holding `f`. + std::iter::from_fn(|| self.0.next_back()).fold(init, move |acc, b| f(acc, b)) } } diff --git a/ts/fixtures/reject/expected.txt b/ts/fixtures/reject/expected.txt index ba62f675f..3a5f92973 100644 --- a/ts/fixtures/reject/expected.txt +++ b/ts/fixtures/reject/expected.txt @@ -260,5 +260,7 @@ a raw pointer to `(u8, u8)` in `([Greatest; 2], (u8, u8))`, which the crate may a raw pointer to `(u8, u8)` in `([Touched; 2], (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2321:23 overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2423:18 overriding `Iterator::fold` with a constant generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2448:11 -overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet at fixtures/reject/src/lib.rs:2471:3 -overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2493:3 +overriding `Iterator::fold` with a drop of its accumulator, or of the crate's type over it or its closure, which is not supported yet at fixtures/reject/src/lib.rs:2471:3 +overriding `Iterator::fold` with a drop of its accumulator, or of the crate's type over it or its closure, which is not supported yet at fixtures/reject/src/lib.rs:2493:3 +overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2513:11 +overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet at fixtures/reject/src/lib.rs:2551:11 diff --git a/ts/fixtures/reject/src/lib.rs b/ts/fixtures/reject/src/lib.rs index 0a433f360..8f1cb7550 100644 --- a/ts/fixtures/reject/src/lib.rs +++ b/ts/fixtures/reject/src/lib.rs @@ -2498,3 +2498,66 @@ impl Iterator for Disposes { pub fn disposes() -> usize { Disposes.map(|b| b + 1).count() } + +/// An iterator whose own `fold` tells its accumulator apart by an iterator of the crate over it. +pub struct Probes; + +impl Iterator for Probes { + type Item = u8; + + fn next(&mut self) -> Option { + None + } + + fn fold B>(self, init: B, _f: F) -> B { + assert!(Probe(&init).count() > 0); + init + } +} + +/// Counts its type parameter's size. +pub struct Probe<'a, T>(&'a T); + +impl Iterator for Probe<'_, T> { + type Item = u8; + + fn next(&mut self) -> Option { + None + } + + fn count(self) -> usize { + size_of::() + } +} + +pub fn probes() -> usize { + Probes.map(|b| b + 1).count() +} + +/// An iterator whose own `fold` tells its closure apart by the size of a closure holding it. +pub struct Measures; + +impl Iterator for Measures { + type Item = u8; + + fn next(&mut self) -> Option { + None + } + + fn fold B>(self, init: B, f: F) -> B { + let held = move || { + let _held = &f; + }; + assert!(measure(held) > 0); + init + } +} + +#[inline(never)] +fn measure(_x: T) -> usize { + size_of::() +} + +pub fn measures() -> usize { + Measures.map(|b| b + 1).count() +} diff --git a/ts/fixtures/reject/ts.toml b/ts/fixtures/reject/ts.toml index 6cb475cc1..78696e5bc 100644 --- a/ts/fixtures/reject/ts.toml +++ b/ts/fixtures/reject/ts.toml @@ -191,5 +191,7 @@ roots = [ "sizes", "discards", "disposes", + "probes", + "measures", ] printable = ["Meters"] diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index 56dd97279..ea8672040 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -126,9 +126,9 @@ pub fn check_impl(t: &mut Translator<'_, '_>, next_fn: DefId) { /// Where the crate's own `fold` or `rfold`, `def_id`, or a closure in it, tells its /// accumulator `B` or closure `F` apart from the others it is generic over, and how: by an /// `Option` or a `Poll` of `B`, whose `None` or `Pending` is the one of whichever `B` it is -/// translated for; a call generic over either, but `F`'s, a `drop` of `F`, and std's -/// iterators', which take any; a constant generic over either, such as its size; or a drop of -/// `B`, which drops as the one it is translated for does. +/// translated for; a call generic over either, but `F`'s and std's iterators', which take +/// any unless the crate's own type holds one; a constant generic over either, such as its +/// size; or a drop of `B`, which drops as the one it is translated for does. fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { use rustc_middle::mir::visit::Visitor; use rustc_middle::mir::{self, ConstOperand, Location, TerminatorKind}; @@ -142,42 +142,49 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { found: Option<(Span, &'static str)>, } impl<'tcx> Erases<'_, 'tcx> { - /// Whether `arg` is over `B` or `F` other than through a closure, whose own body is - /// checked in its place, as one in this body is over both. - fn mentions(&mut self, arg: ty::GenericArg<'tcx>) -> bool { + /// Whether `arg` is over one of `params`, a closure through what it captures, as its + /// own body is checked in its place, or only under a type of the crate if `crate_only`. + fn over(&mut self, arg: ty::GenericArg<'tcx>, params: &[u32], crate_only: bool) -> bool { let mut walk = arg.walk(); - let mut mentions = false; + let mut over = false; while let Some(a) = walk.next() { let Some(t) = a.as_type() else { continue; }; match *t.kind() { - ty::Closure(closure, _) => { + ty::Closure(closure, args) => { self.closures.push(closure); walk.skip_current_subtree(); + over |= self.over(args.as_closure().tupled_upvars_ty().into(), params, crate_only); } - ty::Param(p) if self.params.contains(&p.index) => mentions = true, + ty::Adt(adt, args) if crate_only && !library::is_std(self.tcx, adt.did()) => { + walk.skip_current_subtree(); + over |= args.iter().any(|a| self.over(a, params, false)); + } + ty::Param(p) if !crate_only && params.contains(&p.index) => over = true, _ => {} } } - mentions + over } - /// Whether `ty` is `F`. - fn is_f(&self, ty: Ty<'tcx>) -> bool { - matches!(ty.kind(), ty::Param(p) if p.index == self.params[1]) + /// Whether a drop of `ty` drops a `B`, or runs the crate's code over `B` or `F`. + fn drops(&mut self, ty: Ty<'tcx>) -> bool { + let params = self.params; + self.over(ty.into(), ¶ms[..1], false) || self.over(ty.into(), ¶ms, true) } - /// Whether a call of `def_id` for `args` takes any `B` and `F`. - fn takes_any(&self, def_id: DefId, args: ty::GenericArgsRef<'tcx>) -> bool { + /// Whether a call of `def_id` for `args` runs the crate's code over `B` or `F`, or code + /// that can tell them apart: anything but `F`'s calls and std's iterators', which take + /// any `B` and `F`. + fn tells(&mut self, def_id: DefId, args: ty::GenericArgsRef<'tcx>) -> bool { let tcx = self.tcx; - if tcx.is_diagnostic_item(rustc_span::sym::mem_drop, def_id) { - return self.is_f(args.type_at(0)); - } - tcx.trait_of_assoc(def_id).is_some_and(|tr| { + let any = tcx.trait_of_assoc(def_id).is_some_and(|tr| { tcx.is_fn_trait(tr) || [core_trait(tcx, "Iterator"), core_trait(tcx, "DoubleEndedIterator")].contains(&Some(tr)) - }) + }); + let params = self.params; + args.iter().any(|a| self.over(a, ¶ms, any)) } fn find(&mut self, span: Span, what: &'static str) { @@ -189,11 +196,17 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { let span = term.source_info.span; match &term.kind { TerminatorKind::Call { func, args, .. } => { - if let Some((callee, callee_args)) = func.const_fn_def() - && !self.takes_any(callee, callee_args) - && callee_args.iter().any(|a| self.mentions(a)) - { - self.find(span, "a call generic over its accumulator or closure"); + if let Some((callee, callee_args)) = func.const_fn_def() { + if self.tcx.is_diagnostic_item(rustc_span::sym::mem_drop, callee) { + if self.drops(callee_args.type_at(0)) { + self.find( + span, + "a drop of its accumulator, or of the crate's type over it or its closure", + ); + } + } else if self.tells(callee, callee_args) { + self.find(span, "a call generic over its accumulator or closure"); + } } for arg in args { self.visit_operand(&arg.node, loc); @@ -202,8 +215,11 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { } TerminatorKind::Drop { place, .. } => { let ty = place.ty(self.mir, self.tcx).ty; - if !self.is_f(ty) && self.mentions(ty.into()) { - self.find(span, "a drop of its accumulator"); + if self.drops(ty) { + self.find( + span, + "a drop of its accumulator, or of the crate's type over it or its closure", + ); } } _ => {} @@ -216,7 +232,8 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { mir::Const::Unevaluated(uv, _) => uv.args, _ => ty::List::empty(), }; - if self.mentions(c.const_.ty().into()) || args.iter().any(|a| self.mentions(a)) { + let params = self.params; + if self.over(c.const_.ty().into(), ¶ms, false) || args.iter().any(|a| self.over(a, ¶ms, false)) { self.find( self.mir.source_info(loc).span, "a constant generic over its accumulator or closure", @@ -258,7 +275,7 @@ fn erases(tcx: TyCtxt<'_>, def_id: DefId) -> Option<(Span, &'static str)> { if wraps { return Some((local.source_info.span, "its accumulator in an `Option` or a `Poll`")); } - erases.mentions(local.ty.into()); + erases.over(local.ty.into(), &[], false); } erases.visit_body(mir); if erases.found.is_some() { From 3d36f72738d9e3c4ab72c12f7c5ab09febfee016 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 18:21:27 -0800 Subject: [PATCH 10/13] test(ts): refresh the reject census Co-Authored-By: Claude Opus 5.5 --- ts/fixtures/reject/census.md | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/ts/fixtures/reject/census.md b/ts/fixtures/reject/census.md index d3bd3c1ec..72cc7af7b 100644 --- a/ts/fixtures/reject/census.md +++ b/ts/fixtures/reject/census.md @@ -1,8 +1,8 @@ # Census of `reject-fixture` -- Refusals: 264 -- Function instances: 309 -- Generic functions no instance reached, lowered over their type parameters: 13 +- Refusals: 266 +- Function instances: 318 +- Generic functions no instance reached, lowered over their type parameters: 14 ## By construct @@ -25,6 +25,7 @@ | 3 | a copy of a closure that changes what it captured | fixtures/reject/src/lib.rs:195:14 | | 3 | a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there | fixtures/reject/src/lib.rs:2214:2 | | 3 | an offset of a pointer to `_`, which JS keeps as an object that knows no array it is in | fixtures/reject/src/lib.rs:1661:56 | +| 3 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2423:18 | | 3 | replacing the value behind a reference to `_` | fixtures/reject/src/lib.rs:91:2 | | 3 | unsupported type `_` | fixtures/reject/src/lib.rs:7:14 | | 2 | `_` is not supported: its `None` and `Some` would both be `rt.None` | fixtures/reject/src/lib.rs:16:15 | @@ -38,7 +39,7 @@ | 2 | a raw pointer to a place of `()`, which has no address of its own | fixtures/reject/src/lib.rs:676:15 | | 2 | an upcast from `_` to `_`, which is not supported yet | fixtures/reject/src/lib.rs:474:32 | | 2 | comparing pointers to `_`, each a place JS makes of its own | fixtures/reject/src/lib.rs:544:2 | -| 2 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2423:18 | +| 2 | overriding `_` with a drop of its accumulator, or of the crate's type over it or its closure, which is not supported yet | fixtures/reject/src/lib.rs:2471:3 | | 2 | passing `_`, which drops, to `_`, which is not supported yet | fixtures/reject/src/lib.rs:275:4 | | 2 | unsupported type `_` from another crate | fixtures/reject/src/lib.rs:387:32 | | 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | fixtures/reject/src/lib.rs:709:2 | @@ -97,7 +98,6 @@ | 1 | hashing `_` by its address, which JS has no counterpart of | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | fixtures/reject/src/lib.rs:266:16 | | 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | fixtures/reject/src/lib.rs:2448:11 | -| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | fixtures/reject/src/lib.rs:2471:3 | | 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | fixtures/reject/src/lib.rs:126:3 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | fixtures/reject/src/lib.rs:150:2 | | 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | fixtures/reject/src/lib.rs:530:1 | @@ -112,9 +112,9 @@ The type or module each refused type or path belongs to. | 27 | `(u32, u32)` | fixtures/reject/src/lib.rs:556:10 | | 15 | `u32` | fixtures/reject/src/lib.rs:503:27 | | 11 | `(u8, u8)` | fixtures/reject/src/lib.rs:1220:31 | +| 9 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 9 | `[u8; 4]` | fixtures/reject/src/lib.rs:423:26 | | 8 | `u8` | fixtures/reject/src/lib.rs:224:6 | -| 7 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 6 | `f16` | fixtures/reject/src/lib.rs:7:14 | | 6 | `std::borrow::Cow` | fixtures/reject/src/lib.rs:280:2 | | 5 | `Gap` | fixtures/reject/src/lib.rs:856:10 | @@ -280,6 +280,7 @@ The type or module each refused type or path belongs to. | 3 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Gap` | fixtures/reject/src/lib.rs:856:10 | | 3 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `Mid`, `Outer` | fixtures/reject/src/lib.rs:1303:34 | | 3 | memory from `alloc` cast to pointers to `_` and to `_`, which reads the bytes of one type as another | `i32`, `u32` | fixtures/reject/src/lib.rs:2295:11 | +| 3 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2423:18 | | 3 | unsupported type `_` | `f16` | fixtures/reject/src/lib.rs:7:14 | | 2 | `_` is not supported: its `None` and `Some` would both be `rt.None` | `Option` | fixtures/reject/src/lib.rs:16:15 | | 2 | `_` of `_`, whose `None` is `rt.None`, which is not supported yet | `Iterator::scan`, `Option` | fixtures/reject/src/lib.rs:37:4 | @@ -300,7 +301,7 @@ The type or module each refused type or path belongs to. | 2 | an upcast from `_` to `_`, which is not supported yet | `dyn Keyed`, `dyn std::any::Any` | fixtures/reject/src/lib.rs:474:32 | | 2 | comparing pointers to `_`, each a place JS makes of its own | `u32` | fixtures/reject/src/lib.rs:544:2 | | 2 | memory from `alloc` cast to pointers to `_` and to `_`, which reads the bytes of one type as another | `u32`, `i32` | fixtures/reject/src/lib.rs:2294:7 | -| 2 | overriding `_` with a call generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2423:18 | +| 2 | overriding `_` with a drop of its accumulator, or of the crate's type over it or its closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2471:3 | | 2 | replacing the value behind a reference to `_` | `std::pin::Pin` | fixtures/reject/src/lib.rs:91:2 | | 2 | unsupported call to `_` | `::sum` | fixtures/reject/src/lib.rs:383:17 | | 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | `Blank` | fixtures/reject/src/lib.rs:709:2 | @@ -434,7 +435,6 @@ The type or module each refused type or path belongs to. | 1 | hashing `_` by its address, which JS has no counterpart of | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1664:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | `std::vec::Vec`, `Batched` | fixtures/reject/src/lib.rs:266:16 | | 1 | overriding `_` with a constant generic over its accumulator or closure, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2448:11 | -| 1 | overriding `_` with a drop of its accumulator, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:2471:3 | | 1 | overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet | `Iterator::fold` | fixtures/reject/src/lib.rs:126:3 | | 1 | overriding `_`, which std's adaptors call in place of `next` or beside it | `DoubleEndedIterator::rfind` | fixtures/reject/src/lib.rs:150:2 | | 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `String::retain` | fixtures/reject/src/lib.rs:732:4 | @@ -719,6 +719,14 @@ The type or module each refused type or path belongs to. +
overriding `_` with a call generic over its accumulator or closure, which is not supported yet (3) + +- fixtures/reject/src/lib.rs:2423:18: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet +- fixtures/reject/src/lib.rs:2513:11: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet +- fixtures/reject/src/lib.rs:2551:11: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet + +
+
replacing the value behind a reference to `_` (3) - fixtures/reject/src/lib.rs:91:2: replacing the value behind a reference to `std::pin::Pin fn(&'a mut std::task::Context<'b>) -> std::task::Poll>>>` @@ -812,10 +820,10 @@ The type or module each refused type or path belongs to.
-
overriding `_` with a call generic over its accumulator or closure, which is not supported yet (2) +
overriding `_` with a drop of its accumulator, or of the crate's type over it or its closure, which is not supported yet (2) -- fixtures/reject/src/lib.rs:2423:18: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet -- fixtures/reject/src/lib.rs:2493:3: overriding `Iterator::fold` with a call generic over its accumulator or closure, which is not supported yet +- fixtures/reject/src/lib.rs:2471:3: overriding `Iterator::fold` with a drop of its accumulator, or of the crate's type over it or its closure, which is not supported yet +- fixtures/reject/src/lib.rs:2493:3: overriding `Iterator::fold` with a drop of its accumulator, or of the crate's type over it or its closure, which is not supported yet
@@ -1169,12 +1177,6 @@ The type or module each refused type or path belongs to.
-
overriding `_` with a drop of its accumulator, which is not supported yet (1) - -- fixtures/reject/src/lib.rs:2471:3: overriding `Iterator::fold` with a drop of its accumulator, which is not supported yet - -
-
overriding `_` with its accumulator in an `Option` or a `Poll`, which is not supported yet (1) - fixtures/reject/src/lib.rs:126:3: overriding `Iterator::fold` with its accumulator in an `Option` or a `Poll`, which is not supported yet From f1e9b4ca6ff30dc4b4622458e6c1ca392bb78c51 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 21:15:27 -0800 Subject: [PATCH 11/13] fix(ts): read a boxed crate iterator by std's box, which forwards only last of its by-value overrides Box's Iterator forwards next, size_hint, nth, last, next_back, nth_back, and len, and folds and counts by next, so a box of the crate's own iterator no longer calls its fold, rfold, or count. lang's ends reads a Box through every consumer and fold. Co-Authored-By: Claude Opus 5.5 --- ts/fixtures/lang/ends/caller.ts | 8 +- ts/fixtures/lang/ends/expected/ends.ts | 311 +++++++++++++++++++++++-- ts/fixtures/lang/ends/src/ends.rs | 19 +- ts/src/lower/iter.rs | 29 ++- 4 files changed, 318 insertions(+), 49 deletions(-) diff --git a/ts/fixtures/lang/ends/caller.ts b/ts/fixtures/lang/ends/caller.ts index 27d76bbaf..37165f84c 100644 --- a/ts/fixtures/lang/ends/caller.ts +++ b/ts/fixtures/lang/ends/caller.ts @@ -5,13 +5,13 @@ import { op } from "./lang.ts"; export { ops, run } from "./lang.ts"; /** - * `ends::ends`: each kind of iterator through every consumer and fold and either end's - * bits, of runs empty, short, and long, whose hints are exact, loose, and lying, after none - * and a few steps through each of its methods. + * `ends::ends`: each kind of iterator, and a box of the crate's own, through every consumer + * and fold and either end's bits, of runs empty, short, and long, whose hints are exact, + * loose, and lying, after none and a few steps through each of its methods. */ const endsCases = [0x00, 0x03, 0x0f, 0x15, 0x27, 0x36, 0x2f].flatMap((shape) => [[], [0x01, 0x00], [0x0a, 0x0d, 0x03], [0x05, 0x06, 0x04, 0x0f]].flatMap((steps) => - Array.from({ length: 10 * 256 }, (_, i) => Uint8Array.of(...op("ends::ends"), i % 10, shape, Math.floor(i / 10), ...steps)), + Array.from({ length: 12 * 256 }, (_, i) => Uint8Array.of(...op("ends::ends"), i % 12, shape, Math.floor(i / 12), ...steps)), ), ); diff --git a/ts/fixtures/lang/ends/expected/ends.ts b/ts/fixtures/lang/ends/expected/ends.ts index 2915aec07..0a25ae345 100644 --- a/ts/fixtures/lang/ends/expected/ends.ts +++ b/ts/fixtures/lang/ends/expected/ends.ts @@ -36,8 +36,8 @@ export function putVec(out: rt.ByteVec, v: rt.ByteVec): void { /** * The run `data`'s first byte picks steps through with each of its other bytes, read * directly, through `&mut`, or by std's adaptors, and consumed by the third byte's pick, - * by `consumed`, or by `folded` past the fifth `kind`, with what each read and each call - * of its methods logged. + * by `consumed`, or by `folded` past the fifth `kind`, and boxed by either past the tenth, + * with what each read and each call of its methods logged. */ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataLen: number, out: rt.ByteVec): void { let over!: rt.u8 | undefined; @@ -84,30 +84,26 @@ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataL } } const k: rt.usize = rt.u8Shr(dataData[dataStart + 1], 4) as rt.usize; - const _72: [rt.u8, boolean] = [rt.u8Rem(dataData[dataStart + 1], 16), rt.u8Rem(kind, 10) >= 5]; - const pick: rt.u8 = _72[0]; - const folds: boolean = _72[1]; + const pick: rt.u8 = rt.u8Rem(dataData[dataStart + 1], 16); b4: { - const _78: rt.u8 = rt.u8Rem(kind, 5); - if (_78 === 0) { - if (!folds) { - consumed$ends_Run(run, pick, k, out); - } else { - folded$ends_Run(run, pick, k, log, out); - } - } else if (_78 === 1) { - if (!folds) { - consumed$ends_Counted({ _0: run }, pick, k, out); - } else { - folded$ends_Counted({ _0: run }, pick, k, log, out); - } - } else if (_78 === 4) { - if (!folds) { - consumed$ends_Overrides({ _0: run }, pick, k, out); - } else { - folded$ends_Overrides({ _0: run }, pick, k, log, out); - } - } else if (_78 === 2) { + const _72: rt.u8 = rt.u8Rem(kind, 12); + if (_72 === 0) { + consumed$ends_Run(run, pick, k, out); + } else if (_72 === 1) { + consumed$ends_Counted({ _0: run }, pick, k, out); + } else if (_72 === 4) { + consumed$ends_Overrides({ _0: run }, pick, k, out); + } else if (_72 === 5) { + folded$ends_Run(run, pick, k, log, out); + } else if (_72 === 6) { + folded$ends_Counted({ _0: run }, pick, k, log, out); + } else if (_72 === 9) { + folded$ends_Overrides({ _0: run }, pick, k, log, out); + } else if (_72 === 10) { + consumed$boxed_Box_ends_Overrides({ _0: run }, pick, k, out); + } else if (_72 === 11) { + folded$boxed_Box_ends_Overrides({ _0: run }, pick, k, log, out); + } else if (_72 === 2 || _72 === 7) { fuses(dataData[dataStart + 1], out); } else { let bits: rt.u8 = dataData[dataStart + 1]; @@ -131,6 +127,98 @@ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataL } } +/** `it`, consumed by std's adaptor or consumer `pick`, with `k` its count where it takes one. */ +export function consumed$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: rt.u8, k: rt.usize, out: rt.ByteVec): void { + let _32!: rt.u8 | undefined; + if (pick === 0) { + putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), "next")); + } else if (pick === 1) { + putVec(out, rt.iterToByteVec(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), "next")); + } else if (pick === 2) { + rt.byteVecPush(out, rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })).len() & 0xff); + } else if (pick === 3) { + rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }))), (_211: [rt.usize, rt.u8]): Uint8Array => { + return Uint8Array.of(_211[0] & 0xff, _211[1]); + }, (value: Uint8Array) => rt.iterSlice(value), false, 2), "next"); + } else if (pick === 4) { + rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), k)), "next"); + } else if (pick === 5) { + rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), k)), "next"); + } else if (pick === 6) { + const _27: Overrides.Overrides = it; + const _28: rt.usize = rt.max(k, 1); + rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterFrom(_27, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _28)), "next"); + } else if (pick === 7) { + put(out, option_map$05nbzug(rt.iterRposition(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b8: rt.u8): boolean => { + return rt.u8Rem(b8, 3) === 0; + }), (i3: rt.usize): rt.u8 => { + return i3 & 0xff; + })); + } else if (pick === 8) { + const _33: rt.usize = rt.usizeRem(k, 4); + if (_33 === 0) { + const _37: Overrides.Overrides = it; + const _38: rt.usize = rt.usizeDiv(k, 4); + _32 = rt.iterRfind(rt.iterSkip(rt.iterFrom(_37, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _38), (b7: rt.u8): boolean => { + return rt.u8Rem(b7, 3) === 0; + }); + } else if (_33 === 1) { + const _42: Overrides.Overrides = it; + const _43: rt.usize = rt.usizeDiv(k, 4); + _32 = rt.iterRfind(rt.iterTake(rt.iterFrom(_42, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _43), (b6: rt.u8): boolean => { + return rt.u8Rem(b6, 3) === 0; + }); + } else if (_33 === 2) { + _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), (_2: [rt.usize, rt.u8]): boolean => { + return rt.u8Rem(rt.u8Add(_2[0] & 0xff, _2[1]), 3) === 0; + }), (_210: [rt.usize, rt.u8]): rt.u8 => { + return (_210[0] & 0xff) ^ _210[1]; + }); + } else { + const _51: Overrides.Overrides = it; + const _52: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + _32 = rt.iterRfind(rt.iterStepBy(rt.iterFrom(_51, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _52), (b3: rt.u8): boolean => { + return rt.u8Rem(b3, 3) === 0; + }); + } + put(out, _32); + } else if (pick === 9) { + put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + } else if (pick === 10) { + rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b2: rt.u8): rt.u8 => { + return b2 ^ 85; + })), k), "next"); + } else if (pick === 11) { + const v: rt.ByteVec = rt.byteVecFrom(Uint8Array.of(170)); + const _67: rt.Iter = rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), k); + rt.iterExtendBytes(v, _67, "next"); + putVec(out, v); + rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }).len() & 0xff); + } else if (pick === 12) { + const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), new rt.Range(0, 5)); + while (true) { + const _79: [rt.u8, rt.u8] | undefined = rt.iterToOption(zip.nextBack()); + if (_79 !== undefined) { + rt.iterExtendBytes(out, rt.iterSlice(Uint8Array.of(_79[0], _79[1])), undefined, true); + } else { + break; + } + } + } else if (pick === 13) { + const fused: rt.Iter = rt.iterFuse(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })); + put(out, rt.iterToOption(fused.nextBack())); + rt.byteVecPush(out, fused.len() & 0xff); + rt.iterExtendBytes(out, fused, "next"); + } else if (pick === 14) { + put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.iterSlice(Uint8Array.of(7, 8)))), k)); + } else { + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, peek.len() & 0xff); + rt.iterExtendBytes(out, rt.iterRev(peek), "next"); + } +} + /** `it`, consumed by std's adaptor or consumer `pick`, with `k` its count where it takes one. */ export function consumed$ends_Counted(it: Counted.Counted, pick: rt.u8, k: rt.usize, out: rt.ByteVec): void { let _32!: rt.u8 | undefined; @@ -407,6 +495,179 @@ export function consumed$ends_Run(it: Run.Run, pick: rt.u8, k: rt.usize, out: rt } } +/** + * `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its + * `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One + * fold panics past `k` items, with what was logged so far. + */ +export function folded$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: rt.u8, k: rt.usize, log: rt.RefCell, out: rt.ByteVec): void { + let _27!: Uint8Array; + let _38!: Uint8Array; + let _53!: Uint8Array; + const k8: rt.u8 = k & 0xff; + if (pick === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 1, (a12: rt.u8, b13: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a12, 3) ^ b13; + }, true)); + } else if (pick === 1) { + const _10: Overrides.Overrides = it; + const _11: (a0: rt.u8, a1: rt.u8) => rt.u8 = (a11: rt.u8, b12: rt.u8): rt.u8 => { + if (!(k < 15)) { + if (!(b12 !== 2)) { + const _1110: rt.ByteSlice = rt.byteVecSlice(rt.refCellBorrow(log).value); + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u8Display(b12, f), (f: rt.Formatter) => rt.fmtList(rt.byteSliceView(_1110), f, rt.u8Debug)]; + rt.panicFmt(["rfold at ", args2[0], " after ", args2[1]]); + } + } + return rt.u8WrappingMul(a11, 3) ^ b12; + }; + rt.byteVecPush(out, rt.iterRfold(rt.iterFrom(_10, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 1, _11, true)); + } else if (pick === 2) { + if (!(rt.usizeRem(k, 2) === 0)) { + const r: rt.u8 | undefined | rt.None = rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), undefined as rt.u8 | undefined, (a10: rt.u8 | undefined, b11: rt.u8): rt.u8 | undefined | rt.None => { + const _410: rt.u8 = rt.u8Rem(b11, 3); + if (_410 === 0) { + return rt.None; + } + if (_410 === 1) { + return undefined; + } + return option_or$1loyskh(a10, b11); + }, true, undefined, rt.None); + if (r === rt.None) { + _27 = Uint8Array.of(1, 0); + } else { + _27 = Uint8Array.of(0, option_unwrapOr$0r2bmpr(r, 255)); + } + rt.iterExtendBytes(out, rt.iterSlice(_27), undefined, true); + rt.iterExtendBytes(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), "next"); + } else { + const _19: (a0: rt.u8, a1: rt.u8) => rt.u8 | undefined = (a9: rt.u8, b10: rt.u8): rt.u8 | undefined => { + return thenSome$0d5am30(b10 !== k8, a9 ^ b10); + }; + put(out, rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 0, _19, true)); + rt.iterExtendBytes(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), "next"); + } + } else if (pick === 3) { + const _35: (a0: rt.u8, a1: rt.u8) => rt.Result = (a8: rt.u8, b9: rt.u8): rt.Result => { + if (!(rt.u8Rem(b9, 4) === rt.u8Rem(k8, 4))) { + return rt.Ok(a8 ^ b9); + } + return rt.Err(b9); + }; + const r2: rt.Result = rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 0, _35); + if (r2.ok) { + _38 = Uint8Array.of(0, r2.value); + } else { + _38 = Uint8Array.of(1, r2.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_38), undefined, true); + put(out, rt.iterToOption(Overrides.next$iter_Iterator(it))); + } else if (pick === 4) { + const r3: rt.Result = rt.iterTryRfold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), 0, (a7: rt.u8, b8: rt.u8): rt.Result => { + if (!(b8 > k8)) { + return rt.Ok(a7 ^ b8); + } + return rt.Err(b8); + }); + if (r3.ok) { + _53 = Uint8Array.of(0, r3.value); + } else { + _53 = Uint8Array.of(1, r3.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_53), undefined, true); + rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }).len() & 0xff); + } else if (pick === 5) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.byteVecPush(out, rt.ownedCount(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b7: rt.u8): rt.u8 => { + return b7 ^ 1; + })) & 0xff); + } else { + rt.byteVecPush(out, rt.ownedCount(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })) & 0xff); + } + } else if (pick === 6) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + } else { + put(out, rt.ownedLast(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }))); + } + } else if (pick === 7) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.iterForEach(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b6: rt.u8): undefined => { + rt.byteVecPush(out, b6); + }, true); + } else { + rt.byteVecPush(out, rt.iterSum(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (a0: rt.u8): rt.u32 => { + return a0 as rt.u32; + }), rt.u32Add, 0, true) & 0xff); + } + } else if (pick === 8) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterMinByKey(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b5: rt.u8): rt.u8 => { + return rt.u8Rem(b5, 3); + }, rt.lt, true)); + } else { + put(out, rt.iterMax(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.lt, true)); + } + } else if (pick === 9) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.ownedLast(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.iterSlice(Uint8Array.of(7, 8))))); + } else { + rt.byteVecPush(out, rt.ownedCount(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.iterSlice(Uint8Array.of(7, 8)))) & 0xff); + } + } else if (pick === 10) { + if (!(rt.usizeRem(k, 2) === 0)) { + const _118: Overrides.Overrides = it; + const _119: rt.usize = rt.usizeDiv(k, 2); + put(out, rt.ownedLast(rt.iterSkip(rt.iterFrom(_118, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _119))); + } else { + const _113: Overrides.Overrides = it; + const _114: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.ownedCount(rt.iterSkip(rt.iterFrom(_113, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _114)) & 0xff); + } + } else if (pick === 11) { + const _121: rt.usize = rt.usizeRem(k, 4); + if (_121 === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), 1, (a6: rt.u8, b4: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a6, 5) ^ b4; + }, true)); + } else if (_121 === 1) { + put(out, rt.iterNth(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), rt.usizeDiv(k, 4))); + } else if (_121 === 2) { + put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + } else { + rt.byteVecPush(out, rt.iterRfold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), 1, (a5: rt.u8, b3: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a5, 5) ^ b3; + }, true)); + } + } else if (pick === 12) { + const _139: Overrides.Overrides = it; + const _140: rt.usize = rt.usizeDiv(k, 2); + const skip: rt.Iter = rt.iterSkip(rt.iterFrom(_139, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _140); + put(out, rt.iterToOption(skip.next())); + put(out, rt.iterToOption(skip.nextBack())); + } else if (pick === 13) { + const _150: Overrides.Overrides = it; + const _151: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + putVec(out, rt.iterToByteVec(rt.iterStepBy(rt.iterFrom(_150, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _151), "next")); + } else if (pick === 14) { + if (!(rt.usizeRem(k, 2) === 0)) { + const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, rt.ownedCount(peek) & 0xff); + } else { + put(out, rt.ownedLast(rt.iterFuse(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + } + } else { + const _175: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.iterFold(rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _175), 0, (a4: rt.u8, _3: rt.u8): rt.u8 => { + return rt.u8Add(a4, 1); + })); + put(out, rt.iterLast(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }))); + rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }).len() & 0xff); + } +} + /** * `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its * `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One diff --git a/ts/fixtures/lang/ends/src/ends.rs b/ts/fixtures/lang/ends/src/ends.rs index 75ec51dd9..a54ce6c03 100644 --- a/ts/fixtures/lang/ends/src/ends.rs +++ b/ts/fixtures/lang/ends/src/ends.rs @@ -207,8 +207,8 @@ fn put_vec(out: &mut Vec, v: Vec) { /// The run `data`'s first byte picks steps through with each of its other bytes, read /// directly, through `&mut`, or by std's adaptors, and consumed by the third byte's pick, -/// by `consumed`, or by `folded` past the fifth `kind`, with what each read and each call -/// of its methods logged. +/// by `consumed`, or by `folded` past the fifth `kind`, and boxed by either past the tenth, +/// with what each read and each call of its methods logged. pub fn ends(kind: u8, data: &[u8], out: &mut Vec) { let [shape, consume, steps @ ..] = data else { return; @@ -238,15 +238,18 @@ pub fn ends(kind: u8, data: &[u8], out: &mut Vec) { } } let k = usize::from(consume >> 4); - let (pick, folds) = (consume % 16, kind % 10 >= 5); - match kind % 5 { - 0 if folds => folded(run, pick, k, &log, out), - 1 if folds => folded(Counted(run), pick, k, &log, out), - 4 if folds => folded(Overrides(run), pick, k, &log, out), + let pick = consume % 16; + match kind % 12 { 0 => consumed(run, pick, k, out), 1 => consumed(Counted(run), pick, k, out), 4 => consumed(Overrides(run), pick, k, out), - 2 => fuses(*consume, out), + 5 => folded(run, pick, k, &log, out), + 6 => folded(Counted(run), pick, k, &log, out), + 9 => folded(Overrides(run), pick, k, &log, out), + // std's `Iterator` for a box forwards `last` but none of the other by-value overrides. + 10 => consumed(Box::new(Overrides(run)), pick, k, out), + 11 => folded(Box::new(Overrides(run)), pick, k, &log, out), + 2 | 7 => fuses(*consume, out), _ => { // Mixed from either end, by the bits of `consume`, until they meet. let mut bits = *consume; diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index 8f8dcc9dd..dacdd502a 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -368,12 +368,13 @@ fn folds_own<'tcx>(b: &Body<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool { /// The `rt.Own` of the crate's iterator of type `ty`: each method of `OWN` but `next` that /// it has of its own, as a function of its source, and those in `BY_VALUE` only if it is -/// `owned`. `undefined` if it has none. -fn own_methods<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, owned: bool, span: Span) -> Expr { +/// `owned`, of which only `last` if `boxed`, as std's `Iterator` for a box forwards no other. +/// `undefined` if it has none. +fn own_methods<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, owned: bool, boxed: bool, span: Span) -> Expr { let none = b.t.iter_item(ty.peel_refs()).and_then(|item| b.t.none_arg(item)); let mut props = Vec::new(); for (tr, name) in &OWN[1..] { - if !owned && BY_VALUE.contains(&(tr, name)) { + if BY_VALUE.contains(&(tr, name)) && (!owned || boxed && *name != "last") { continue; } let Some(instance) = own_method(b, ty, tr, name) else { @@ -486,10 +487,12 @@ impl<'tcx> Body<'_, '_, 'tcx> { /// each, and the crate's own iterator what drops it. pub fn into_iter<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, value: Expr, span: Span) -> Option { let tcx = b.t.tcx; - let (ty, value) = peel_iter(b, ty, value); - let (ty, value) = match unbox_ref(tcx, ty) { - unboxed if unboxed != ty => (unboxed, b.t.pointee_value(ty, value)), - _ => (ty, value), + let (peeled, value) = peel_iter(b, ty, value); + // std's `Iterator` for a box forwards only some of the crate's own methods. + let boxed = peeled != ty && !peeled.is_ref(); + let (ty, value) = match unbox_ref(tcx, peeled) { + unboxed if unboxed != peeled => (unboxed, b.t.pointee_value(peeled, value)), + _ => (peeled, value), }; // A boxed slice owns its elements, as the `Vec` std's `into_iter` makes of it does, with // room for exactly them. @@ -511,7 +514,7 @@ pub fn into_iter<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, value: Expr, sp true => b.t.dropper(ty, span), false => Expr::undefined(), }; - let own = own_methods(b, ty, owned, span); + let own = own_methods(b, ty, owned, boxed, span); Expr::rt("iterFrom", tail(vec![value, next], vec![drop, own])) } // One borrowed by `&mut`, which std's adaptors may drop once it ends, but which @@ -846,8 +849,10 @@ pub fn call<'tcx>( not_bound(b, self_ty, span); let mut values = args.into_iter(); // What it reads through boxes and references, while std picks each specialization by - // `self_ty`, which a box implements none of. - let (iter_ty, recv) = peel_iter(b, self_ty, values.next()?); + // `self_ty`, which a box implements none of. `into_iter` peels `self_ty` itself, to tell + // a box apart. + let first = values.next()?; + let (iter_ty, recv) = peel_iter(b, self_ty, first.clone()); let rest: Vec = values.collect(); // What a consumer returns for `None`, after its other arguments, where that is `rt.None`. let none = b.t.none_arg(item); @@ -861,14 +866,14 @@ pub fn call<'tcx>( None => recv.member("nextBack").call(Vec::new()), }, _ => { - let recv = into_iter(b, iter_ty, recv, span)?; + let recv = into_iter(b, self_ty, first, span)?; let droppers = [b.t.dropper(item, span)].into_iter().chain(none).collect(); return Some(Expr::rt("iterNthBack", tail([vec![recv], rest].concat(), droppers))); } }; return Some(Expr::rt("iterToOption", [item].into_iter().chain(none).collect())); } - let recv = into_iter(b, iter_ty, recv, span)?; + let recv = into_iter(b, self_ty, first, span)?; // `rt.iter(recv, ...args)`, or `peekable` of a `Peekable`'s own. let method = |name: &str, args: Vec| { let of = match owner { From c064c0b3728a82f502a240610097a8bd4c1250dc Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 21:53:49 -0800 Subject: [PATCH 12/13] fix(ts): read a boxed iterator as std's box does, by next where it forwards nothing else A box of a sized iterator, owned or behind a &mut, is an rt.iterBoxed: it forwards next, size_hint, nth, last, next_back, nth_back, and len, as std's Iterator for Box does, and folds, counts, and advances by next. This replaces the last commit's filter of a crate iterator's own methods, which missed a box of an adaptor holding one. lang's ends reads a box of Overrides and of a map of it, and zips reads boxes of each zip, skipped and borrowed. Finishes quest/m3/ts-box-folds.md. Co-Authored-By: Claude Opus 5.5 --- quest/m3/README.md | 1 - quest/m3/ts-box-folds.md | 24 - ts/fixtures/lang/dyns/expected/dyns.ts | 10 +- ts/fixtures/lang/ends/caller.ts | 4 +- ts/fixtures/lang/ends/expected/ends.ts | 375 +- ts/fixtures/lang/ends/src/ends.rs | 11 +- ts/fixtures/lang/iters/expected/iters.ts | 4396 ++++++++++++++++------ ts/fixtures/lang/iters/src/iters.rs | 16 +- ts/runtime/rt/iter.ts | 57 + ts/src/lower/iter.rs | 29 +- 10 files changed, 3583 insertions(+), 1340 deletions(-) delete mode 100644 quest/m3/ts-box-folds.md diff --git a/quest/m3/README.md b/quest/m3/README.md index 5b434c786..2df7bea07 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -21,7 +21,6 @@ generic std gap is planned here even when moq never calls it. - [A trait object in a struct's last field](/quest/m3/ts-dyn-tail.md) - `Rc>` and the like translate, the last field as the object - [bytes' Chain as a Buf object](/quest/m3/ts-buf-chain.md) - `Chain::copy_to_bytes` across both halves translates, and with it a `Chain` as a `dyn Buf` - [A Buf object's size](/quest/m3/ts-dyn-buf-size.md) - a `dyn Buf` object holds only the methods some call dispatches to -- [A boxed iterator folds as std's box does](/quest/m3/ts-box-folds.md) - a `Box` reads by `next` where std's `Iterator` for `Box` forwards nothing else - [Debug of a RefCell or a Cell](/quest/m3/ts-refcell-debug.md) - `{:?}` of a `RefCell`, `Ref`, `RefMut`, and `Cell` translates as std's writes them - [Placeholders written to a crate's own fmt::Write](/quest/m3/ts-fmt-calls.md) - `write!` with placeholders into a crate's own writer translates, its `write_str` seeing each call std makes - [Waiting: drop the lang fixture's mul_add allowance](/quest/m3/ts-fma-allowance.md) - the differential fails on any `mul_add` difference again once wasm32's `fma` rounds exactly diff --git a/quest/m3/ts-box-folds.md b/quest/m3/ts-box-folds.md deleted file mode 100644 index 9d2bd5994..000000000 --- a/quest/m3/ts-box-folds.md +++ /dev/null @@ -1,24 +0,0 @@ -# [S] A boxed iterator folds as std's box does - -## Goal - -[rust2-ts](/ts/README.md) reads a `Box` of a sized iterator, owned or behind a `&mut`, -as std's `Iterator` for `Box` does: by `I`'s own `next`, `size_hint`, `nth`, `last`, -`next_back`, `nth_back`, `len`, and `is_empty`, and by `next` or `next_back` for every -other consumer, proven by the lang fixture's differential tests against native Rust. - -## Plan - -Found on 2026-11-03 probing what [#437](https://github.com/moq-dev/rust2/pull/437) left: -the translation erases the box and folds what it holds by its own `fold`, where std's -defaults read the box by `next`. A boxed `Chain` of mapped `vec::IntoIter`s matches native -across `count`, `fold`, `for_each`, `find`, `position`, `max_by_key`, `rev().fold`, and -`skip(1).count()`, since `Chain`'s folds read and drop in `next`'s order. A box of a `skip` -of a zip std reads by index does not: `Box::new(a.map(f).zip(b.map(g)).skip(1)).count()` -makes and drops the skipped pair whole, as `Skip`'s fold does, where native skips it a -side at a time through the zip's `nth`. - -`rt.iterDyn` already reads a `dyn Iterator` this way, so a box of a sized iterator can be -one too, with `last` forwarded to the iterator's own, as std's `BoxIter` specializes it. - -Public API: the translator's output. diff --git a/ts/fixtures/lang/dyns/expected/dyns.ts b/ts/fixtures/lang/dyns/expected/dyns.ts index 6cd55fe0f..6b66d3fa0 100644 --- a/ts/fixtures/lang/dyns/expected/dyns.ts +++ b/ts/fixtures/lang/dyns/expected/dyns.ts @@ -872,7 +872,7 @@ export function iters(data: rt.ByteSlice, out: rt.ByteVec): void { const args12: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(sum, f)]; put(out, rt.fmtFormat([args12[0], " "])); dropped(out); - const nested: rt.Iter = rt.iterDyn(rt.iterFrom(new Countdown.Countdown(rt.u8Rem(a, 8)), Countdown.next$iter_Iterator, rt.drop)); + const nested: rt.Iter = rt.iterDyn(rt.iterBoxed(rt.iterFrom(new Countdown.Countdown(rt.u8Rem(a, 8)), Countdown.next$iter_Iterator, rt.drop))); const inner: Countdown.Countdown = new Countdown.Countdown(rt.u8Rem(b, 8)); const first: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterFrom(inner, Countdown.next$iter_Iterator)).next()); const second: rt.u8 | undefined = rt.iterToOption(Countdown.next$iter_Iterator(inner)); @@ -880,12 +880,12 @@ export function iters(data: rt.ByteSlice, out: rt.ByteVec): void { const third: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterBorrow(erased)).next()); const doubled: Countdown.Countdown = new Countdown.Countdown(rt.u8Rem(a, 8)); const fourth: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterFrom(doubled, Countdown.next$iter_Iterator)).next()); - const mapped: rt.ByteVec = rt.iterToByteVec(rt.iterMap(rt.iterFrom(new Countdown.Countdown(rt.u8Rem(b, 8)), Countdown.next$iter_Iterator, rt.drop), (x3: rt.u8): rt.u8 => { + const mapped: rt.ByteVec = rt.iterToByteVec(rt.iterMap(rt.iterBoxed(rt.iterFrom(new Countdown.Countdown(rt.u8Rem(b, 8)), Countdown.next$iter_Iterator, rt.drop)), (x3: rt.u8): rt.u8 => { return x3 ^ 1; }), "next"); const _233: rt.ByteVec = rt.iterToByteVec(nested, "next"); const _235: rt.usize = rt.ownedCount(erased); - const _238: rt.usize = rt.ownedCount(rt.iterFrom(doubled, Countdown.next$iter_Iterator, rt.drop)); + const _238: rt.usize = rt.ownedCount(rt.iterBoxed(rt.iterFrom(doubled, Countdown.next$iter_Iterator, rt.drop))); const args14: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtList(rt.byteVecView(_233), f, rt.u8Debug), (f: rt.Formatter) => rt.fmtOption(first, f, rt.u8Debug), (f: rt.Formatter) => rt.fmtOption(second, f, rt.u8Debug), (f: rt.Formatter) => rt.fmtOption(third, f, rt.u8Debug), (f: rt.Formatter) => rt.fmtOption(fourth, f, rt.u8Debug), (f: rt.Formatter) => rt.fmtList(rt.byteVecView(mapped), f, rt.u8Debug), (f: rt.Formatter) => rt.usizeDisplay(_235, f), (f: rt.Formatter) => rt.usizeDisplay(_238, f)]; put(out, rt.fmtFormat([args14[0], " ", args14[1], " ", args14[2], " ", args14[3], " ", args14[4], " ", args14[5], " ", args14[6], " ", args14[7], " "])); dropped(out); @@ -902,7 +902,7 @@ export function iters(data: rt.ByteSlice, out: rt.ByteVec): void { const layered: rt.Place> = rt.place(() => lent2, (value5) => lent2 = value5); const fifth: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterFrom(layered.v.v, Countdown.next$iter_Iterator)).next()); const sixth: rt.u8 | undefined = rt.iterToOption(Countdown.next$iter_Iterator(layered.v.v)); - const _301: rt.usize = rt.ownedCount(rt.iterFrom(held, Countdown.next$iter_Iterator, rt.drop)); + const _301: rt.usize = rt.ownedCount(rt.iterBoxed(rt.iterFrom(held, Countdown.next$iter_Iterator, rt.drop))); const args16: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtList(hints, f, (value: [rt.usize, rt.usize | undefined], f: rt.Formatter) => rt.fmtTuple([(f: rt.Formatter) => rt.usizeDebug(value[0], f), (f: rt.Formatter) => rt.fmtOption(value[1], f, rt.usizeDebug)], f)), (f: rt.Formatter) => rt.fmtOption(fifth, f, rt.u8Debug), (f: rt.Formatter) => rt.fmtOption(sixth, f, rt.u8Debug), (f: rt.Formatter) => rt.usizeDisplay(_301, f)]; put(out, rt.fmtFormat([args16[0], " ", args16[1], " ", args16[2], " ", args16[3], " "])); dropped(out); @@ -917,7 +917,7 @@ export function iters(data: rt.ByteSlice, out: rt.ByteVec): void { return x4; }), new rt.Range(0, rt.u8Rem(b, 4)), "len"); }; - const owned: [rt.u8, rt.u8][] = rt.iterToArray(zipped(), "next", 2); + const owned: [rt.u8, rt.u8][] = rt.iterToArray(rt.iterBoxed(zipped()), "next", 2); const lent3: [rt.u8, rt.u8][] = rt.iterToArray(rt.iterBorrow(zipped()), "next", 2); const _339: rt.RefCell = rt.refCellBorrow(seen2); const args18: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtList(owned, f, (value: [rt.u8, rt.u8], f: rt.Formatter) => rt.fmtTuple([(f: rt.Formatter) => rt.u8Debug(value[0], f), (f: rt.Formatter) => rt.u8Debug(value[1], f)], f)), (f: rt.Formatter) => rt.fmtList(lent3, f, (value: [rt.u8, rt.u8], f: rt.Formatter) => rt.fmtTuple([(f: rt.Formatter) => rt.u8Debug(value[0], f), (f: rt.Formatter) => rt.u8Debug(value[1], f)], f)), (f: rt.Formatter) => rt.fmtList(rt.byteVecView(_339.value), f, rt.u8Debug)]; diff --git a/ts/fixtures/lang/ends/caller.ts b/ts/fixtures/lang/ends/caller.ts index 37165f84c..f827b9cf9 100644 --- a/ts/fixtures/lang/ends/caller.ts +++ b/ts/fixtures/lang/ends/caller.ts @@ -5,13 +5,13 @@ import { op } from "./lang.ts"; export { ops, run } from "./lang.ts"; /** - * `ends::ends`: each kind of iterator, and a box of the crate's own, through every consumer + * `ends::ends`: each kind of iterator, and boxes of the crate's own, through every consumer * and fold and either end's bits, of runs empty, short, and long, whose hints are exact, * loose, and lying, after none and a few steps through each of its methods. */ const endsCases = [0x00, 0x03, 0x0f, 0x15, 0x27, 0x36, 0x2f].flatMap((shape) => [[], [0x01, 0x00], [0x0a, 0x0d, 0x03], [0x05, 0x06, 0x04, 0x0f]].flatMap((steps) => - Array.from({ length: 12 * 256 }, (_, i) => Uint8Array.of(...op("ends::ends"), i % 12, shape, Math.floor(i / 12), ...steps)), + Array.from({ length: 14 * 256 }, (_, i) => Uint8Array.of(...op("ends::ends"), i % 14, shape, Math.floor(i / 14), ...steps)), ), ); diff --git a/ts/fixtures/lang/ends/expected/ends.ts b/ts/fixtures/lang/ends/expected/ends.ts index 0a25ae345..03f47d313 100644 --- a/ts/fixtures/lang/ends/expected/ends.ts +++ b/ts/fixtures/lang/ends/expected/ends.ts @@ -36,8 +36,8 @@ export function putVec(out: rt.ByteVec, v: rt.ByteVec): void { /** * The run `data`'s first byte picks steps through with each of its other bytes, read * directly, through `&mut`, or by std's adaptors, and consumed by the third byte's pick, - * by `consumed`, or by `folded` past the fifth `kind`, and boxed by either past the tenth, - * with what each read and each call of its methods logged. + * by `consumed`, or by `folded` past the fifth `kind`, and boxed, or mapped and boxed, by + * either past the tenth, with what each read and each call of its methods logged. */ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataLen: number, out: rt.ByteVec): void { let over!: rt.u8 | undefined; @@ -86,7 +86,7 @@ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataL const k: rt.usize = rt.u8Shr(dataData[dataStart + 1], 4) as rt.usize; const pick: rt.u8 = rt.u8Rem(dataData[dataStart + 1], 16); b4: { - const _72: rt.u8 = rt.u8Rem(kind, 12); + const _72: rt.u8 = rt.u8Rem(kind, 14); if (_72 === 0) { consumed$ends_Run(run, pick, k, out); } else if (_72 === 1) { @@ -103,6 +103,14 @@ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataL consumed$boxed_Box_ends_Overrides({ _0: run }, pick, k, out); } else if (_72 === 11) { folded$boxed_Box_ends_Overrides({ _0: run }, pick, k, log, out); + } else if (_72 === 12) { + consumed$boxed_Box_iter_Map_ends_Overrides_ends_ends_closure0(rt.iterMap(rt.iterFrom({ _0: run }, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (b2: rt.u8): rt.u8 => { + return b2; + }), pick, k, out); + } else if (_72 === 13) { + folded$boxed_Box_iter_Map_ends_Overrides_ends_ends_closure1(rt.iterMap(rt.iterFrom({ _0: run }, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }), (b: rt.u8): rt.u8 => { + return b; + }), pick, k, log, out); } else if (_72 === 2 || _72 === 7) { fuses(dataData[dataStart + 1], out); } else { @@ -131,25 +139,25 @@ export function ends(kind: rt.u8, dataData: Uint8Array, dataStart: number, dataL export function consumed$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: rt.u8, k: rt.usize, out: rt.ByteVec): void { let _32!: rt.u8 | undefined; if (pick === 0) { - putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), "next")); + putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))), "next")); } else if (pick === 1) { - putVec(out, rt.iterToByteVec(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), "next")); + putVec(out, rt.iterToByteVec(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), "next")); } else if (pick === 2) { - rt.byteVecPush(out, rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })).len() & 0xff); + rt.byteVecPush(out, rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))).len() & 0xff); } else if (pick === 3) { - rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }))), (_211: [rt.usize, rt.u8]): Uint8Array => { + rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })))), (_211: [rt.usize, rt.u8]): Uint8Array => { return Uint8Array.of(_211[0] & 0xff, _211[1]); }, (value: Uint8Array) => rt.iterSlice(value), false, 2), "next"); } else if (pick === 4) { - rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), k)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), k)), "next"); } else if (pick === 5) { - rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), k)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), k)), "next"); } else if (pick === 6) { const _27: Overrides.Overrides = it; const _28: rt.usize = rt.max(k, 1); - rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterFrom(_27, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _28)), "next"); + rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterBoxed(rt.iterFrom(_27, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _28)), "next"); } else if (pick === 7) { - put(out, option_map$05nbzug(rt.iterRposition(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b8: rt.u8): boolean => { + put(out, option_map$05nbzug(rt.iterRposition(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), (b8: rt.u8): boolean => { return rt.u8Rem(b8, 3) === 0; }), (i3: rt.usize): rt.u8 => { return i3 & 0xff; @@ -159,17 +167,17 @@ export function consumed$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: if (_33 === 0) { const _37: Overrides.Overrides = it; const _38: rt.usize = rt.usizeDiv(k, 4); - _32 = rt.iterRfind(rt.iterSkip(rt.iterFrom(_37, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _38), (b7: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterSkip(rt.iterBoxed(rt.iterFrom(_37, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _38), (b7: rt.u8): boolean => { return rt.u8Rem(b7, 3) === 0; }); } else if (_33 === 1) { const _42: Overrides.Overrides = it; const _43: rt.usize = rt.usizeDiv(k, 4); - _32 = rt.iterRfind(rt.iterTake(rt.iterFrom(_42, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _43), (b6: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterTake(rt.iterBoxed(rt.iterFrom(_42, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _43), (b6: rt.u8): boolean => { return rt.u8Rem(b6, 3) === 0; }); } else if (_33 === 2) { - _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), (_2: [rt.usize, rt.u8]): boolean => { + _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))), (_2: [rt.usize, rt.u8]): boolean => { return rt.u8Rem(rt.u8Add(_2[0] & 0xff, _2[1]), 3) === 0; }), (_210: [rt.usize, rt.u8]): rt.u8 => { return (_210[0] & 0xff) ^ _210[1]; @@ -177,15 +185,15 @@ export function consumed$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: } else { const _51: Overrides.Overrides = it; const _52: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); - _32 = rt.iterRfind(rt.iterStepBy(rt.iterFrom(_51, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _52), (b3: rt.u8): boolean => { + _32 = rt.iterRfind(rt.iterStepBy(rt.iterBoxed(rt.iterFrom(_51, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _52), (b3: rt.u8): boolean => { return rt.u8Rem(b3, 3) === 0; }); } put(out, _32); } else if (pick === 9) { - put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + put(out, rt.ownedLast(rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))))); } else if (pick === 10) { - rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b2: rt.u8): rt.u8 => { + rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), (b2: rt.u8): rt.u8 => { return b2 ^ 85; })), k), "next"); } else if (pick === 11) { @@ -193,9 +201,9 @@ export function consumed$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: const _67: rt.Iter = rt.iterTake(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), k); rt.iterExtendBytes(v, _67, "next"); putVec(out, v); - rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }).len() & 0xff); + rt.byteVecPush(out, rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })).len() & 0xff); } else if (pick === 12) { - const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), new rt.Range(0, 5)); + const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), new rt.Range(0, 5)); while (true) { const _79: [rt.u8, rt.u8] | undefined = rt.iterToOption(zip.nextBack()); if (_79 !== undefined) { @@ -205,14 +213,106 @@ export function consumed$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: } } } else if (pick === 13) { - const fused: rt.Iter = rt.iterFuse(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })); + const fused: rt.Iter = rt.iterFuse(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))); put(out, rt.iterToOption(fused.nextBack())); rt.byteVecPush(out, fused.len() & 0xff); rt.iterExtendBytes(out, fused, "next"); } else if (pick === 14) { - put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.iterSlice(Uint8Array.of(7, 8)))), k)); + put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), rt.iterSlice(Uint8Array.of(7, 8)))), k)); } else { - const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })); + const peek: rt.Peekable = rt.iterPeekable(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, peek.len() & 0xff); + rt.iterExtendBytes(out, rt.iterRev(peek), "next"); + } +} + +/** `it`, consumed by std's adaptor or consumer `pick`, with `k` its count where it takes one. */ +export function consumed$boxed_Box_iter_Map_ends_Overrides_ends_ends_closure0(it: rt.Iter, pick: rt.u8, k: rt.usize, out: rt.ByteVec): void { + let _32!: rt.u8 | undefined; + if (pick === 0) { + putVec(out, rt.iterToByteVec(rt.iterRev(rt.iterBoxed(it)), "next")); + } else if (pick === 1) { + putVec(out, rt.iterToByteVec(rt.iterBoxed(it), "next")); + } else if (pick === 2) { + rt.byteVecPush(out, rt.iterRev(rt.iterBoxed(it)).len() & 0xff); + } else if (pick === 3) { + rt.iterExtendBytes(out, rt.iterFlatMap(rt.iterRev(rt.iterEnumerate(rt.iterBoxed(it))), (_211: [rt.usize, rt.u8]): Uint8Array => { + return Uint8Array.of(_211[0] & 0xff, _211[1]); + }, (value: Uint8Array) => rt.iterSlice(value), false, 2), "next"); + } else if (pick === 4) { + rt.iterExtendBytes(out, rt.iterRev(rt.iterSkip(rt.iterBoxed(it), k)), "next"); + } else if (pick === 5) { + rt.iterExtendBytes(out, rt.iterRev(rt.iterTake(rt.iterBoxed(it), k)), "next"); + } else if (pick === 6) { + const _27: rt.Iter = it; + const _28: rt.usize = rt.max(k, 1); + rt.iterExtendBytes(out, rt.iterRev(rt.iterStepBy(rt.iterBoxed(_27), _28)), "next"); + } else if (pick === 7) { + put(out, option_map$05nbzug(rt.iterRposition(rt.iterBoxed(it), (b8: rt.u8): boolean => { + return rt.u8Rem(b8, 3) === 0; + }), (i3: rt.usize): rt.u8 => { + return i3 & 0xff; + })); + } else if (pick === 8) { + const _33: rt.usize = rt.usizeRem(k, 4); + if (_33 === 0) { + const _37: rt.Iter = it; + const _38: rt.usize = rt.usizeDiv(k, 4); + _32 = rt.iterRfind(rt.iterSkip(rt.iterBoxed(_37), _38), (b7: rt.u8): boolean => { + return rt.u8Rem(b7, 3) === 0; + }); + } else if (_33 === 1) { + const _42: rt.Iter = it; + const _43: rt.usize = rt.usizeDiv(k, 4); + _32 = rt.iterRfind(rt.iterTake(rt.iterBoxed(_42), _43), (b6: rt.u8): boolean => { + return rt.u8Rem(b6, 3) === 0; + }); + } else if (_33 === 2) { + _32 = option_map$1sj2ls1(rt.iterRfind(rt.iterEnumerate(rt.iterBoxed(it)), (_2: [rt.usize, rt.u8]): boolean => { + return rt.u8Rem(rt.u8Add(_2[0] & 0xff, _2[1]), 3) === 0; + }), (_210: [rt.usize, rt.u8]): rt.u8 => { + return (_210[0] & 0xff) ^ _210[1]; + }); + } else { + const _51: rt.Iter = it; + const _52: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + _32 = rt.iterRfind(rt.iterStepBy(rt.iterBoxed(_51), _52), (b3: rt.u8): boolean => { + return rt.u8Rem(b3, 3) === 0; + }); + } + put(out, _32); + } else if (pick === 9) { + put(out, rt.ownedLast(rt.iterRev(rt.iterBoxed(it)))); + } else if (pick === 10) { + rt.iterExtendBytes(out, rt.iterTake(rt.iterRev(rt.iterMap(rt.iterBoxed(it), (b2: rt.u8): rt.u8 => { + return b2 ^ 85; + })), k), "next"); + } else if (pick === 11) { + const v: rt.ByteVec = rt.byteVecFrom(Uint8Array.of(170)); + const _67: rt.Iter = rt.iterTake(rt.iterBorrow(rt.iterBoxed(it)), k); + rt.iterExtendBytes(v, _67, "next"); + putVec(out, v); + rt.byteVecPush(out, rt.iterBoxed(it).len() & 0xff); + } else if (pick === 12) { + const zip: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterBoxed(it), new rt.Range(0, 5)); + while (true) { + const _79: [rt.u8, rt.u8] | undefined = rt.iterToOption(zip.nextBack()); + if (_79 !== undefined) { + rt.iterExtendBytes(out, rt.iterSlice(Uint8Array.of(_79[0], _79[1])), undefined, true); + } else { + break; + } + } + } else if (pick === 13) { + const fused: rt.Iter = rt.iterFuse(rt.iterBoxed(it)); + put(out, rt.iterToOption(fused.nextBack())); + rt.byteVecPush(out, fused.len() & 0xff); + rt.iterExtendBytes(out, fused, "next"); + } else if (pick === 14) { + put(out, rt.iterNth(rt.iterRev(rt.iterChain(rt.iterBoxed(it), rt.iterSlice(Uint8Array.of(7, 8)))), k)); + } else { + const peek: rt.Peekable = rt.iterPeekable(rt.iterBoxed(it)); put(out, rt.peekablePeek(peek)); rt.byteVecPush(out, peek.len() & 0xff); rt.iterExtendBytes(out, rt.iterRev(peek), "next"); @@ -506,7 +606,7 @@ export function folded$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: r let _53!: Uint8Array; const k8: rt.u8 = k & 0xff; if (pick === 0) { - rt.byteVecPush(out, rt.iterFold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 1, (a12: rt.u8, b13: rt.u8): rt.u8 => { + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), 1, (a12: rt.u8, b13: rt.u8): rt.u8 => { return rt.u8WrappingMul(a12, 3) ^ b13; }, true)); } else if (pick === 1) { @@ -521,10 +621,10 @@ export function folded$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: r } return rt.u8WrappingMul(a11, 3) ^ b12; }; - rt.byteVecPush(out, rt.iterRfold(rt.iterFrom(_10, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 1, _11, true)); + rt.byteVecPush(out, rt.iterRfold(rt.iterBoxed(rt.iterFrom(_10, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), 1, _11, true)); } else if (pick === 2) { if (!(rt.usizeRem(k, 2) === 0)) { - const r: rt.u8 | undefined | rt.None = rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), undefined as rt.u8 | undefined, (a10: rt.u8 | undefined, b11: rt.u8): rt.u8 | undefined | rt.None => { + const r: rt.u8 | undefined | rt.None = rt.iterTryRfold(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), undefined as rt.u8 | undefined, (a10: rt.u8 | undefined, b11: rt.u8): rt.u8 | undefined | rt.None => { const _410: rt.u8 = rt.u8Rem(b11, 3); if (_410 === 0) { return rt.None; @@ -540,13 +640,13 @@ export function folded$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: r _27 = Uint8Array.of(0, option_unwrapOr$0r2bmpr(r, 255)); } rt.iterExtendBytes(out, rt.iterSlice(_27), undefined, true); - rt.iterExtendBytes(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), "next"); + rt.iterExtendBytes(out, rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), "next"); } else { const _19: (a0: rt.u8, a1: rt.u8) => rt.u8 | undefined = (a9: rt.u8, b10: rt.u8): rt.u8 | undefined => { return thenSome$0d5am30(b10 !== k8, a9 ^ b10); }; - put(out, rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 0, _19, true)); - rt.iterExtendBytes(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), "next"); + put(out, rt.iterTryRfold(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), 0, _19, true)); + rt.iterExtendBytes(out, rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), "next"); } } else if (pick === 3) { const _35: (a0: rt.u8, a1: rt.u8) => rt.Result = (a8: rt.u8, b9: rt.u8): rt.Result => { @@ -555,7 +655,7 @@ export function folded$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: r } return rt.Err(b9); }; - const r2: rt.Result = rt.iterTryRfold(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), 0, _35); + const r2: rt.Result = rt.iterTryRfold(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), 0, _35); if (r2.ok) { _38 = Uint8Array.of(0, r2.value); } else { @@ -576,87 +676,87 @@ export function folded$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: r _53 = Uint8Array.of(1, r3.error); } rt.iterExtendBytes(out, rt.iterSlice(_53), undefined, true); - rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }).len() & 0xff); + rt.byteVecPush(out, rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })).len() & 0xff); } else if (pick === 5) { if (!(rt.usizeRem(k, 2) === 0)) { - rt.byteVecPush(out, rt.ownedCount(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b7: rt.u8): rt.u8 => { + rt.byteVecPush(out, rt.ownedCount(rt.iterMap(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), (b7: rt.u8): rt.u8 => { return b7 ^ 1; })) & 0xff); } else { - rt.byteVecPush(out, rt.ownedCount(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })) & 0xff); + rt.byteVecPush(out, rt.ownedCount(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))) & 0xff); } } else if (pick === 6) { if (!(rt.usizeRem(k, 2) === 0)) { - put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + put(out, rt.ownedLast(rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))))); } else { - put(out, rt.ownedLast(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }))); + put(out, rt.ownedLast(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })))); } } else if (pick === 7) { if (!(rt.usizeRem(k, 2) === 0)) { - rt.iterForEach(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b6: rt.u8): undefined => { + rt.iterForEach(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), (b6: rt.u8): undefined => { rt.byteVecPush(out, b6); }, true); } else { - rt.byteVecPush(out, rt.iterSum(rt.iterMap(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (a0: rt.u8): rt.u32 => { + rt.byteVecPush(out, rt.iterSum(rt.iterMap(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), (a0: rt.u8): rt.u32 => { return a0 as rt.u32; }), rt.u32Add, 0, true) & 0xff); } } else if (pick === 8) { if (!(rt.usizeRem(k, 2) === 0)) { - put(out, rt.iterMinByKey(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), (b5: rt.u8): rt.u8 => { + put(out, rt.iterMinByKey(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), (b5: rt.u8): rt.u8 => { return rt.u8Rem(b5, 3); }, rt.lt, true)); } else { - put(out, rt.iterMax(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.lt, true)); + put(out, rt.iterMax(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), rt.lt, true)); } } else if (pick === 9) { if (!(rt.usizeRem(k, 2) === 0)) { - put(out, rt.ownedLast(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.iterSlice(Uint8Array.of(7, 8))))); + put(out, rt.ownedLast(rt.iterChain(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), rt.iterSlice(Uint8Array.of(7, 8))))); } else { - rt.byteVecPush(out, rt.ownedCount(rt.iterChain(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), rt.iterSlice(Uint8Array.of(7, 8)))) & 0xff); + rt.byteVecPush(out, rt.ownedCount(rt.iterChain(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), rt.iterSlice(Uint8Array.of(7, 8)))) & 0xff); } } else if (pick === 10) { if (!(rt.usizeRem(k, 2) === 0)) { const _118: Overrides.Overrides = it; const _119: rt.usize = rt.usizeDiv(k, 2); - put(out, rt.ownedLast(rt.iterSkip(rt.iterFrom(_118, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _119))); + put(out, rt.ownedLast(rt.iterSkip(rt.iterBoxed(rt.iterFrom(_118, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _119))); } else { const _113: Overrides.Overrides = it; const _114: rt.usize = rt.usizeDiv(k, 2); - rt.byteVecPush(out, rt.ownedCount(rt.iterSkip(rt.iterFrom(_113, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _114)) & 0xff); + rt.byteVecPush(out, rt.ownedCount(rt.iterSkip(rt.iterBoxed(rt.iterFrom(_113, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _114)) & 0xff); } } else if (pick === 11) { const _121: rt.usize = rt.usizeRem(k, 4); if (_121 === 0) { - rt.byteVecPush(out, rt.iterFold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), 1, (a6: rt.u8, b4: rt.u8): rt.u8 => { + rt.byteVecPush(out, rt.iterFold(rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))), 1, (a6: rt.u8, b4: rt.u8): rt.u8 => { return rt.u8WrappingMul(a6, 5) ^ b4; }, true)); } else if (_121 === 1) { - put(out, rt.iterNth(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), rt.usizeDiv(k, 4))); + put(out, rt.iterNth(rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))), rt.usizeDiv(k, 4))); } else if (_121 === 2) { - put(out, rt.ownedLast(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + put(out, rt.ownedLast(rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))))); } else { - rt.byteVecPush(out, rt.iterRfold(rt.iterRev(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })), 1, (a5: rt.u8, b3: rt.u8): rt.u8 => { + rt.byteVecPush(out, rt.iterRfold(rt.iterRev(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))), 1, (a5: rt.u8, b3: rt.u8): rt.u8 => { return rt.u8WrappingMul(a5, 5) ^ b3; }, true)); } } else if (pick === 12) { const _139: Overrides.Overrides = it; const _140: rt.usize = rt.usizeDiv(k, 2); - const skip: rt.Iter = rt.iterSkip(rt.iterFrom(_139, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _140); + const skip: rt.Iter = rt.iterSkip(rt.iterBoxed(rt.iterFrom(_139, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _140); put(out, rt.iterToOption(skip.next())); put(out, rt.iterToOption(skip.nextBack())); } else if (pick === 13) { const _150: Overrides.Overrides = it; const _151: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); - putVec(out, rt.iterToByteVec(rt.iterStepBy(rt.iterFrom(_150, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }), _151), "next")); + putVec(out, rt.iterToByteVec(rt.iterStepBy(rt.iterBoxed(rt.iterFrom(_150, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })), _151), "next")); } else if (pick === 14) { if (!(rt.usizeRem(k, 2) === 0)) { - const peek: rt.Peekable = rt.iterPeekable(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })); + const peek: rt.Peekable = rt.iterPeekable(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))); put(out, rt.peekablePeek(peek)); rt.byteVecPush(out, rt.ownedCount(peek) & 0xff); } else { - put(out, rt.ownedLast(rt.iterFuse(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) })))); + put(out, rt.ownedLast(rt.iterFuse(rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 }))))); } } else { const _175: rt.usize = rt.usizeDiv(k, 2); @@ -664,7 +764,180 @@ export function folded$boxed_Box_ends_Overrides(it: Overrides.Overrides, pick: r return rt.u8Add(a4, 1); })); put(out, rt.iterLast(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }))); - rt.byteVecPush(out, rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)) }).len() & 0xff); + rt.byteVecPush(out, rt.iterBoxed(rt.iterFrom(it, Overrides.next$iter_Iterator, undefined, { hint: Overrides.sizeHint$iter_Iterator, nth: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nth$iter_Iterator(it, n)), fold: Overrides.fold$iter_Iterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32, count: Overrides.count$iter_Iterator, last: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.last$iter_Iterator(it)), back: (it: Overrides.Overrides) => rt.iterFromOption(Overrides.nextBack$iter_DoubleEndedIterator(it)), nthBack: (it: Overrides.Overrides, n) => rt.iterFromOption(Overrides.nthBack$iter_DoubleEndedIterator(it, n)), rfold: Overrides.rfold$iter_DoubleEndedIterator_Option_u32_boxed_Box_dyn_ops_FnMut_tuple2_Option_u32_u8_Option_u32 })).len() & 0xff); + } +} + +/** + * `it`, consumed by std's fold, or a consumer or adaptor that folds it or reads it by its + * `nth`, `count`, or `last`, picked by `pick`, with `k` its count where it takes one. One + * fold panics past `k` items, with what was logged so far. + */ +export function folded$boxed_Box_iter_Map_ends_Overrides_ends_ends_closure1(it: rt.Iter, pick: rt.u8, k: rt.usize, log: rt.RefCell, out: rt.ByteVec): void { + let _27!: Uint8Array; + let _38!: Uint8Array; + let _53!: Uint8Array; + const k8: rt.u8 = k & 0xff; + if (pick === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(it), 1, (a12: rt.u8, b13: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a12, 3) ^ b13; + }, true)); + } else if (pick === 1) { + const _10: rt.Iter = it; + const _11: (a0: rt.u8, a1: rt.u8) => rt.u8 = (a11: rt.u8, b12: rt.u8): rt.u8 => { + if (!(k < 15)) { + if (!(b12 !== 2)) { + const _1110: rt.ByteSlice = rt.byteVecSlice(rt.refCellBorrow(log).value); + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.u8Display(b12, f), (f: rt.Formatter) => rt.fmtList(rt.byteSliceView(_1110), f, rt.u8Debug)]; + rt.panicFmt(["rfold at ", args2[0], " after ", args2[1]]); + } + } + return rt.u8WrappingMul(a11, 3) ^ b12; + }; + rt.byteVecPush(out, rt.iterRfold(rt.iterBoxed(_10), 1, _11, true)); + } else if (pick === 2) { + if (!(rt.usizeRem(k, 2) === 0)) { + const r: rt.u8 | undefined | rt.None = rt.iterTryRfold(rt.iterBoxed(it), undefined as rt.u8 | undefined, (a10: rt.u8 | undefined, b11: rt.u8): rt.u8 | undefined | rt.None => { + const _410: rt.u8 = rt.u8Rem(b11, 3); + if (_410 === 0) { + return rt.None; + } + if (_410 === 1) { + return undefined; + } + return option_or$1loyskh(a10, b11); + }, true, undefined, rt.None); + if (r === rt.None) { + _27 = Uint8Array.of(1, 0); + } else { + _27 = Uint8Array.of(0, option_unwrapOr$0r2bmpr(r, 255)); + } + rt.iterExtendBytes(out, rt.iterSlice(_27), undefined, true); + rt.iterExtendBytes(out, rt.iterBoxed(it), "next"); + } else { + const _19: (a0: rt.u8, a1: rt.u8) => rt.u8 | undefined = (a9: rt.u8, b10: rt.u8): rt.u8 | undefined => { + return thenSome$0d5am30(b10 !== k8, a9 ^ b10); + }; + put(out, rt.iterTryRfold(rt.iterBoxed(it), 0, _19, true)); + rt.iterExtendBytes(out, rt.iterBoxed(it), "next"); + } + } else if (pick === 3) { + const _35: (a0: rt.u8, a1: rt.u8) => rt.Result = (a8: rt.u8, b9: rt.u8): rt.Result => { + if (!(rt.u8Rem(b9, 4) === rt.u8Rem(k8, 4))) { + return rt.Ok(a8 ^ b9); + } + return rt.Err(b9); + }; + const r2: rt.Result = rt.iterTryRfold(rt.iterBoxed(it), 0, _35); + if (r2.ok) { + _38 = Uint8Array.of(0, r2.value); + } else { + _38 = Uint8Array.of(1, r2.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_38), undefined, true); + put(out, rt.iterToOption(it.next())); + } else if (pick === 4) { + const r3: rt.Result = rt.iterTryRfold(rt.iterRev(rt.iterBorrow(rt.iterBoxed(it))), 0, (a7: rt.u8, b8: rt.u8): rt.Result => { + if (!(b8 > k8)) { + return rt.Ok(a7 ^ b8); + } + return rt.Err(b8); + }); + if (r3.ok) { + _53 = Uint8Array.of(0, r3.value); + } else { + _53 = Uint8Array.of(1, r3.error); + } + rt.iterExtendBytes(out, rt.iterSlice(_53), undefined, true); + rt.byteVecPush(out, rt.iterBoxed(it).len() & 0xff); + } else if (pick === 5) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.byteVecPush(out, rt.ownedCount(rt.iterMap(rt.iterBoxed(it), (b7: rt.u8): rt.u8 => { + return b7 ^ 1; + })) & 0xff); + } else { + rt.byteVecPush(out, rt.ownedCount(rt.iterBoxed(it)) & 0xff); + } + } else if (pick === 6) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.ownedLast(rt.iterRev(rt.iterBoxed(it)))); + } else { + put(out, rt.ownedLast(rt.iterBoxed(it))); + } + } else if (pick === 7) { + if (!(rt.usizeRem(k, 2) === 0)) { + rt.iterForEach(rt.iterBoxed(it), (b6: rt.u8): undefined => { + rt.byteVecPush(out, b6); + }, true); + } else { + rt.byteVecPush(out, rt.iterSum(rt.iterMap(rt.iterBoxed(it), (a0: rt.u8): rt.u32 => { + return a0 as rt.u32; + }), rt.u32Add, 0, true) & 0xff); + } + } else if (pick === 8) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.iterMinByKey(rt.iterBoxed(it), (b5: rt.u8): rt.u8 => { + return rt.u8Rem(b5, 3); + }, rt.lt, true)); + } else { + put(out, rt.iterMax(rt.iterBoxed(it), rt.lt, true)); + } + } else if (pick === 9) { + if (!(rt.usizeRem(k, 2) === 0)) { + put(out, rt.ownedLast(rt.iterChain(rt.iterBoxed(it), rt.iterSlice(Uint8Array.of(7, 8))))); + } else { + rt.byteVecPush(out, rt.ownedCount(rt.iterChain(rt.iterBoxed(it), rt.iterSlice(Uint8Array.of(7, 8)))) & 0xff); + } + } else if (pick === 10) { + if (!(rt.usizeRem(k, 2) === 0)) { + const _118: rt.Iter = it; + const _119: rt.usize = rt.usizeDiv(k, 2); + put(out, rt.ownedLast(rt.iterSkip(rt.iterBoxed(_118), _119))); + } else { + const _113: rt.Iter = it; + const _114: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.ownedCount(rt.iterSkip(rt.iterBoxed(_113), _114)) & 0xff); + } + } else if (pick === 11) { + const _121: rt.usize = rt.usizeRem(k, 4); + if (_121 === 0) { + rt.byteVecPush(out, rt.iterFold(rt.iterRev(rt.iterBoxed(it)), 1, (a6: rt.u8, b4: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a6, 5) ^ b4; + }, true)); + } else if (_121 === 1) { + put(out, rt.iterNth(rt.iterRev(rt.iterBoxed(it)), rt.usizeDiv(k, 4))); + } else if (_121 === 2) { + put(out, rt.ownedLast(rt.iterRev(rt.iterBoxed(it)))); + } else { + rt.byteVecPush(out, rt.iterRfold(rt.iterRev(rt.iterBoxed(it)), 1, (a5: rt.u8, b3: rt.u8): rt.u8 => { + return rt.u8WrappingMul(a5, 5) ^ b3; + }, true)); + } + } else if (pick === 12) { + const _139: rt.Iter = it; + const _140: rt.usize = rt.usizeDiv(k, 2); + const skip: rt.Iter = rt.iterSkip(rt.iterBoxed(_139), _140); + put(out, rt.iterToOption(skip.next())); + put(out, rt.iterToOption(skip.nextBack())); + } else if (pick === 13) { + const _150: rt.Iter = it; + const _151: rt.usize = rt.usizeAdd(rt.usizeDiv(k, 4), 1); + putVec(out, rt.iterToByteVec(rt.iterStepBy(rt.iterBoxed(_150), _151), "next")); + } else if (pick === 14) { + if (!(rt.usizeRem(k, 2) === 0)) { + const peek: rt.Peekable = rt.iterPeekable(rt.iterBoxed(it)); + put(out, rt.peekablePeek(peek)); + rt.byteVecPush(out, rt.ownedCount(peek) & 0xff); + } else { + put(out, rt.ownedLast(rt.iterFuse(rt.iterBoxed(it)))); + } + } else { + const _175: rt.usize = rt.usizeDiv(k, 2); + rt.byteVecPush(out, rt.iterFold(rt.iterTake(rt.iterBorrow(rt.iterBoxed(it)), _175), 0, (a4: rt.u8, _3: rt.u8): rt.u8 => { + return rt.u8Add(a4, 1); + })); + put(out, rt.iterLast(rt.iterBorrow(rt.iterBoxed(it)))); + rt.byteVecPush(out, rt.iterBoxed(it).len() & 0xff); } } diff --git a/ts/fixtures/lang/ends/src/ends.rs b/ts/fixtures/lang/ends/src/ends.rs index a54ce6c03..15416ae6a 100644 --- a/ts/fixtures/lang/ends/src/ends.rs +++ b/ts/fixtures/lang/ends/src/ends.rs @@ -207,8 +207,8 @@ fn put_vec(out: &mut Vec, v: Vec) { /// The run `data`'s first byte picks steps through with each of its other bytes, read /// directly, through `&mut`, or by std's adaptors, and consumed by the third byte's pick, -/// by `consumed`, or by `folded` past the fifth `kind`, and boxed by either past the tenth, -/// with what each read and each call of its methods logged. +/// by `consumed`, or by `folded` past the fifth `kind`, and boxed, or mapped and boxed, by +/// either past the tenth, with what each read and each call of its methods logged. pub fn ends(kind: u8, data: &[u8], out: &mut Vec) { let [shape, consume, steps @ ..] = data else { return; @@ -239,16 +239,19 @@ pub fn ends(kind: u8, data: &[u8], out: &mut Vec) { } let k = usize::from(consume >> 4); let pick = consume % 16; - match kind % 12 { + match kind % 14 { 0 => consumed(run, pick, k, out), 1 => consumed(Counted(run), pick, k, out), 4 => consumed(Overrides(run), pick, k, out), 5 => folded(run, pick, k, &log, out), 6 => folded(Counted(run), pick, k, &log, out), 9 => folded(Overrides(run), pick, k, &log, out), - // std's `Iterator` for a box forwards `last` but none of the other by-value overrides. + // std's `Iterator` for a box forwards `last` but none of the other by-value overrides, + // including those of what an adaptor in it holds. 10 => consumed(Box::new(Overrides(run)), pick, k, out), 11 => folded(Box::new(Overrides(run)), pick, k, &log, out), + 12 => consumed(Box::new(Overrides(run).map(|b| b)), pick, k, out), + 13 => folded(Box::new(Overrides(run).map(|b| b)), pick, k, &log, out), 2 | 7 => fuses(*consume, out), _ => { // Mixed from either end, by the bits of `consume`, until they meet. diff --git a/ts/fixtures/lang/iters/expected/iters.ts b/ts/fixtures/lang/iters/expected/iters.ts index b948243bf..5426fdf4b 100644 --- a/ts/fixtures/lang/iters/expected/iters.ts +++ b/ts/fixtures/lang/iters/expected/iters.ts @@ -1917,30 +1917,115 @@ export function at$u8(items: rt.ByteSlice, i: rt.usize): rt.u8 | undefined { * A zip of each kind std specializes, of sides whose closures log each item they make, and * either side shorter or empty: by index (`TrustedRandomAccess`), folded by its size hint * (`TrustedLen`, or only `TrustedRandomAccessNoCoerce`), and by `next` (neither), read by - * each of std's consumers, and through adaptors that fold it or read it by `try_fold`. + * each of std's consumers, through adaptors that fold it or read it by `try_fold`, and + * through a box. */ export function zips(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { let _18!: [rt.ByteSlice, rt.ByteSlice]; - const _40: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2: [rt.u8, rt.u8]): rt.u8 => { + const _45: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2: [rt.u8, rt.u8]): rt.u8 => { return _2[0] ^ _2[1]; }; - const _201: (a0: [rt.u8, rt.u8]) => rt.u8 = (_23: [rt.u8, rt.u8]): rt.u8 => { + const _94: (a0: [rt.u8, rt.u8]) => rt.u8 = (_23: [rt.u8, rt.u8]): rt.u8 => { return _23[0] ^ _23[1]; }; - const _380: (a0: [rt.u8, rt.u8]) => rt.u8 = (_25: [rt.u8, rt.u8]): rt.u8 => { + const _144: (a0: [rt.u8, rt.u8]) => rt.u8 = (_25: [rt.u8, rt.u8]): rt.u8 => { return _25[0] ^ _25[1]; }; - const _573: (a0: [rt.u8, rt.u8]) => rt.u8 = (_27: [rt.u8, rt.u8]): rt.u8 => { + const _194: (a0: [rt.u8, rt.u8]) => rt.u8 = (_27: [rt.u8, rt.u8]): rt.u8 => { return _27[0] ^ _27[1]; }; - const _750: (a0: [rt.u8, rt.u8]) => rt.u8 = (_210: [rt.u8, rt.u8]): rt.u8 => { - return _210[0] ^ _210[1]; + const _240: (a0: [rt.u8, rt.u8]) => rt.u8 = (_211: [rt.u8, rt.u8]): rt.u8 => { + return _211[0] ^ _211[1]; + }; + const _401: (a0: [rt.u8, rt.u8]) => rt.u8 = (_214: [rt.u8, rt.u8]): rt.u8 => { + return _214[0] ^ _214[1]; + }; + const _452: (a0: [rt.u8, rt.u8]) => rt.u8 = (_216: [rt.u8, rt.u8]): rt.u8 => { + return _216[0] ^ _216[1]; + }; + const _504: (a0: [rt.u8, rt.u8]) => rt.u8 = (_219: [rt.u8, rt.u8]): rt.u8 => { + return _219[0] ^ _219[1]; + }; + const _556: (a0: [rt.u8, rt.u8]) => rt.u8 = (_222: [rt.u8, rt.u8]): rt.u8 => { + return _222[0] ^ _222[1]; + }; + const _604: (a0: [rt.u8, rt.u8]) => rt.u8 = (_225: [rt.u8, rt.u8]): rt.u8 => { + return _225[0] ^ _225[1]; + }; + const _783: (a0: [rt.u8, rt.u8]) => rt.u8 = (_228: [rt.u8, rt.u8]): rt.u8 => { + return _228[0] ^ _228[1]; + }; + const _836: (a0: [rt.u8, rt.u8]) => rt.u8 = (_235: [rt.u8, rt.u8]): rt.u8 => { + return _235[0] ^ _235[1]; + }; + const _890: (a0: [rt.u8, rt.u8]) => rt.u8 = (_239: [rt.u8, rt.u8]): rt.u8 => { + return _239[0] ^ _239[1]; + }; + const _944: (a0: [rt.u8, rt.u8]) => rt.u8 = (_249: [rt.u8, rt.u8]): rt.u8 => { + return _249[0] ^ _249[1]; + }; + const _994: (a0: [rt.u8, rt.u8]) => rt.u8 = (_257: [rt.u8, rt.u8]): rt.u8 => { + return _257[0] ^ _257[1]; + }; + const _1187: (a0: [rt.u8, rt.u8]) => rt.u8 = (_260: [rt.u8, rt.u8]): rt.u8 => { + return _260[0] ^ _260[1]; + }; + const _1238: (a0: [rt.u8, rt.u8]) => rt.u8 = (_262: [rt.u8, rt.u8]): rt.u8 => { + return _262[0] ^ _262[1]; + }; + const _1290: (a0: [rt.u8, rt.u8]) => rt.u8 = (_265: [rt.u8, rt.u8]): rt.u8 => { + return _265[0] ^ _265[1]; + }; + const _1342: (a0: [rt.u8, rt.u8]) => rt.u8 = (_268: [rt.u8, rt.u8]): rt.u8 => { + return _268[0] ^ _268[1]; + }; + const _1390: (a0: [rt.u8, rt.u8]) => rt.u8 = (_271: [rt.u8, rt.u8]): rt.u8 => { + return _271[0] ^ _271[1]; + }; + const _1567: (a0: [rt.u8, rt.u8]) => rt.u8 = (_284: [rt.u8, rt.u8]): rt.u8 => { + return _284[0] ^ _284[1]; + }; + const _1618: (a0: [rt.u8, rt.u8]) => rt.u8 = (_288: [rt.u8, rt.u8]): rt.u8 => { + return _288[0] ^ _288[1]; + }; + const _1670: (a0: [rt.u8, rt.u8]) => rt.u8 = (_296: [rt.u8, rt.u8]): rt.u8 => { + return _296[0] ^ _296[1]; + }; + const _1722: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2107: [rt.u8, rt.u8]): rt.u8 => { + return _2107[0] ^ _2107[1]; + }; + const _1770: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2115: [rt.u8, rt.u8]): rt.u8 => { + return _2115[0] ^ _2115[1]; + }; + const _1946: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2118: [rt.u8, rt.u8]): rt.u8 => { + return _2118[0] ^ _2118[1]; + }; + const _1996: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2120: [rt.u8, rt.u8]): rt.u8 => { + return _2120[0] ^ _2120[1]; }; - const _926: (a0: [rt.u8, rt.u8]) => rt.u8 = (_218: [rt.u8, rt.u8]): rt.u8 => { - return _218[0] ^ _218[1]; + const _2047: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2123: [rt.u8, rt.u8]): rt.u8 => { + return _2123[0] ^ _2123[1]; }; - const _1101: (a0: [rt.u8, rt.u8]) => rt.u8 = (_221: [rt.u8, rt.u8]): rt.u8 => { - return _221[0] ^ _221[1]; + const _2098: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2126: [rt.u8, rt.u8]): rt.u8 => { + return _2126[0] ^ _2126[1]; + }; + const _2145: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2129: [rt.u8, rt.u8]): rt.u8 => { + return _2129[0] ^ _2129[1]; + }; + const _2320: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2132: [rt.u8, rt.u8]): rt.u8 => { + return _2132[0] ^ _2132[1]; + }; + const _2377: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2140: [rt.u8, rt.u8]): rt.u8 => { + return _2140[0] ^ _2140[1]; + }; + const _2435: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2144: [rt.u8, rt.u8]): rt.u8 => { + return _2144[0] ^ _2144[1]; + }; + const _2493: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2154: [rt.u8, rt.u8]): rt.u8 => { + return _2154[0] ^ _2154[1]; + }; + const _2547: (a0: [rt.u8, rt.u8]) => rt.u8 = (_2162: [rt.u8, rt.u8]): rt.u8 => { + return _2162[0] ^ _2162[1]; }; const mid: number = rt.usizeRem(kind >> 5 as rt.usize, rt.usizeAdd(data.length, 1)); if (mid > data.length) { @@ -1954,195 +2039,452 @@ export function zips(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { const a2: rt.ByteSlice = _18[0]; const b2: rt.ByteSlice = _18[1]; const other: boolean = (kind & 4) !== 0; - const n: rt.usize = option_mapOr$1t0muvr(rt.byteSliceFirst(data), 0, (_223: rt.u8): rt.usize => { - return rt.usizeRem(_223 as rt.usize, 4); + const n: rt.usize = option_mapOr$1t0muvr(rt.byteSliceFirst(data), 0, (_2165: rt.u8): rt.usize => { + return rt.usizeRem(_2165 as rt.usize, 4); }); const log: rt.RefCell = new rt.RefCell(new rt.ByteVec()); const _28: rt.u8 = rt.u8Rem(kind, 4); if (_28 === 0) { if ((kind & 16) === 0) { - const z: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2290: rt.u8): rt.u8 => { - const x231: rt.u8 = _2290; - const _6238: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6238.value, x231 ^ 1); - rt.refMutRelease(_6238); - return x231; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2291: rt.u8): rt.u8 => { - const x232: rt.u8 = _2291; - const _6239: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6239.value, x232 ^ 2); - rt.refMutRelease(_6239); - return x232; - }), [true, true]); - const _41: rt.usize = rt.usizeRem(data.length, 8); - if (_41 === 0) { - rt.byteVecPush(out, rt.iterCount(z) & 0xff); - } else if (_41 === 1) { - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z), 238, (_2300: [rt.u8, rt.u8]): rt.u8 => { - return _2300[0] ^ _2300[1]; - })); - } else if (_41 === 2) { - rt.iterForEach(z, (p21: [rt.u8, rt.u8]): undefined => { - rt.byteVecPush(out, _40(p21)); - }); - } else if (_41 === 3) { - rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z, (_2299: [rt.u8, rt.u8]): rt.u32 => { - return rt.u32Add(_2299[0] as rt.u32, _2299[1] as rt.u32); - }), rt.u32Add, 0)).reverse()), undefined, true); - } else if (_41 === 4) { - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z, (_2298: [rt.u8, rt.u8]): rt.u8 => { - return _2298[0] ^ _2298[1]; - }), undefined, true)), undefined, true); - } else if (_41 === 5) { - rt.byteVecPush(out, rt.iterFold(z, 0, (acc7: rt.u8, p20: [rt.u8, rt.u8]): rt.u8 => { - return rt.u8WrappingMul(acc7, 3) ^ _40(p20); - })); - } else if (_41 === 6) { - rt.byteVecPush(out, rt.iterAny(rt.iterMap(z, (_2297: [rt.u8, rt.u8]): rt.u8 => { - return _2297[0] ^ _2297[1]; - }), (x239: rt.u8): boolean => { - return x239 === 0; - }) ? 1 : 0); + const _31: rt.usize = rt.usizeRem(rt.usizeDiv(data.length, 8), 5); + if (_31 === 0) { + const z: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21148: rt.u8): rt.u8 => { + const x603: rt.u8 = _21148; + const _6355: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6355.value, x603 ^ 1); + rt.refMutRelease(_6355); + return x603; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21149: rt.u8): rt.u8 => { + const x604: rt.u8 = _21149; + const _6356: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6356.value, x604 ^ 2); + rt.refMutRelease(_6356); + return x604; + }), [true, true]); + const _46: rt.usize = rt.usizeRem(data.length, 8); + if (_46 === 0) { + rt.byteVecPush(out, rt.iterCount(z) & 0xff); + } else if (_46 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z), 238, (_21158: [rt.u8, rt.u8]): rt.u8 => { + return _21158[0] ^ _21158[1]; + })); + } else if (_46 === 2) { + rt.iterForEach(z, (p77: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _45(p77)); + }); + } else if (_46 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z, (_21157: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21157[0] as rt.u32, _21157[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_46 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z, (_21156: [rt.u8, rt.u8]): rt.u8 => { + return _21156[0] ^ _21156[1]; + }), undefined, true)), undefined, true); + } else if (_46 === 5) { + rt.byteVecPush(out, rt.iterFold(z, 0, (acc35: rt.u8, p76: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc35, 3) ^ _45(p76); + })); + } else if (_46 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(z, (_21155: [rt.u8, rt.u8]): rt.u8 => { + return _21155[0] ^ _21155[1]; + }), (x611: rt.u8): boolean => { + return x611 === 0; + }) ? 1 : 0); + } else { + const z2: rt.Iter<[rt.u8, rt.u8]> = z; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z2, (_21150: [rt.u8, rt.u8]): boolean => { + return _21150[0] > _21150[1]; + }), 238, (i42: rt.usize): rt.u8 => { + return i42 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z2, (_21151: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21151[0], 3) === 0; + }), 238, (_21152: [rt.u8, rt.u8]): rt.u8 => { + return _21152[0] ^ _21152[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z2, n), 238, (_21153: [rt.u8, rt.u8]): rt.u8 => { + return _21153[0] ^ _21153[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z2.next()), 238, (_21154: [rt.u8, rt.u8]): rt.u8 => { + return _21154[0] ^ _21154[1]; + })); + } + } else if (_31 === 1) { + const z3: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21137: rt.u8): rt.u8 => { + const x591: rt.u8 = _21137; + const _6351: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6351.value, x591 ^ 1); + rt.refMutRelease(_6351); + return x591; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21138: rt.u8): rt.u8 => { + const x592: rt.u8 = _21138; + const _6352: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6352.value, x592 ^ 2); + rt.refMutRelease(_6352); + return x592; + }), [true, true]); + const _95: rt.usize = rt.usizeRem(data.length, 8); + if (_95 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z3)) & 0xff); + } else if (_95 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z3)), 238, (_21147: [rt.u8, rt.u8]): rt.u8 => { + return _21147[0] ^ _21147[1]; + })); + } else if (_95 === 2) { + const _102: (a0: [rt.u8, rt.u8]) => undefined = (p75: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _94(p75)); + }; + rt.iterForEach(rt.iterBoxed(z3), _102); + } else if (_95 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z3), (_21146: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21146[0] as rt.u32, _21146[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_95 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z3), (_21145: [rt.u8, rt.u8]): rt.u8 => { + return _21145[0] ^ _21145[1]; + }), "next")), undefined, true); + } else if (_95 === 5) { + const _110: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc34: rt.u8, p74: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc34, 3) ^ _94(p74); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z3), 0, _110)); + } else if (_95 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z3), (_21144: [rt.u8, rt.u8]): rt.u8 => { + return _21144[0] ^ _21144[1]; + }), (x599: rt.u8): boolean => { + return x599 === 0; + }) ? 1 : 0); + } else { + const z4: rt.Iter<[rt.u8, rt.u8]> = z3; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z4), (_21139: [rt.u8, rt.u8]): boolean => { + return _21139[0] > _21139[1]; + }), 238, (i41: rt.usize): rt.u8 => { + return i41 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z4), (_21140: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21140[0], 3) === 0; + }), 238, (_21141: [rt.u8, rt.u8]): rt.u8 => { + return _21141[0] ^ _21141[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z4), n), 238, (_21142: [rt.u8, rt.u8]): rt.u8 => { + return _21142[0] ^ _21142[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z4.next()), 238, (_21143: [rt.u8, rt.u8]): rt.u8 => { + return _21143[0] ^ _21143[1]; + })); + } + } else if (_31 === 2) { + const z5: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21126: rt.u8): rt.u8 => { + const x579: rt.u8 = _21126; + const _6347: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6347.value, x579 ^ 1); + rt.refMutRelease(_6347); + return x579; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21127: rt.u8): rt.u8 => { + const x580: rt.u8 = _21127; + const _6348: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6348.value, x580 ^ 2); + rt.refMutRelease(_6348); + return x580; + }), [true, true]), n); + const _145: rt.usize = rt.usizeRem(data.length, 8); + if (_145 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z5)) & 0xff); + } else if (_145 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z5)), 238, (_21136: [rt.u8, rt.u8]): rt.u8 => { + return _21136[0] ^ _21136[1]; + })); + } else if (_145 === 2) { + const _152: (a0: [rt.u8, rt.u8]) => undefined = (p73: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _144(p73)); + }; + rt.iterForEach(rt.iterBoxed(z5), _152); + } else if (_145 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z5), (_21135: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21135[0] as rt.u32, _21135[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_145 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z5), (_21134: [rt.u8, rt.u8]): rt.u8 => { + return _21134[0] ^ _21134[1]; + }), "next")), undefined, true); + } else if (_145 === 5) { + const _160: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc33: rt.u8, p72: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc33, 3) ^ _144(p72); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z5), 0, _160)); + } else if (_145 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z5), (_21133: [rt.u8, rt.u8]): rt.u8 => { + return _21133[0] ^ _21133[1]; + }), (x587: rt.u8): boolean => { + return x587 === 0; + }) ? 1 : 0); + } else { + const z6: rt.Iter<[rt.u8, rt.u8]> = z5; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z6), (_21128: [rt.u8, rt.u8]): boolean => { + return _21128[0] > _21128[1]; + }), 238, (i40: rt.usize): rt.u8 => { + return i40 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z6), (_21129: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21129[0], 3) === 0; + }), 238, (_21130: [rt.u8, rt.u8]): rt.u8 => { + return _21130[0] ^ _21130[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z6), n), 238, (_21131: [rt.u8, rt.u8]): rt.u8 => { + return _21131[0] ^ _21131[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z6.next()), 238, (_21132: [rt.u8, rt.u8]): rt.u8 => { + return _21132[0] ^ _21132[1]; + })); + } + } else if (_31 === 3) { + const _184: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21115: rt.u8): rt.u8 => { + const x567: rt.u8 = _21115; + const _6343: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6343.value, x567 ^ 1); + rt.refMutRelease(_6343); + return x567; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21116: rt.u8): rt.u8 => { + const x568: rt.u8 = _21116; + const _6344: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6344.value, x568 ^ 2); + rt.refMutRelease(_6344); + return x568; + }), [true, true]); + const _195: rt.usize = rt.usizeRem(data.length, 8); + if (_195 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_184))) & 0xff); + } else if (_195 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_184))), 238, (_21125: [rt.u8, rt.u8]): rt.u8 => { + return _21125[0] ^ _21125[1]; + })); + } else if (_195 === 2) { + const _202: (a0: [rt.u8, rt.u8]) => undefined = (p71: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _194(p71)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_184)), _202); + } else if (_195 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_184)), (_21124: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21124[0] as rt.u32, _21124[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_195 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_184)), (_21123: [rt.u8, rt.u8]): rt.u8 => { + return _21123[0] ^ _21123[1]; + }), "next")), undefined, true); + } else if (_195 === 5) { + const _210: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc32: rt.u8, p70: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc32, 3) ^ _194(p70); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_184)), 0, _210)); + } else if (_195 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_184)), (_21122: [rt.u8, rt.u8]): rt.u8 => { + return _21122[0] ^ _21122[1]; + }), (x575: rt.u8): boolean => { + return x575 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_184), (_21117: [rt.u8, rt.u8]): boolean => { + return _21117[0] > _21117[1]; + }), 238, (i39: rt.usize): rt.u8 => { + return i39 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_184), (_21118: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21118[0], 3) === 0; + }), 238, (_21119: [rt.u8, rt.u8]): rt.u8 => { + return _21119[0] ^ _21119[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_184), n), 238, (_21120: [rt.u8, rt.u8]): rt.u8 => { + return _21120[0] ^ _21120[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_184.next()), 238, (_21121: [rt.u8, rt.u8]): rt.u8 => { + return _21121[0] ^ _21121[1]; + })); + } } else { - const z2: rt.Iter<[rt.u8, rt.u8]> = z; - rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z2, (_2292: [rt.u8, rt.u8]): boolean => { - return _2292[0] > _2292[1]; - }), 238, (i14: rt.usize): rt.u8 => { - return i14 & 0xff; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z2, (_2293: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2293[0], 3) === 0; - }), 238, (_2294: [rt.u8, rt.u8]): rt.u8 => { - return _2294[0] ^ _2294[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z2, n), 238, (_2295: [rt.u8, rt.u8]): rt.u8 => { - return _2295[0] ^ _2295[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z2.next()), 238, (_2296: [rt.u8, rt.u8]): rt.u8 => { - return _2296[0] ^ _2296[1]; - })); + const _229: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21104: rt.u8): rt.u8 => { + const x555: rt.u8 = _21104; + const _6339: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6339.value, x555 ^ 1); + rt.refMutRelease(_6339); + return x555; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21105: rt.u8): rt.u8 => { + const x556: rt.u8 = _21105; + const _6340: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6340.value, x556 ^ 2); + rt.refMutRelease(_6340); + return x556; + }), [true, true]), n); + const _241: rt.usize = rt.usizeRem(data.length, 8); + if (_241 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_229))) & 0xff); + } else if (_241 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_229))), 238, (_21114: [rt.u8, rt.u8]): rt.u8 => { + return _21114[0] ^ _21114[1]; + })); + } else if (_241 === 2) { + const _248: (a0: [rt.u8, rt.u8]) => undefined = (p69: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _240(p69)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_229)), _248); + } else if (_241 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_229)), (_21113: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21113[0] as rt.u32, _21113[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_241 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_229)), (_21112: [rt.u8, rt.u8]): rt.u8 => { + return _21112[0] ^ _21112[1]; + }), "next")), undefined, true); + } else if (_241 === 5) { + const _256: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc31: rt.u8, p68: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc31, 3) ^ _240(p68); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_229)), 0, _256)); + } else if (_241 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_229)), (_21111: [rt.u8, rt.u8]): rt.u8 => { + return _21111[0] ^ _21111[1]; + }), (x563: rt.u8): boolean => { + return x563 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_229), (_21106: [rt.u8, rt.u8]): boolean => { + return _21106[0] > _21106[1]; + }), 238, (i38: rt.usize): rt.u8 => { + return i38 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_229), (_21107: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21107[0], 3) === 0; + }), 238, (_21108: [rt.u8, rt.u8]): rt.u8 => { + return _21108[0] ^ _21108[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_229), n), 238, (_21109: [rt.u8, rt.u8]): rt.u8 => { + return _21109[0] ^ _21109[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_229.next()), 238, (_21110: [rt.u8, rt.u8]): rt.u8 => { + return _21110[0] ^ _21110[1]; + })); + } } } else { - const _79: rt.usize = rt.usizeRem(data.length, 8); - if (_79 === 0) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2287: rt.u8): rt.u8 => { - const x228: rt.u8 = _2287; - const _6236: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6236.value, x228 ^ 1); - rt.refMutRelease(_6236); - return x228; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2288: rt.u8): rt.u8 => { - const x229: rt.u8 = _2288; - const _6237: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6237.value, x229 ^ 2); - rt.refMutRelease(_6237); - return x229; - }), [true, true]), (_2289: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2289[0], 2) === 0; + const _274: rt.usize = rt.usizeRem(data.length, 8); + if (_274 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21101: rt.u8): rt.u8 => { + const x552: rt.u8 = _21101; + const _6337: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6337.value, x552 ^ 1); + rt.refMutRelease(_6337); + return x552; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21102: rt.u8): rt.u8 => { + const x553: rt.u8 = _21102; + const _6338: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6338.value, x553 ^ 2); + rt.refMutRelease(_6338); + return x553; + }), [true, true]), (_21103: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21103[0], 2) === 0; })) & 0xff); - } else if (_79 === 1) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2284: rt.u8): rt.u8 => { - const x225: rt.u8 = _2284; - const _6234: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6234.value, x225 ^ 1); - rt.refMutRelease(_6234); - return x225; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2285: rt.u8): rt.u8 => { - const x226: rt.u8 = _2285; - const _6235: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6235.value, x226 ^ 2); - rt.refMutRelease(_6235); - return x226; - }), [true, true]), (_2286: [rt.u8, rt.u8]): rt.u8 | undefined => { - return rt.u8CheckedSub(_2286[0], _2286[1]); + } else if (_274 === 1) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21098: rt.u8): rt.u8 => { + const x549: rt.u8 = _21098; + const _6335: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6335.value, x549 ^ 1); + rt.refMutRelease(_6335); + return x549; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21099: rt.u8): rt.u8 => { + const x550: rt.u8 = _21099; + const _6336: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6336.value, x550 ^ 2); + rt.refMutRelease(_6336); + return x550; + }), [true, true]), (_21100: [rt.u8, rt.u8]): rt.u8 | undefined => { + return rt.u8CheckedSub(_21100[0], _21100[1]); })) & 0xff); - } else if (_79 === 2) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2281: rt.u8): rt.u8 => { - const x222: rt.u8 = _2281; - const _6232: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6232.value, x222 ^ 1); - rt.refMutRelease(_6232); - return x222; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2282: rt.u8): rt.u8 => { - const x223: rt.u8 = _2282; - const _6233: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6233.value, x223 ^ 2); - rt.refMutRelease(_6233); - return x223; - }), [true, true]), (_2283: [rt.u8, rt.u8]): boolean => { - return _2283[0] < 128; + } else if (_274 === 2) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21095: rt.u8): rt.u8 => { + const x546: rt.u8 = _21095; + const _6333: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6333.value, x546 ^ 1); + rt.refMutRelease(_6333); + return x546; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21096: rt.u8): rt.u8 => { + const x547: rt.u8 = _21096; + const _6334: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6334.value, x547 ^ 2); + rt.refMutRelease(_6334); + return x547; + }), [true, true]), (_21097: [rt.u8, rt.u8]): boolean => { + return _21097[0] < 128; })) & 0xff); - } else if (_79 === 3) { - rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2278: rt.u8): rt.u8 => { - const x220: rt.u8 = _2278; - const _6230: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6230.value, x220 ^ 1); - rt.refMutRelease(_6230); - return x220; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2279: rt.u8): rt.u8 => { - const x221: rt.u8 = _2279; - const _6231: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6231.value, x221 ^ 2); - rt.refMutRelease(_6231); - return x221; - }), [true, true])), (_2280: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { - return _2280[0] & 0xff; + } else if (_274 === 3) { + rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21092: rt.u8): rt.u8 => { + const x544: rt.u8 = _21092; + const _6331: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6331.value, x544 ^ 1); + rt.refMutRelease(_6331); + return x544; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21093: rt.u8): rt.u8 => { + const x545: rt.u8 = _21093; + const _6332: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6332.value, x545 ^ 2); + rt.refMutRelease(_6332); + return x545; + }), [true, true])), (_21094: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { + return _21094[0] & 0xff; })), 238)); - } else if (_79 === 4) { - rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2276: rt.u8): rt.u8 => { - const x218: rt.u8 = _2276; - const _6228: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6228.value, x218 ^ 1); - rt.refMutRelease(_6228); - return x218; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2277: rt.u8): rt.u8 => { - const x219: rt.u8 = _2277; - const _6229: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6229.value, x219 ^ 2); - rt.refMutRelease(_6229); - return x219; + } else if (_274 === 4) { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21090: rt.u8): rt.u8 => { + const x542: rt.u8 = _21090; + const _6329: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6329.value, x542 ^ 1); + rt.refMutRelease(_6329); + return x542; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21091: rt.u8): rt.u8 => { + const x543: rt.u8 = _21091; + const _6330: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6330.value, x543 ^ 2); + rt.refMutRelease(_6330); + return x543; }), [true, true]), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); - } else if (_79 === 5) { - rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2274: rt.u8): rt.u8 => { - const x216: rt.u8 = _2274; - const _6226: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6226.value, x216 ^ 1); - rt.refMutRelease(_6226); - return x216; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2275: rt.u8): rt.u8 => { - const x217: rt.u8 = _2275; - const _6227: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6227.value, x217 ^ 2); - rt.refMutRelease(_6227); - return x217; + } else if (_274 === 5) { + rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21088: rt.u8): rt.u8 => { + const x540: rt.u8 = _21088; + const _6327: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6327.value, x540 ^ 1); + rt.refMutRelease(_6327); + return x540; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21089: rt.u8): rt.u8 => { + const x541: rt.u8 = _21089; + const _6328: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6328.value, x541 ^ 2); + rt.refMutRelease(_6328); + return x541; }), [true, true]), n, undefined, true)) & 0xff); - } else if (_79 === 6) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2272: rt.u8): rt.u8 => { - const x214: rt.u8 = _2272; - const _6224: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6224.value, x214 ^ 1); - rt.refMutRelease(_6224); - return x214; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2273: rt.u8): rt.u8 => { - const x215: rt.u8 = _2273; - const _6225: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6225.value, x215 ^ 2); - rt.refMutRelease(_6225); - return x215; + } else if (_274 === 6) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21086: rt.u8): rt.u8 => { + const x538: rt.u8 = _21086; + const _6325: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6325.value, x538 ^ 1); + rt.refMutRelease(_6325); + return x538; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21087: rt.u8): rt.u8 => { + const x539: rt.u8 = _21087; + const _6326: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6326.value, x539 ^ 2); + rt.refMutRelease(_6326); + return x539; }), [true, true]), n)) & 0xff); } else { - const p: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2270: rt.u8): rt.u8 => { - const x212: rt.u8 = _2270; - const _6222: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6222.value, x212 ^ 1); - rt.refMutRelease(_6222); - return x212; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2271: rt.u8): rt.u8 => { - const x213: rt.u8 = _2271; - const _6223: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6223.value, x213 ^ 2); - rt.refMutRelease(_6223); - return x213; + const p: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_21084: rt.u8): rt.u8 => { + const x536: rt.u8 = _21084; + const _6323: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6323.value, x536 ^ 1); + rt.refMutRelease(_6323); + return x536; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_21085: rt.u8): rt.u8 => { + const x537: rt.u8 = _21085; + const _6324: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6324.value, x537 ^ 2); + rt.refMutRelease(_6324); + return x537; }), [true, true])); rt.byteVecPush(out, (rt.peekablePeek(p) !== undefined ? 1 : 0) ^ (rt.iterCount(p) & 0xff)); } @@ -2150,1196 +2492,2766 @@ export function zips(kind: rt.u8, data: rt.ByteSlice, out: rt.ByteVec): void { } else if (_28 === 1) { if (!other) { if ((kind & 16) === 0) { - const z3: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2259: rt.u8): rt.u8 => { - const x200: rt.u8 = _2259; - const _6218: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6218.value, x200 ^ 3); - rt.refMutRelease(_6218); - return x200; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2260: rt.u8): rt.u8 => { - const x201: rt.u8 = _2260; - const _6219: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6219.value, x201 ^ 4); - rt.refMutRelease(_6219); - return x201; + const _385: rt.usize = rt.usizeRem(rt.usizeDiv(data.length, 8), 5); + if (_385 === 0) { + const z7: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21073: rt.u8): rt.u8 => { + const x524: rt.u8 = _21073; + const _6319: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6319.value, x524 ^ 3); + rt.refMutRelease(_6319); + return x524; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21074: rt.u8): rt.u8 => { + const x525: rt.u8 = _21074; + const _6320: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6320.value, x525 ^ 4); + rt.refMutRelease(_6320); + return x525; + }), "len"); + const _402: rt.usize = rt.usizeRem(data.length, 8); + if (_402 === 0) { + rt.byteVecPush(out, rt.iterCount(z7) & 0xff); + } else if (_402 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z7), 238, (_21083: [rt.u8, rt.u8]): rt.u8 => { + return _21083[0] ^ _21083[1]; + })); + } else if (_402 === 2) { + rt.iterForEach(z7, (p67: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _401(p67)); + }); + } else if (_402 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z7, (_21082: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21082[0] as rt.u32, _21082[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_402 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z7, (_21081: [rt.u8, rt.u8]): rt.u8 => { + return _21081[0] ^ _21081[1]; + }), undefined, true)), undefined, true); + } else if (_402 === 5) { + rt.byteVecPush(out, rt.iterFold(z7, 0, (acc30: rt.u8, p66: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc30, 3) ^ _401(p66); + })); + } else if (_402 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(z7, (_21080: [rt.u8, rt.u8]): rt.u8 => { + return _21080[0] ^ _21080[1]; + }), (x532: rt.u8): boolean => { + return x532 === 0; + }) ? 1 : 0); + } else { + const z8: rt.Iter<[rt.u8, rt.u8]> = z7; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z8, (_21075: [rt.u8, rt.u8]): boolean => { + return _21075[0] > _21075[1]; + }), 238, (i36: rt.usize): rt.u8 => { + return i36 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z8, (_21076: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21076[0], 3) === 0; + }), 238, (_21077: [rt.u8, rt.u8]): rt.u8 => { + return _21077[0] ^ _21077[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z8, n), 238, (_21078: [rt.u8, rt.u8]): rt.u8 => { + return _21078[0] ^ _21078[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z8.next()), 238, (_21079: [rt.u8, rt.u8]): rt.u8 => { + return _21079[0] ^ _21079[1]; + })); + } + } else if (_385 === 1) { + const z9: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21062: rt.u8): rt.u8 => { + const x512: rt.u8 = _21062; + const _6315: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6315.value, x512 ^ 3); + rt.refMutRelease(_6315); + return x512; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21063: rt.u8): rt.u8 => { + const x513: rt.u8 = _21063; + const _6316: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6316.value, x513 ^ 4); + rt.refMutRelease(_6316); + return x513; + }), "len"); + const _453: rt.usize = rt.usizeRem(data.length, 8); + if (_453 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z9)) & 0xff); + } else if (_453 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z9)), 238, (_21072: [rt.u8, rt.u8]): rt.u8 => { + return _21072[0] ^ _21072[1]; + })); + } else if (_453 === 2) { + const _460: (a0: [rt.u8, rt.u8]) => undefined = (p65: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _452(p65)); + }; + rt.iterForEach(rt.iterBoxed(z9), _460); + } else if (_453 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z9), (_21071: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21071[0] as rt.u32, _21071[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_453 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z9), (_21070: [rt.u8, rt.u8]): rt.u8 => { + return _21070[0] ^ _21070[1]; + }), "next")), undefined, true); + } else if (_453 === 5) { + const _468: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc29: rt.u8, p64: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc29, 3) ^ _452(p64); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z9), 0, _468)); + } else if (_453 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z9), (_21069: [rt.u8, rt.u8]): rt.u8 => { + return _21069[0] ^ _21069[1]; + }), (x520: rt.u8): boolean => { + return x520 === 0; + }) ? 1 : 0); + } else { + const z10: rt.Iter<[rt.u8, rt.u8]> = z9; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z10), (_21064: [rt.u8, rt.u8]): boolean => { + return _21064[0] > _21064[1]; + }), 238, (i35: rt.usize): rt.u8 => { + return i35 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z10), (_21065: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21065[0], 3) === 0; + }), 238, (_21066: [rt.u8, rt.u8]): rt.u8 => { + return _21066[0] ^ _21066[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z10), n), 238, (_21067: [rt.u8, rt.u8]): rt.u8 => { + return _21067[0] ^ _21067[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z10.next()), 238, (_21068: [rt.u8, rt.u8]): rt.u8 => { + return _21068[0] ^ _21068[1]; + })); + } + } else if (_385 === 2) { + const z11: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21051: rt.u8): rt.u8 => { + const x500: rt.u8 = _21051; + const _6311: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6311.value, x500 ^ 3); + rt.refMutRelease(_6311); + return x500; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21052: rt.u8): rt.u8 => { + const x501: rt.u8 = _21052; + const _6312: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6312.value, x501 ^ 4); + rt.refMutRelease(_6312); + return x501; + }), "len"), n); + const _505: rt.usize = rt.usizeRem(data.length, 8); + if (_505 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z11)) & 0xff); + } else if (_505 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z11)), 238, (_21061: [rt.u8, rt.u8]): rt.u8 => { + return _21061[0] ^ _21061[1]; + })); + } else if (_505 === 2) { + const _512: (a0: [rt.u8, rt.u8]) => undefined = (p63: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _504(p63)); + }; + rt.iterForEach(rt.iterBoxed(z11), _512); + } else if (_505 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z11), (_21060: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21060[0] as rt.u32, _21060[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_505 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z11), (_21059: [rt.u8, rt.u8]): rt.u8 => { + return _21059[0] ^ _21059[1]; + }), "next")), undefined, true); + } else if (_505 === 5) { + const _520: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc28: rt.u8, p62: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc28, 3) ^ _504(p62); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z11), 0, _520)); + } else if (_505 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z11), (_21058: [rt.u8, rt.u8]): rt.u8 => { + return _21058[0] ^ _21058[1]; + }), (x508: rt.u8): boolean => { + return x508 === 0; + }) ? 1 : 0); + } else { + const z12: rt.Iter<[rt.u8, rt.u8]> = z11; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z12), (_21053: [rt.u8, rt.u8]): boolean => { + return _21053[0] > _21053[1]; + }), 238, (i34: rt.usize): rt.u8 => { + return i34 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z12), (_21054: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21054[0], 3) === 0; + }), 238, (_21055: [rt.u8, rt.u8]): rt.u8 => { + return _21055[0] ^ _21055[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z12), n), 238, (_21056: [rt.u8, rt.u8]): rt.u8 => { + return _21056[0] ^ _21056[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z12.next()), 238, (_21057: [rt.u8, rt.u8]): rt.u8 => { + return _21057[0] ^ _21057[1]; + })); + } + } else if (_385 === 3) { + const _544: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21040: rt.u8): rt.u8 => { + const x488: rt.u8 = _21040; + const _6307: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6307.value, x488 ^ 3); + rt.refMutRelease(_6307); + return x488; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21041: rt.u8): rt.u8 => { + const x489: rt.u8 = _21041; + const _6308: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6308.value, x489 ^ 4); + rt.refMutRelease(_6308); + return x489; + }), "len"); + const _557: rt.usize = rt.usizeRem(data.length, 8); + if (_557 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_544))) & 0xff); + } else if (_557 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_544))), 238, (_21050: [rt.u8, rt.u8]): rt.u8 => { + return _21050[0] ^ _21050[1]; + })); + } else if (_557 === 2) { + const _564: (a0: [rt.u8, rt.u8]) => undefined = (p61: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _556(p61)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_544)), _564); + } else if (_557 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_544)), (_21049: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21049[0] as rt.u32, _21049[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_557 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_544)), (_21048: [rt.u8, rt.u8]): rt.u8 => { + return _21048[0] ^ _21048[1]; + }), "next")), undefined, true); + } else if (_557 === 5) { + const _572: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc27: rt.u8, p60: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc27, 3) ^ _556(p60); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_544)), 0, _572)); + } else if (_557 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_544)), (_21047: [rt.u8, rt.u8]): rt.u8 => { + return _21047[0] ^ _21047[1]; + }), (x496: rt.u8): boolean => { + return x496 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_544), (_21042: [rt.u8, rt.u8]): boolean => { + return _21042[0] > _21042[1]; + }), 238, (i33: rt.usize): rt.u8 => { + return i33 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_544), (_21043: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21043[0], 3) === 0; + }), 238, (_21044: [rt.u8, rt.u8]): rt.u8 => { + return _21044[0] ^ _21044[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_544), n), 238, (_21045: [rt.u8, rt.u8]): rt.u8 => { + return _21045[0] ^ _21045[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_544.next()), 238, (_21046: [rt.u8, rt.u8]): rt.u8 => { + return _21046[0] ^ _21046[1]; + })); + } + } else { + const _591: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21029: rt.u8): rt.u8 => { + const x476: rt.u8 = _21029; + const _6303: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6303.value, x476 ^ 3); + rt.refMutRelease(_6303); + return x476; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21030: rt.u8): rt.u8 => { + const x477: rt.u8 = _21030; + const _6304: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6304.value, x477 ^ 4); + rt.refMutRelease(_6304); + return x477; + }), "len"), n); + const _605: rt.usize = rt.usizeRem(data.length, 8); + if (_605 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_591))) & 0xff); + } else if (_605 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_591))), 238, (_21039: [rt.u8, rt.u8]): rt.u8 => { + return _21039[0] ^ _21039[1]; + })); + } else if (_605 === 2) { + const _612: (a0: [rt.u8, rt.u8]) => undefined = (p59: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _604(p59)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_591)), _612); + } else if (_605 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_591)), (_21038: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21038[0] as rt.u32, _21038[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_605 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_591)), (_21037: [rt.u8, rt.u8]): rt.u8 => { + return _21037[0] ^ _21037[1]; + }), "next")), undefined, true); + } else if (_605 === 5) { + const _620: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc26: rt.u8, p58: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc26, 3) ^ _604(p58); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_591)), 0, _620)); + } else if (_605 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_591)), (_21036: [rt.u8, rt.u8]): rt.u8 => { + return _21036[0] ^ _21036[1]; + }), (x484: rt.u8): boolean => { + return x484 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_591), (_21031: [rt.u8, rt.u8]): boolean => { + return _21031[0] > _21031[1]; + }), 238, (i32: rt.usize): rt.u8 => { + return i32 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_591), (_21032: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21032[0], 3) === 0; + }), 238, (_21033: [rt.u8, rt.u8]): rt.u8 => { + return _21033[0] ^ _21033[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_591), n), 238, (_21034: [rt.u8, rt.u8]): rt.u8 => { + return _21034[0] ^ _21034[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_591.next()), 238, (_21035: [rt.u8, rt.u8]): rt.u8 => { + return _21035[0] ^ _21035[1]; + })); + } + } + } else { + const _638: rt.usize = rt.usizeRem(data.length, 8); + if (_638 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21026: rt.u8): rt.u8 => { + const x473: rt.u8 = _21026; + const _6301: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6301.value, x473 ^ 3); + rt.refMutRelease(_6301); + return x473; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21027: rt.u8): rt.u8 => { + const x474: rt.u8 = _21027; + const _6302: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6302.value, x474 ^ 4); + rt.refMutRelease(_6302); + return x474; + }), "len"), (_21028: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21028[0], 2) === 0; + })) & 0xff); + } else if (_638 === 1) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21023: rt.u8): rt.u8 => { + const x470: rt.u8 = _21023; + const _6299: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6299.value, x470 ^ 3); + rt.refMutRelease(_6299); + return x470; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21024: rt.u8): rt.u8 => { + const x471: rt.u8 = _21024; + const _6300: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6300.value, x471 ^ 4); + rt.refMutRelease(_6300); + return x471; + }), "len"), (_21025: [rt.u8, rt.u8]): rt.u8 | undefined => { + return rt.u8CheckedSub(_21025[0], _21025[1]); + })) & 0xff); + } else if (_638 === 2) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21020: rt.u8): rt.u8 => { + const x467: rt.u8 = _21020; + const _6297: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6297.value, x467 ^ 3); + rt.refMutRelease(_6297); + return x467; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21021: rt.u8): rt.u8 => { + const x468: rt.u8 = _21021; + const _6298: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6298.value, x468 ^ 4); + rt.refMutRelease(_6298); + return x468; + }), "len"), (_21022: [rt.u8, rt.u8]): boolean => { + return _21022[0] < 128; + })) & 0xff); + } else if (_638 === 3) { + rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21017: rt.u8): rt.u8 => { + const x465: rt.u8 = _21017; + const _6295: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6295.value, x465 ^ 3); + rt.refMutRelease(_6295); + return x465; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21018: rt.u8): rt.u8 => { + const x466: rt.u8 = _21018; + const _6296: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6296.value, x466 ^ 4); + rt.refMutRelease(_6296); + return x466; + }), "len")), (_21019: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { + return _21019[0] & 0xff; + })), 238)); + } else if (_638 === 4) { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21015: rt.u8): rt.u8 => { + const x463: rt.u8 = _21015; + const _6293: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6293.value, x463 ^ 3); + rt.refMutRelease(_6293); + return x463; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21016: rt.u8): rt.u8 => { + const x464: rt.u8 = _21016; + const _6294: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6294.value, x464 ^ 4); + rt.refMutRelease(_6294); + return x464; + }), "len"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); + } else if (_638 === 5) { + rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21013: rt.u8): rt.u8 => { + const x461: rt.u8 = _21013; + const _6291: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6291.value, x461 ^ 3); + rt.refMutRelease(_6291); + return x461; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21014: rt.u8): rt.u8 => { + const x462: rt.u8 = _21014; + const _6292: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6292.value, x462 ^ 4); + rt.refMutRelease(_6292); + return x462; + }), "len"), n)) & 0xff); + } else if (_638 === 6) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21011: rt.u8): rt.u8 => { + const x459: rt.u8 = _21011; + const _6289: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6289.value, x459 ^ 3); + rt.refMutRelease(_6289); + return x459; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21012: rt.u8): rt.u8 => { + const x460: rt.u8 = _21012; + const _6290: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6290.value, x460 ^ 4); + rt.refMutRelease(_6290); + return x460; + }), "len"), n)) & 0xff); + } else { + const p2: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_21009: rt.u8): rt.u8 => { + const x457: rt.u8 = _21009; + const _6287: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6287.value, x457 ^ 3); + rt.refMutRelease(_6287); + return x457; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_21010: rt.u8): rt.u8 => { + const x458: rt.u8 = _21010; + const _6288: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6288.value, x458 ^ 4); + rt.refMutRelease(_6288); + return x458; + }), "len")); + rt.byteVecPush(out, (rt.peekablePeek(p2) !== undefined ? 1 : 0) ^ (rt.iterCount(p2) & 0xff)); + } + } + } else if ((kind & 16) === 0) { + const _765: rt.usize = rt.usizeRem(rt.usizeDiv(data.length, 8), 5); + if (_765 === 0) { + const z13: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2998: rt.u8): rt.u8 => { + const x445: rt.u8 = _2998; + const _6283: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6283.value, x445 ^ 5); + rt.refMutRelease(_6283); + return x445; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2999: rt.u8): rt.u8 => { + const x446: rt.u8 = _2999; + const _6284: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6284.value, x446 ^ 6); + rt.refMutRelease(_6284); + return x446; }), "len"); - const _202: rt.usize = rt.usizeRem(data.length, 8); - if (_202 === 0) { - rt.byteVecPush(out, rt.iterCount(z3) & 0xff); - } else if (_202 === 1) { - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z3), 238, (_2269: [rt.u8, rt.u8]): rt.u8 => { - return _2269[0] ^ _2269[1]; + const _784: rt.usize = rt.usizeRem(data.length, 8); + if (_784 === 0) { + rt.byteVecPush(out, rt.iterCount(z13) & 0xff); + } else if (_784 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z13), 238, (_21008: [rt.u8, rt.u8]): rt.u8 => { + return _21008[0] ^ _21008[1]; })); - } else if (_202 === 2) { - rt.iterForEach(z3, (p19: [rt.u8, rt.u8]): undefined => { - rt.byteVecPush(out, _201(p19)); + } else if (_784 === 2) { + rt.iterForEach(z13, (p57: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _783(p57)); }); - } else if (_202 === 3) { - rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z3, (_2268: [rt.u8, rt.u8]): rt.u32 => { - return rt.u32Add(_2268[0] as rt.u32, _2268[1] as rt.u32); + } else if (_784 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z13, (_21007: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_21007[0] as rt.u32, _21007[1] as rt.u32); }), rt.u32Add, 0)).reverse()), undefined, true); - } else if (_202 === 4) { - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z3, (_2267: [rt.u8, rt.u8]): rt.u8 => { - return _2267[0] ^ _2267[1]; + } else if (_784 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z13, (_21006: [rt.u8, rt.u8]): rt.u8 => { + return _21006[0] ^ _21006[1]; }), undefined, true)), undefined, true); - } else if (_202 === 5) { - rt.byteVecPush(out, rt.iterFold(z3, 0, (acc6: rt.u8, p18: [rt.u8, rt.u8]): rt.u8 => { - return rt.u8WrappingMul(acc6, 3) ^ _201(p18); + } else if (_784 === 5) { + rt.byteVecPush(out, rt.iterFold(z13, 0, (acc25: rt.u8, p56: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc25, 3) ^ _783(p56); })); - } else if (_202 === 6) { - rt.byteVecPush(out, rt.iterAny(rt.iterMap(z3, (_2266: [rt.u8, rt.u8]): rt.u8 => { - return _2266[0] ^ _2266[1]; - }), (x208: rt.u8): boolean => { - return x208 === 0; + } else if (_784 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(z13, (_21005: [rt.u8, rt.u8]): rt.u8 => { + return _21005[0] ^ _21005[1]; + }), (x453: rt.u8): boolean => { + return x453 === 0; }) ? 1 : 0); } else { - const z4: rt.Iter<[rt.u8, rt.u8]> = z3; - rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z4, (_2261: [rt.u8, rt.u8]): boolean => { - return _2261[0] > _2261[1]; - }), 238, (i12: rt.usize): rt.u8 => { - return i12 & 0xff; + const z14: rt.Iter<[rt.u8, rt.u8]> = z13; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z14, (_21000: [rt.u8, rt.u8]): boolean => { + return _21000[0] > _21000[1]; + }), 238, (i30: rt.usize): rt.u8 => { + return i30 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z14, (_21001: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_21001[0], 3) === 0; + }), 238, (_21002: [rt.u8, rt.u8]): rt.u8 => { + return _21002[0] ^ _21002[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z14, n), 238, (_21003: [rt.u8, rt.u8]): rt.u8 => { + return _21003[0] ^ _21003[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z14.next()), 238, (_21004: [rt.u8, rt.u8]): rt.u8 => { + return _21004[0] ^ _21004[1]; + })); + } + } else if (_765 === 1) { + const z15: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2987: rt.u8): rt.u8 => { + const x433: rt.u8 = _2987; + const _6279: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6279.value, x433 ^ 5); + rt.refMutRelease(_6279); + return x433; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2988: rt.u8): rt.u8 => { + const x434: rt.u8 = _2988; + const _6280: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6280.value, x434 ^ 6); + rt.refMutRelease(_6280); + return x434; + }), "len"); + const _837: rt.usize = rt.usizeRem(data.length, 8); + if (_837 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z15)) & 0xff); + } else if (_837 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z15)), 238, (_2997: [rt.u8, rt.u8]): rt.u8 => { + return _2997[0] ^ _2997[1]; + })); + } else if (_837 === 2) { + const _844: (a0: [rt.u8, rt.u8]) => undefined = (p55: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _836(p55)); + }; + rt.iterForEach(rt.iterBoxed(z15), _844); + } else if (_837 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z15), (_2996: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2996[0] as rt.u32, _2996[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_837 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z15), (_2995: [rt.u8, rt.u8]): rt.u8 => { + return _2995[0] ^ _2995[1]; + }), "next")), undefined, true); + } else if (_837 === 5) { + const _852: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc24: rt.u8, p54: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc24, 3) ^ _836(p54); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z15), 0, _852)); + } else if (_837 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z15), (_2994: [rt.u8, rt.u8]): rt.u8 => { + return _2994[0] ^ _2994[1]; + }), (x441: rt.u8): boolean => { + return x441 === 0; + }) ? 1 : 0); + } else { + const z16: rt.Iter<[rt.u8, rt.u8]> = z15; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z16), (_2989: [rt.u8, rt.u8]): boolean => { + return _2989[0] > _2989[1]; + }), 238, (i29: rt.usize): rt.u8 => { + return i29 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z16), (_2990: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2990[0], 3) === 0; + }), 238, (_2991: [rt.u8, rt.u8]): rt.u8 => { + return _2991[0] ^ _2991[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z16), n), 238, (_2992: [rt.u8, rt.u8]): rt.u8 => { + return _2992[0] ^ _2992[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z16.next()), 238, (_2993: [rt.u8, rt.u8]): rt.u8 => { + return _2993[0] ^ _2993[1]; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z4, (_2262: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2262[0], 3) === 0; - }), 238, (_2263: [rt.u8, rt.u8]): rt.u8 => { - return _2263[0] ^ _2263[1]; + } + } else if (_765 === 2) { + const z17: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2976: rt.u8): rt.u8 => { + const x421: rt.u8 = _2976; + const _6275: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6275.value, x421 ^ 5); + rt.refMutRelease(_6275); + return x421; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2977: rt.u8): rt.u8 => { + const x422: rt.u8 = _2977; + const _6276: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6276.value, x422 ^ 6); + rt.refMutRelease(_6276); + return x422; + }), "len"), n); + const _891: rt.usize = rt.usizeRem(data.length, 8); + if (_891 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z17)) & 0xff); + } else if (_891 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z17)), 238, (_2986: [rt.u8, rt.u8]): rt.u8 => { + return _2986[0] ^ _2986[1]; + })); + } else if (_891 === 2) { + const _898: (a0: [rt.u8, rt.u8]) => undefined = (p53: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _890(p53)); + }; + rt.iterForEach(rt.iterBoxed(z17), _898); + } else if (_891 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z17), (_2985: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2985[0] as rt.u32, _2985[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_891 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z17), (_2984: [rt.u8, rt.u8]): rt.u8 => { + return _2984[0] ^ _2984[1]; + }), "next")), undefined, true); + } else if (_891 === 5) { + const _906: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc23: rt.u8, p52: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc23, 3) ^ _890(p52); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z17), 0, _906)); + } else if (_891 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z17), (_2983: [rt.u8, rt.u8]): rt.u8 => { + return _2983[0] ^ _2983[1]; + }), (x429: rt.u8): boolean => { + return x429 === 0; + }) ? 1 : 0); + } else { + const z18: rt.Iter<[rt.u8, rt.u8]> = z17; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z18), (_2978: [rt.u8, rt.u8]): boolean => { + return _2978[0] > _2978[1]; + }), 238, (i28: rt.usize): rt.u8 => { + return i28 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z18), (_2979: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2979[0], 3) === 0; + }), 238, (_2980: [rt.u8, rt.u8]): rt.u8 => { + return _2980[0] ^ _2980[1]; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z4, n), 238, (_2264: [rt.u8, rt.u8]): rt.u8 => { - return _2264[0] ^ _2264[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z18), n), 238, (_2981: [rt.u8, rt.u8]): rt.u8 => { + return _2981[0] ^ _2981[1]; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z4.next()), 238, (_2265: [rt.u8, rt.u8]): rt.u8 => { - return _2265[0] ^ _2265[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z18.next()), 238, (_2982: [rt.u8, rt.u8]): rt.u8 => { + return _2982[0] ^ _2982[1]; + })); + } + } else if (_765 === 3) { + const _930: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2965: rt.u8): rt.u8 => { + const x409: rt.u8 = _2965; + const _6271: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6271.value, x409 ^ 5); + rt.refMutRelease(_6271); + return x409; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2966: rt.u8): rt.u8 => { + const x410: rt.u8 = _2966; + const _6272: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6272.value, x410 ^ 6); + rt.refMutRelease(_6272); + return x410; + }), "len"); + const _945: rt.usize = rt.usizeRem(data.length, 8); + if (_945 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_930))) & 0xff); + } else if (_945 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_930))), 238, (_2975: [rt.u8, rt.u8]): rt.u8 => { + return _2975[0] ^ _2975[1]; + })); + } else if (_945 === 2) { + const _952: (a0: [rt.u8, rt.u8]) => undefined = (p51: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _944(p51)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_930)), _952); + } else if (_945 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_930)), (_2974: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2974[0] as rt.u32, _2974[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_945 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_930)), (_2973: [rt.u8, rt.u8]): rt.u8 => { + return _2973[0] ^ _2973[1]; + }), "next")), undefined, true); + } else if (_945 === 5) { + const _960: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc22: rt.u8, p50: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc22, 3) ^ _944(p50); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_930)), 0, _960)); + } else if (_945 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_930)), (_2972: [rt.u8, rt.u8]): rt.u8 => { + return _2972[0] ^ _2972[1]; + }), (x417: rt.u8): boolean => { + return x417 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_930), (_2967: [rt.u8, rt.u8]): boolean => { + return _2967[0] > _2967[1]; + }), 238, (i27: rt.usize): rt.u8 => { + return i27 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_930), (_2968: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2968[0], 3) === 0; + }), 238, (_2969: [rt.u8, rt.u8]): rt.u8 => { + return _2969[0] ^ _2969[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_930), n), 238, (_2970: [rt.u8, rt.u8]): rt.u8 => { + return _2970[0] ^ _2970[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_930.next()), 238, (_2971: [rt.u8, rt.u8]): rt.u8 => { + return _2971[0] ^ _2971[1]; })); } } else { - const _240: rt.usize = rt.usizeRem(data.length, 8); - if (_240 === 0) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2256: rt.u8): rt.u8 => { - const x197: rt.u8 = _2256; - const _6216: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6216.value, x197 ^ 3); - rt.refMutRelease(_6216); - return x197; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2257: rt.u8): rt.u8 => { - const x198: rt.u8 = _2257; - const _6217: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6217.value, x198 ^ 4); - rt.refMutRelease(_6217); - return x198; - }), "len"), (_2258: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2258[0], 2) === 0; + const _979: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2954: rt.u8): rt.u8 => { + const x397: rt.u8 = _2954; + const _6267: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6267.value, x397 ^ 5); + rt.refMutRelease(_6267); + return x397; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2955: rt.u8): rt.u8 => { + const x398: rt.u8 = _2955; + const _6268: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6268.value, x398 ^ 6); + rt.refMutRelease(_6268); + return x398; + }), "len"), n); + const _995: rt.usize = rt.usizeRem(data.length, 8); + if (_995 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_979))) & 0xff); + } else if (_995 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_979))), 238, (_2964: [rt.u8, rt.u8]): rt.u8 => { + return _2964[0] ^ _2964[1]; + })); + } else if (_995 === 2) { + const _1002: (a0: [rt.u8, rt.u8]) => undefined = (p49: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _994(p49)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_979)), _1002); + } else if (_995 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_979)), (_2963: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2963[0] as rt.u32, _2963[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_995 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_979)), (_2962: [rt.u8, rt.u8]): rt.u8 => { + return _2962[0] ^ _2962[1]; + }), "next")), undefined, true); + } else if (_995 === 5) { + const _1010: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc21: rt.u8, p48: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc21, 3) ^ _994(p48); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_979)), 0, _1010)); + } else if (_995 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_979)), (_2961: [rt.u8, rt.u8]): rt.u8 => { + return _2961[0] ^ _2961[1]; + }), (x405: rt.u8): boolean => { + return x405 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_979), (_2956: [rt.u8, rt.u8]): boolean => { + return _2956[0] > _2956[1]; + }), 238, (i26: rt.usize): rt.u8 => { + return i26 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_979), (_2957: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2957[0], 3) === 0; + }), 238, (_2958: [rt.u8, rt.u8]): rt.u8 => { + return _2958[0] ^ _2958[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_979), n), 238, (_2959: [rt.u8, rt.u8]): rt.u8 => { + return _2959[0] ^ _2959[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_979.next()), 238, (_2960: [rt.u8, rt.u8]): rt.u8 => { + return _2960[0] ^ _2960[1]; + })); + } + } + } else { + const _1028: rt.usize = rt.usizeRem(data.length, 8); + if (_1028 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2951: rt.u8): rt.u8 => { + const x394: rt.u8 = _2951; + const _6265: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6265.value, x394 ^ 5); + rt.refMutRelease(_6265); + return x394; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2952: rt.u8): rt.u8 => { + const x395: rt.u8 = _2952; + const _6266: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6266.value, x395 ^ 6); + rt.refMutRelease(_6266); + return x395; + }), "len"), (_2953: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2953[0], 2) === 0; + })) & 0xff); + } else if (_1028 === 1) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2948: rt.u8): rt.u8 => { + const x391: rt.u8 = _2948; + const _6263: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6263.value, x391 ^ 5); + rt.refMutRelease(_6263); + return x391; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2949: rt.u8): rt.u8 => { + const x392: rt.u8 = _2949; + const _6264: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6264.value, x392 ^ 6); + rt.refMutRelease(_6264); + return x392; + }), "len"), (_2950: [rt.u8, rt.u8]): rt.u8 | undefined => { + return rt.u8CheckedSub(_2950[0], _2950[1]); + })) & 0xff); + } else if (_1028 === 2) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2945: rt.u8): rt.u8 => { + const x388: rt.u8 = _2945; + const _6261: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6261.value, x388 ^ 5); + rt.refMutRelease(_6261); + return x388; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2946: rt.u8): rt.u8 => { + const x389: rt.u8 = _2946; + const _6262: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6262.value, x389 ^ 6); + rt.refMutRelease(_6262); + return x389; + }), "len"), (_2947: [rt.u8, rt.u8]): boolean => { + return _2947[0] < 128; + })) & 0xff); + } else if (_1028 === 3) { + rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2942: rt.u8): rt.u8 => { + const x386: rt.u8 = _2942; + const _6259: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6259.value, x386 ^ 5); + rt.refMutRelease(_6259); + return x386; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2943: rt.u8): rt.u8 => { + const x387: rt.u8 = _2943; + const _6260: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6260.value, x387 ^ 6); + rt.refMutRelease(_6260); + return x387; + }), "len")), (_2944: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { + return _2944[0] & 0xff; + })), 238)); + } else if (_1028 === 4) { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2940: rt.u8): rt.u8 => { + const x384: rt.u8 = _2940; + const _6257: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6257.value, x384 ^ 5); + rt.refMutRelease(_6257); + return x384; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2941: rt.u8): rt.u8 => { + const x385: rt.u8 = _2941; + const _6258: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6258.value, x385 ^ 6); + rt.refMutRelease(_6258); + return x385; + }), "len"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); + } else if (_1028 === 5) { + rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2938: rt.u8): rt.u8 => { + const x382: rt.u8 = _2938; + const _6255: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6255.value, x382 ^ 5); + rt.refMutRelease(_6255); + return x382; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2939: rt.u8): rt.u8 => { + const x383: rt.u8 = _2939; + const _6256: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6256.value, x383 ^ 6); + rt.refMutRelease(_6256); + return x383; + }), "len"), n)) & 0xff); + } else if (_1028 === 6) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2936: rt.u8): rt.u8 => { + const x380: rt.u8 = _2936; + const _6253: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6253.value, x380 ^ 5); + rt.refMutRelease(_6253); + return x380; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2937: rt.u8): rt.u8 => { + const x381: rt.u8 = _2937; + const _6254: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6254.value, x381 ^ 6); + rt.refMutRelease(_6254); + return x381; + }), "len"), n)) & 0xff); + } else { + const p3: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2934: rt.u8): rt.u8 => { + const x378: rt.u8 = _2934; + const _6251: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6251.value, x378 ^ 5); + rt.refMutRelease(_6251); + return x378; + }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2935: rt.u8): rt.u8 => { + const x379: rt.u8 = _2935; + const _6252: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6252.value, x379 ^ 6); + rt.refMutRelease(_6252); + return x379; + }), "len")); + rt.byteVecPush(out, (rt.peekablePeek(p3) !== undefined ? 1 : 0) ^ (rt.iterCount(p3) & 0xff)); + } + } + } else if (_28 === 2) { + if (!other) { + if ((kind & 16) === 0) { + const _1171: rt.usize = rt.usizeRem(rt.usizeDiv(data.length, 8), 5); + if (_1171 === 0) { + const z19: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x366: rt.u8): rt.u8 => { + const _6247: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6247.value, x366 ^ 7); + rt.refMutRelease(_6247); + return x366; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x367: rt.u8): rt.u8 => { + const _6248: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6248.value, x367 ^ 8); + rt.refMutRelease(_6248); + return x367; + }), "index"); + const _1188: rt.usize = rt.usizeRem(data.length, 8); + if (_1188 === 0) { + rt.byteVecPush(out, rt.iterCount(z19) & 0xff); + } else if (_1188 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z19), 238, (_2933: [rt.u8, rt.u8]): rt.u8 => { + return _2933[0] ^ _2933[1]; + })); + } else if (_1188 === 2) { + rt.iterForEach(z19, (p47: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1187(p47)); + }); + } else if (_1188 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z19, (_2932: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2932[0] as rt.u32, _2932[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1188 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z19, (_2931: [rt.u8, rt.u8]): rt.u8 => { + return _2931[0] ^ _2931[1]; + }), "index", true, 1)), undefined, true); + } else if (_1188 === 5) { + rt.byteVecPush(out, rt.iterFold(z19, 0, (acc20: rt.u8, p46: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc20, 3) ^ _1187(p46); + })); + } else if (_1188 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(z19, (_2930: [rt.u8, rt.u8]): rt.u8 => { + return _2930[0] ^ _2930[1]; + }), (x374: rt.u8): boolean => { + return x374 === 0; + }) ? 1 : 0); + } else { + const z20: rt.Iter<[rt.u8, rt.u8]> = z19; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z20, (_2925: [rt.u8, rt.u8]): boolean => { + return _2925[0] > _2925[1]; + }), 238, (i24: rt.usize): rt.u8 => { + return i24 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z20, (_2926: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2926[0], 3) === 0; + }), 238, (_2927: [rt.u8, rt.u8]): rt.u8 => { + return _2927[0] ^ _2927[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z20, n), 238, (_2928: [rt.u8, rt.u8]): rt.u8 => { + return _2928[0] ^ _2928[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z20.next()), 238, (_2929: [rt.u8, rt.u8]): rt.u8 => { + return _2929[0] ^ _2929[1]; + })); + } + } else if (_1171 === 1) { + const z21: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x354: rt.u8): rt.u8 => { + const _6243: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6243.value, x354 ^ 7); + rt.refMutRelease(_6243); + return x354; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x355: rt.u8): rt.u8 => { + const _6244: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6244.value, x355 ^ 8); + rt.refMutRelease(_6244); + return x355; + }), "index"); + const _1239: rt.usize = rt.usizeRem(data.length, 8); + if (_1239 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z21)) & 0xff); + } else if (_1239 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z21)), 238, (_2924: [rt.u8, rt.u8]): rt.u8 => { + return _2924[0] ^ _2924[1]; + })); + } else if (_1239 === 2) { + const _1246: (a0: [rt.u8, rt.u8]) => undefined = (p45: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1238(p45)); + }; + rt.iterForEach(rt.iterBoxed(z21), _1246); + } else if (_1239 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z21), (_2923: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2923[0] as rt.u32, _2923[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1239 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z21), (_2922: [rt.u8, rt.u8]): rt.u8 => { + return _2922[0] ^ _2922[1]; + }), "next")), undefined, true); + } else if (_1239 === 5) { + const _1254: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc19: rt.u8, p44: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc19, 3) ^ _1238(p44); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z21), 0, _1254)); + } else if (_1239 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z21), (_2921: [rt.u8, rt.u8]): rt.u8 => { + return _2921[0] ^ _2921[1]; + }), (x362: rt.u8): boolean => { + return x362 === 0; + }) ? 1 : 0); + } else { + const z22: rt.Iter<[rt.u8, rt.u8]> = z21; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z22), (_2916: [rt.u8, rt.u8]): boolean => { + return _2916[0] > _2916[1]; + }), 238, (i23: rt.usize): rt.u8 => { + return i23 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z22), (_2917: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2917[0], 3) === 0; + }), 238, (_2918: [rt.u8, rt.u8]): rt.u8 => { + return _2918[0] ^ _2918[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z22), n), 238, (_2919: [rt.u8, rt.u8]): rt.u8 => { + return _2919[0] ^ _2919[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z22.next()), 238, (_2920: [rt.u8, rt.u8]): rt.u8 => { + return _2920[0] ^ _2920[1]; + })); + } + } else if (_1171 === 2) { + const z23: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x342: rt.u8): rt.u8 => { + const _6239: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6239.value, x342 ^ 7); + rt.refMutRelease(_6239); + return x342; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x343: rt.u8): rt.u8 => { + const _6240: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6240.value, x343 ^ 8); + rt.refMutRelease(_6240); + return x343; + }), "index"), n); + const _1291: rt.usize = rt.usizeRem(data.length, 8); + if (_1291 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z23)) & 0xff); + } else if (_1291 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z23)), 238, (_2915: [rt.u8, rt.u8]): rt.u8 => { + return _2915[0] ^ _2915[1]; + })); + } else if (_1291 === 2) { + const _1298: (a0: [rt.u8, rt.u8]) => undefined = (p43: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1290(p43)); + }; + rt.iterForEach(rt.iterBoxed(z23), _1298); + } else if (_1291 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z23), (_2914: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2914[0] as rt.u32, _2914[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1291 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z23), (_2913: [rt.u8, rt.u8]): rt.u8 => { + return _2913[0] ^ _2913[1]; + }), "next")), undefined, true); + } else if (_1291 === 5) { + const _1306: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc18: rt.u8, p42: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc18, 3) ^ _1290(p42); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z23), 0, _1306)); + } else if (_1291 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z23), (_2912: [rt.u8, rt.u8]): rt.u8 => { + return _2912[0] ^ _2912[1]; + }), (x350: rt.u8): boolean => { + return x350 === 0; + }) ? 1 : 0); + } else { + const z24: rt.Iter<[rt.u8, rt.u8]> = z23; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z24), (_2907: [rt.u8, rt.u8]): boolean => { + return _2907[0] > _2907[1]; + }), 238, (i22: rt.usize): rt.u8 => { + return i22 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z24), (_2908: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2908[0], 3) === 0; + }), 238, (_2909: [rt.u8, rt.u8]): rt.u8 => { + return _2909[0] ^ _2909[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z24), n), 238, (_2910: [rt.u8, rt.u8]): rt.u8 => { + return _2910[0] ^ _2910[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z24.next()), 238, (_2911: [rt.u8, rt.u8]): rt.u8 => { + return _2911[0] ^ _2911[1]; + })); + } + } else if (_1171 === 3) { + const _1330: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x330: rt.u8): rt.u8 => { + const _6235: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6235.value, x330 ^ 7); + rt.refMutRelease(_6235); + return x330; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x331: rt.u8): rt.u8 => { + const _6236: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6236.value, x331 ^ 8); + rt.refMutRelease(_6236); + return x331; + }), "index"); + const _1343: rt.usize = rt.usizeRem(data.length, 8); + if (_1343 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_1330))) & 0xff); + } else if (_1343 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_1330))), 238, (_2906: [rt.u8, rt.u8]): rt.u8 => { + return _2906[0] ^ _2906[1]; + })); + } else if (_1343 === 2) { + const _1350: (a0: [rt.u8, rt.u8]) => undefined = (p41: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1342(p41)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_1330)), _1350); + } else if (_1343 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1330)), (_2905: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2905[0] as rt.u32, _2905[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1343 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1330)), (_2904: [rt.u8, rt.u8]): rt.u8 => { + return _2904[0] ^ _2904[1]; + }), "next")), undefined, true); + } else if (_1343 === 5) { + const _1358: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc17: rt.u8, p40: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc17, 3) ^ _1342(p40); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_1330)), 0, _1358)); + } else if (_1343 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1330)), (_2903: [rt.u8, rt.u8]): rt.u8 => { + return _2903[0] ^ _2903[1]; + }), (x338: rt.u8): boolean => { + return x338 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_1330), (_2898: [rt.u8, rt.u8]): boolean => { + return _2898[0] > _2898[1]; + }), 238, (i21: rt.usize): rt.u8 => { + return i21 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_1330), (_2899: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2899[0], 3) === 0; + }), 238, (_2900: [rt.u8, rt.u8]): rt.u8 => { + return _2900[0] ^ _2900[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_1330), n), 238, (_2901: [rt.u8, rt.u8]): rt.u8 => { + return _2901[0] ^ _2901[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_1330.next()), 238, (_2902: [rt.u8, rt.u8]): rt.u8 => { + return _2902[0] ^ _2902[1]; + })); + } + } else { + const _1377: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x318: rt.u8): rt.u8 => { + const _6231: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6231.value, x318 ^ 7); + rt.refMutRelease(_6231); + return x318; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x319: rt.u8): rt.u8 => { + const _6232: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6232.value, x319 ^ 8); + rt.refMutRelease(_6232); + return x319; + }), "index"), n); + const _1391: rt.usize = rt.usizeRem(data.length, 8); + if (_1391 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_1377))) & 0xff); + } else if (_1391 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_1377))), 238, (_2897: [rt.u8, rt.u8]): rt.u8 => { + return _2897[0] ^ _2897[1]; + })); + } else if (_1391 === 2) { + const _1398: (a0: [rt.u8, rt.u8]) => undefined = (p39: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1390(p39)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_1377)), _1398); + } else if (_1391 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1377)), (_2896: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2896[0] as rt.u32, _2896[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1391 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1377)), (_2895: [rt.u8, rt.u8]): rt.u8 => { + return _2895[0] ^ _2895[1]; + }), "next")), undefined, true); + } else if (_1391 === 5) { + const _1406: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc16: rt.u8, p38: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc16, 3) ^ _1390(p38); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_1377)), 0, _1406)); + } else if (_1391 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1377)), (_2894: [rt.u8, rt.u8]): rt.u8 => { + return _2894[0] ^ _2894[1]; + }), (x326: rt.u8): boolean => { + return x326 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_1377), (_2889: [rt.u8, rt.u8]): boolean => { + return _2889[0] > _2889[1]; + }), 238, (i20: rt.usize): rt.u8 => { + return i20 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_1377), (_2890: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2890[0], 3) === 0; + }), 238, (_2891: [rt.u8, rt.u8]): rt.u8 => { + return _2891[0] ^ _2891[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_1377), n), 238, (_2892: [rt.u8, rt.u8]): rt.u8 => { + return _2892[0] ^ _2892[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_1377.next()), 238, (_2893: [rt.u8, rt.u8]): rt.u8 => { + return _2893[0] ^ _2893[1]; + })); + } + } + } else { + const _1424: rt.usize = rt.usizeRem(data.length, 8); + if (_1424 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x315: rt.u8): rt.u8 => { + const _6229: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6229.value, x315 ^ 7); + rt.refMutRelease(_6229); + return x315; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x316: rt.u8): rt.u8 => { + const _6230: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6230.value, x316 ^ 8); + rt.refMutRelease(_6230); + return x316; + }), "index"), (_2888: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2888[0], 2) === 0; })) & 0xff); - } else if (_240 === 1) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2253: rt.u8): rt.u8 => { - const x194: rt.u8 = _2253; - const _6214: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6214.value, x194 ^ 3); - rt.refMutRelease(_6214); - return x194; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2254: rt.u8): rt.u8 => { - const x195: rt.u8 = _2254; - const _6215: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6215.value, x195 ^ 4); - rt.refMutRelease(_6215); - return x195; - }), "len"), (_2255: [rt.u8, rt.u8]): rt.u8 | undefined => { - return rt.u8CheckedSub(_2255[0], _2255[1]); + } else if (_1424 === 1) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x312: rt.u8): rt.u8 => { + const _6227: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6227.value, x312 ^ 7); + rt.refMutRelease(_6227); + return x312; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x313: rt.u8): rt.u8 => { + const _6228: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6228.value, x313 ^ 8); + rt.refMutRelease(_6228); + return x313; + }), "index"), (_2887: [rt.u8, rt.u8]): rt.u8 | undefined => { + return rt.u8CheckedSub(_2887[0], _2887[1]); })) & 0xff); - } else if (_240 === 2) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2250: rt.u8): rt.u8 => { - const x191: rt.u8 = _2250; - const _6212: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6212.value, x191 ^ 3); - rt.refMutRelease(_6212); - return x191; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2251: rt.u8): rt.u8 => { - const x192: rt.u8 = _2251; - const _6213: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6213.value, x192 ^ 4); - rt.refMutRelease(_6213); - return x192; - }), "len"), (_2252: [rt.u8, rt.u8]): boolean => { - return _2252[0] < 128; + } else if (_1424 === 2) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x309: rt.u8): rt.u8 => { + const _6225: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6225.value, x309 ^ 7); + rt.refMutRelease(_6225); + return x309; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x310: rt.u8): rt.u8 => { + const _6226: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6226.value, x310 ^ 8); + rt.refMutRelease(_6226); + return x310; + }), "index"), (_2886: [rt.u8, rt.u8]): boolean => { + return _2886[0] < 128; })) & 0xff); - } else if (_240 === 3) { - rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2247: rt.u8): rt.u8 => { - const x189: rt.u8 = _2247; - const _6210: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6210.value, x189 ^ 3); - rt.refMutRelease(_6210); - return x189; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2248: rt.u8): rt.u8 => { - const x190: rt.u8 = _2248; - const _6211: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6211.value, x190 ^ 4); - rt.refMutRelease(_6211); - return x190; - }), "len")), (_2249: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { - return _2249[0] & 0xff; + } else if (_1424 === 3) { + rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x307: rt.u8): rt.u8 => { + const _6223: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6223.value, x307 ^ 7); + rt.refMutRelease(_6223); + return x307; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x308: rt.u8): rt.u8 => { + const _6224: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6224.value, x308 ^ 8); + rt.refMutRelease(_6224); + return x308; + }), "index")), (_2885: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { + return _2885[0] & 0xff; })), 238)); - } else if (_240 === 4) { - rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2245: rt.u8): rt.u8 => { - const x187: rt.u8 = _2245; - const _6208: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6208.value, x187 ^ 3); - rt.refMutRelease(_6208); - return x187; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2246: rt.u8): rt.u8 => { - const x188: rt.u8 = _2246; - const _6209: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6209.value, x188 ^ 4); - rt.refMutRelease(_6209); - return x188; - }), "len"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); - } else if (_240 === 5) { - rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2243: rt.u8): rt.u8 => { - const x185: rt.u8 = _2243; - const _6206: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6206.value, x185 ^ 3); - rt.refMutRelease(_6206); - return x185; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2244: rt.u8): rt.u8 => { - const x186: rt.u8 = _2244; - const _6207: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6207.value, x186 ^ 4); - rt.refMutRelease(_6207); - return x186; - }), "len"), n)) & 0xff); - } else if (_240 === 6) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2241: rt.u8): rt.u8 => { - const x183: rt.u8 = _2241; - const _6204: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6204.value, x183 ^ 3); - rt.refMutRelease(_6204); - return x183; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2242: rt.u8): rt.u8 => { - const x184: rt.u8 = _2242; - const _6205: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6205.value, x184 ^ 4); - rt.refMutRelease(_6205); - return x184; - }), "len"), n)) & 0xff); + } else if (_1424 === 4) { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x305: rt.u8): rt.u8 => { + const _6221: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6221.value, x305 ^ 7); + rt.refMutRelease(_6221); + return x305; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x306: rt.u8): rt.u8 => { + const _6222: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6222.value, x306 ^ 8); + rt.refMutRelease(_6222); + return x306; + }), "index"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); + } else if (_1424 === 5) { + rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x303: rt.u8): rt.u8 => { + const _6219: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6219.value, x303 ^ 7); + rt.refMutRelease(_6219); + return x303; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x304: rt.u8): rt.u8 => { + const _6220: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6220.value, x304 ^ 8); + rt.refMutRelease(_6220); + return x304; + }), "index"), n)) & 0xff); + } else if (_1424 === 6) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x301: rt.u8): rt.u8 => { + const _6217: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6217.value, x301 ^ 7); + rt.refMutRelease(_6217); + return x301; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x302: rt.u8): rt.u8 => { + const _6218: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6218.value, x302 ^ 8); + rt.refMutRelease(_6218); + return x302; + }), "index"), n)) & 0xff); } else { - const p2: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2239: rt.u8): rt.u8 => { - const x181: rt.u8 = _2239; - const _6202: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6202.value, x181 ^ 3); - rt.refMutRelease(_6202); - return x181; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2240: rt.u8): rt.u8 => { - const x182: rt.u8 = _2240; - const _6203: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6203.value, x182 ^ 4); - rt.refMutRelease(_6203); - return x182; - }), "len")); - rt.byteVecPush(out, (rt.peekablePeek(p2) !== undefined ? 1 : 0) ^ (rt.iterCount(p2) & 0xff)); + const p4: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x299: rt.u8): rt.u8 => { + const _6215: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6215.value, x299 ^ 7); + rt.refMutRelease(_6215); + return x299; + }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x300: rt.u8): rt.u8 => { + const _6216: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6216.value, x300 ^ 8); + rt.refMutRelease(_6216); + return x300; + }), "index")); + rt.byteVecPush(out, (rt.peekablePeek(p4) !== undefined ? 1 : 0) ^ (rt.iterCount(p4) & 0xff)); } } } else if ((kind & 16) === 0) { - const z5: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2228: rt.u8): rt.u8 => { - const x169: rt.u8 = _2228; - const _6198: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6198.value, x169 ^ 5); - rt.refMutRelease(_6198); - return x169; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2229: rt.u8): rt.u8 => { - const x170: rt.u8 = _2229; - const _6199: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6199.value, x170 ^ 6); - rt.refMutRelease(_6199); - return x170; - }), "len"); - const _381: rt.usize = rt.usizeRem(data.length, 8); - if (_381 === 0) { - rt.byteVecPush(out, rt.iterCount(z5) & 0xff); - } else if (_381 === 1) { - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z5), 238, (_2238: [rt.u8, rt.u8]): rt.u8 => { - return _2238[0] ^ _2238[1]; - })); - } else if (_381 === 2) { - rt.iterForEach(z5, (p17: [rt.u8, rt.u8]): undefined => { - rt.byteVecPush(out, _380(p17)); - }); - } else if (_381 === 3) { - rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z5, (_2237: [rt.u8, rt.u8]): rt.u32 => { - return rt.u32Add(_2237[0] as rt.u32, _2237[1] as rt.u32); - }), rt.u32Add, 0)).reverse()), undefined, true); - } else if (_381 === 4) { - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z5, (_2236: [rt.u8, rt.u8]): rt.u8 => { - return _2236[0] ^ _2236[1]; - }), undefined, true)), undefined, true); - } else if (_381 === 5) { - rt.byteVecPush(out, rt.iterFold(z5, 0, (acc5: rt.u8, p16: [rt.u8, rt.u8]): rt.u8 => { - return rt.u8WrappingMul(acc5, 3) ^ _380(p16); - })); - } else if (_381 === 6) { - rt.byteVecPush(out, rt.iterAny(rt.iterMap(z5, (_2235: [rt.u8, rt.u8]): rt.u8 => { - return _2235[0] ^ _2235[1]; - }), (x177: rt.u8): boolean => { - return x177 === 0; - }) ? 1 : 0); + const _1551: rt.usize = rt.usizeRem(rt.usizeDiv(data.length, 8), 5); + if (_1551 === 0) { + const z25: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x287: rt.u8): rt.u8 => { + const _6211: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6211.value, x287 ^ 9); + rt.refMutRelease(_6211); + return x287; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2875: rt.u8): rt.u8 => { + const x288: rt.u8 = _2875; + const _6212: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6212.value, x288 ^ 10); + rt.refMutRelease(_6212); + return x288; + }), "index"); + const _1568: rt.usize = rt.usizeRem(data.length, 8); + if (_1568 === 0) { + rt.byteVecPush(out, rt.iterCount(z25) & 0xff); + } else if (_1568 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z25), 238, (_2884: [rt.u8, rt.u8]): rt.u8 => { + return _2884[0] ^ _2884[1]; + })); + } else if (_1568 === 2) { + rt.iterForEach(z25, (p37: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1567(p37)); + }); + } else if (_1568 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z25, (_2883: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2883[0] as rt.u32, _2883[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1568 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z25, (_2882: [rt.u8, rt.u8]): rt.u8 => { + return _2882[0] ^ _2882[1]; + }), "index", true, 1)), undefined, true); + } else if (_1568 === 5) { + rt.byteVecPush(out, rt.iterFold(z25, 0, (acc15: rt.u8, p36: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc15, 3) ^ _1567(p36); + })); + } else if (_1568 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(z25, (_2881: [rt.u8, rt.u8]): rt.u8 => { + return _2881[0] ^ _2881[1]; + }), (x295: rt.u8): boolean => { + return x295 === 0; + }) ? 1 : 0); + } else { + const z26: rt.Iter<[rt.u8, rt.u8]> = z25; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z26, (_2876: [rt.u8, rt.u8]): boolean => { + return _2876[0] > _2876[1]; + }), 238, (i18: rt.usize): rt.u8 => { + return i18 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z26, (_2877: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2877[0], 3) === 0; + }), 238, (_2878: [rt.u8, rt.u8]): rt.u8 => { + return _2878[0] ^ _2878[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z26, n), 238, (_2879: [rt.u8, rt.u8]): rt.u8 => { + return _2879[0] ^ _2879[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z26.next()), 238, (_2880: [rt.u8, rt.u8]): rt.u8 => { + return _2880[0] ^ _2880[1]; + })); + } + } else if (_1551 === 1) { + const z27: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x275: rt.u8): rt.u8 => { + const _6207: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6207.value, x275 ^ 9); + rt.refMutRelease(_6207); + return x275; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2865: rt.u8): rt.u8 => { + const x276: rt.u8 = _2865; + const _6208: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6208.value, x276 ^ 10); + rt.refMutRelease(_6208); + return x276; + }), "index"); + const _1619: rt.usize = rt.usizeRem(data.length, 8); + if (_1619 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z27)) & 0xff); + } else if (_1619 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z27)), 238, (_2874: [rt.u8, rt.u8]): rt.u8 => { + return _2874[0] ^ _2874[1]; + })); + } else if (_1619 === 2) { + const _1626: (a0: [rt.u8, rt.u8]) => undefined = (p35: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1618(p35)); + }; + rt.iterForEach(rt.iterBoxed(z27), _1626); + } else if (_1619 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z27), (_2873: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2873[0] as rt.u32, _2873[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1619 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z27), (_2872: [rt.u8, rt.u8]): rt.u8 => { + return _2872[0] ^ _2872[1]; + }), "next")), undefined, true); + } else if (_1619 === 5) { + const _1634: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc14: rt.u8, p34: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc14, 3) ^ _1618(p34); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z27), 0, _1634)); + } else if (_1619 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z27), (_2871: [rt.u8, rt.u8]): rt.u8 => { + return _2871[0] ^ _2871[1]; + }), (x283: rt.u8): boolean => { + return x283 === 0; + }) ? 1 : 0); + } else { + const z28: rt.Iter<[rt.u8, rt.u8]> = z27; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z28), (_2866: [rt.u8, rt.u8]): boolean => { + return _2866[0] > _2866[1]; + }), 238, (i17: rt.usize): rt.u8 => { + return i17 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z28), (_2867: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2867[0], 3) === 0; + }), 238, (_2868: [rt.u8, rt.u8]): rt.u8 => { + return _2868[0] ^ _2868[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z28), n), 238, (_2869: [rt.u8, rt.u8]): rt.u8 => { + return _2869[0] ^ _2869[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z28.next()), 238, (_2870: [rt.u8, rt.u8]): rt.u8 => { + return _2870[0] ^ _2870[1]; + })); + } + } else if (_1551 === 2) { + const z29: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x263: rt.u8): rt.u8 => { + const _6203: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6203.value, x263 ^ 9); + rt.refMutRelease(_6203); + return x263; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2855: rt.u8): rt.u8 => { + const x264: rt.u8 = _2855; + const _6204: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6204.value, x264 ^ 10); + rt.refMutRelease(_6204); + return x264; + }), "index"), n); + const _1671: rt.usize = rt.usizeRem(data.length, 8); + if (_1671 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z29)) & 0xff); + } else if (_1671 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z29)), 238, (_2864: [rt.u8, rt.u8]): rt.u8 => { + return _2864[0] ^ _2864[1]; + })); + } else if (_1671 === 2) { + const _1678: (a0: [rt.u8, rt.u8]) => undefined = (p33: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1670(p33)); + }; + rt.iterForEach(rt.iterBoxed(z29), _1678); + } else if (_1671 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z29), (_2863: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2863[0] as rt.u32, _2863[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1671 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z29), (_2862: [rt.u8, rt.u8]): rt.u8 => { + return _2862[0] ^ _2862[1]; + }), "next")), undefined, true); + } else if (_1671 === 5) { + const _1686: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc13: rt.u8, p32: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc13, 3) ^ _1670(p32); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z29), 0, _1686)); + } else if (_1671 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z29), (_2861: [rt.u8, rt.u8]): rt.u8 => { + return _2861[0] ^ _2861[1]; + }), (x271: rt.u8): boolean => { + return x271 === 0; + }) ? 1 : 0); + } else { + const z30: rt.Iter<[rt.u8, rt.u8]> = z29; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z30), (_2856: [rt.u8, rt.u8]): boolean => { + return _2856[0] > _2856[1]; + }), 238, (i16: rt.usize): rt.u8 => { + return i16 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z30), (_2857: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2857[0], 3) === 0; + }), 238, (_2858: [rt.u8, rt.u8]): rt.u8 => { + return _2858[0] ^ _2858[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z30), n), 238, (_2859: [rt.u8, rt.u8]): rt.u8 => { + return _2859[0] ^ _2859[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z30.next()), 238, (_2860: [rt.u8, rt.u8]): rt.u8 => { + return _2860[0] ^ _2860[1]; + })); + } + } else if (_1551 === 3) { + const _1710: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x251: rt.u8): rt.u8 => { + const _6199: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6199.value, x251 ^ 9); + rt.refMutRelease(_6199); + return x251; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2845: rt.u8): rt.u8 => { + const x252: rt.u8 = _2845; + const _6200: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6200.value, x252 ^ 10); + rt.refMutRelease(_6200); + return x252; + }), "index"); + const _1723: rt.usize = rt.usizeRem(data.length, 8); + if (_1723 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_1710))) & 0xff); + } else if (_1723 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_1710))), 238, (_2854: [rt.u8, rt.u8]): rt.u8 => { + return _2854[0] ^ _2854[1]; + })); + } else if (_1723 === 2) { + const _1730: (a0: [rt.u8, rt.u8]) => undefined = (p31: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1722(p31)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_1710)), _1730); + } else if (_1723 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1710)), (_2853: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2853[0] as rt.u32, _2853[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1723 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1710)), (_2852: [rt.u8, rt.u8]): rt.u8 => { + return _2852[0] ^ _2852[1]; + }), "next")), undefined, true); + } else if (_1723 === 5) { + const _1738: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc12: rt.u8, p30: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc12, 3) ^ _1722(p30); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_1710)), 0, _1738)); + } else if (_1723 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1710)), (_2851: [rt.u8, rt.u8]): rt.u8 => { + return _2851[0] ^ _2851[1]; + }), (x259: rt.u8): boolean => { + return x259 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_1710), (_2846: [rt.u8, rt.u8]): boolean => { + return _2846[0] > _2846[1]; + }), 238, (i15: rt.usize): rt.u8 => { + return i15 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_1710), (_2847: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2847[0], 3) === 0; + }), 238, (_2848: [rt.u8, rt.u8]): rt.u8 => { + return _2848[0] ^ _2848[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_1710), n), 238, (_2849: [rt.u8, rt.u8]): rt.u8 => { + return _2849[0] ^ _2849[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_1710.next()), 238, (_2850: [rt.u8, rt.u8]): rt.u8 => { + return _2850[0] ^ _2850[1]; + })); + } } else { - const z6: rt.Iter<[rt.u8, rt.u8]> = z5; - rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z6, (_2230: [rt.u8, rt.u8]): boolean => { - return _2230[0] > _2230[1]; - }), 238, (i10: rt.usize): rt.u8 => { - return i10 & 0xff; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z6, (_2231: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2231[0], 3) === 0; - }), 238, (_2232: [rt.u8, rt.u8]): rt.u8 => { - return _2232[0] ^ _2232[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z6, n), 238, (_2233: [rt.u8, rt.u8]): rt.u8 => { - return _2233[0] ^ _2233[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z6.next()), 238, (_2234: [rt.u8, rt.u8]): rt.u8 => { - return _2234[0] ^ _2234[1]; - })); - } - } else { - const _419: rt.usize = rt.usizeRem(data.length, 8); - if (_419 === 0) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2225: rt.u8): rt.u8 => { - const x166: rt.u8 = _2225; + const _1757: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x239: rt.u8): rt.u8 => { + const _6195: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6195.value, x239 ^ 9); + rt.refMutRelease(_6195); + return x239; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2835: rt.u8): rt.u8 => { + const x240: rt.u8 = _2835; const _6196: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6196.value, x166 ^ 5); + rt.byteVecPush(_6196.value, x240 ^ 10); rt.refMutRelease(_6196); - return x166; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2226: rt.u8): rt.u8 => { - const x167: rt.u8 = _2226; - const _6197: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6197.value, x167 ^ 6); - rt.refMutRelease(_6197); - return x167; - }), "len"), (_2227: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2227[0], 2) === 0; - })) & 0xff); - } else if (_419 === 1) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2222: rt.u8): rt.u8 => { - const x163: rt.u8 = _2222; + return x240; + }), "index"), n); + const _1771: rt.usize = rt.usizeRem(data.length, 8); + if (_1771 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_1757))) & 0xff); + } else if (_1771 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_1757))), 238, (_2844: [rt.u8, rt.u8]): rt.u8 => { + return _2844[0] ^ _2844[1]; + })); + } else if (_1771 === 2) { + const _1778: (a0: [rt.u8, rt.u8]) => undefined = (p29: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1770(p29)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_1757)), _1778); + } else if (_1771 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1757)), (_2843: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2843[0] as rt.u32, _2843[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1771 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1757)), (_2842: [rt.u8, rt.u8]): rt.u8 => { + return _2842[0] ^ _2842[1]; + }), "next")), undefined, true); + } else if (_1771 === 5) { + const _1786: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc11: rt.u8, p28: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc11, 3) ^ _1770(p28); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_1757)), 0, _1786)); + } else if (_1771 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_1757)), (_2841: [rt.u8, rt.u8]): rt.u8 => { + return _2841[0] ^ _2841[1]; + }), (x247: rt.u8): boolean => { + return x247 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_1757), (_2836: [rt.u8, rt.u8]): boolean => { + return _2836[0] > _2836[1]; + }), 238, (i14: rt.usize): rt.u8 => { + return i14 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_1757), (_2837: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2837[0], 3) === 0; + }), 238, (_2838: [rt.u8, rt.u8]): rt.u8 => { + return _2838[0] ^ _2838[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_1757), n), 238, (_2839: [rt.u8, rt.u8]): rt.u8 => { + return _2839[0] ^ _2839[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_1757.next()), 238, (_2840: [rt.u8, rt.u8]): rt.u8 => { + return _2840[0] ^ _2840[1]; + })); + } + } + } else { + const _1804: rt.usize = rt.usizeRem(data.length, 8); + if (_1804 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x236: rt.u8): rt.u8 => { + const _6193: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6193.value, x236 ^ 9); + rt.refMutRelease(_6193); + return x236; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2833: rt.u8): rt.u8 => { + const x237: rt.u8 = _2833; const _6194: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6194.value, x163 ^ 5); + rt.byteVecPush(_6194.value, x237 ^ 10); rt.refMutRelease(_6194); - return x163; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2223: rt.u8): rt.u8 => { - const x164: rt.u8 = _2223; - const _6195: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6195.value, x164 ^ 6); - rt.refMutRelease(_6195); - return x164; - }), "len"), (_2224: [rt.u8, rt.u8]): rt.u8 | undefined => { - return rt.u8CheckedSub(_2224[0], _2224[1]); + return x237; + }), "index"), (_2834: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2834[0], 2) === 0; })) & 0xff); - } else if (_419 === 2) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2219: rt.u8): rt.u8 => { - const x160: rt.u8 = _2219; + } else if (_1804 === 1) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x233: rt.u8): rt.u8 => { + const _6191: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6191.value, x233 ^ 9); + rt.refMutRelease(_6191); + return x233; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2831: rt.u8): rt.u8 => { + const x234: rt.u8 = _2831; const _6192: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6192.value, x160 ^ 5); + rt.byteVecPush(_6192.value, x234 ^ 10); rt.refMutRelease(_6192); - return x160; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2220: rt.u8): rt.u8 => { - const x161: rt.u8 = _2220; - const _6193: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6193.value, x161 ^ 6); - rt.refMutRelease(_6193); - return x161; - }), "len"), (_2221: [rt.u8, rt.u8]): boolean => { - return _2221[0] < 128; + return x234; + }), "index"), (_2832: [rt.u8, rt.u8]): rt.u8 | undefined => { + return rt.u8CheckedSub(_2832[0], _2832[1]); })) & 0xff); - } else if (_419 === 3) { - rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2216: rt.u8): rt.u8 => { - const x158: rt.u8 = _2216; + } else if (_1804 === 2) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x230: rt.u8): rt.u8 => { + const _6189: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6189.value, x230 ^ 9); + rt.refMutRelease(_6189); + return x230; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2829: rt.u8): rt.u8 => { + const x231: rt.u8 = _2829; const _6190: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6190.value, x158 ^ 5); + rt.byteVecPush(_6190.value, x231 ^ 10); rt.refMutRelease(_6190); - return x158; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2217: rt.u8): rt.u8 => { - const x159: rt.u8 = _2217; - const _6191: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6191.value, x159 ^ 6); - rt.refMutRelease(_6191); - return x159; - }), "len")), (_2218: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { - return _2218[0] & 0xff; - })), 238)); - } else if (_419 === 4) { - rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2214: rt.u8): rt.u8 => { - const x156: rt.u8 = _2214; + return x231; + }), "index"), (_2830: [rt.u8, rt.u8]): boolean => { + return _2830[0] < 128; + })) & 0xff); + } else if (_1804 === 3) { + rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x228: rt.u8): rt.u8 => { + const _6187: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6187.value, x228 ^ 9); + rt.refMutRelease(_6187); + return x228; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2827: rt.u8): rt.u8 => { + const x229: rt.u8 = _2827; const _6188: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6188.value, x156 ^ 5); + rt.byteVecPush(_6188.value, x229 ^ 10); rt.refMutRelease(_6188); - return x156; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2215: rt.u8): rt.u8 => { - const x157: rt.u8 = _2215; - const _6189: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6189.value, x157 ^ 6); - rt.refMutRelease(_6189); - return x157; - }), "len"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); - } else if (_419 === 5) { - rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2212: rt.u8): rt.u8 => { - const x154: rt.u8 = _2212; + return x229; + }), "index")), (_2828: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { + return _2828[0] & 0xff; + })), 238)); + } else if (_1804 === 4) { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x226: rt.u8): rt.u8 => { + const _6185: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6185.value, x226 ^ 9); + rt.refMutRelease(_6185); + return x226; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2826: rt.u8): rt.u8 => { + const x227: rt.u8 = _2826; const _6186: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6186.value, x154 ^ 5); + rt.byteVecPush(_6186.value, x227 ^ 10); rt.refMutRelease(_6186); - return x154; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2213: rt.u8): rt.u8 => { - const x155: rt.u8 = _2213; - const _6187: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6187.value, x155 ^ 6); - rt.refMutRelease(_6187); - return x155; - }), "len"), n)) & 0xff); - } else if (_419 === 6) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2210: rt.u8): rt.u8 => { - const x152: rt.u8 = _2210; + return x227; + }), "index"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); + } else if (_1804 === 5) { + rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x224: rt.u8): rt.u8 => { + const _6183: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6183.value, x224 ^ 9); + rt.refMutRelease(_6183); + return x224; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2825: rt.u8): rt.u8 => { + const x225: rt.u8 = _2825; const _6184: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6184.value, x152 ^ 5); + rt.byteVecPush(_6184.value, x225 ^ 10); rt.refMutRelease(_6184); - return x152; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2211: rt.u8): rt.u8 => { - const x153: rt.u8 = _2211; - const _6185: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6185.value, x153 ^ 6); - rt.refMutRelease(_6185); - return x153; - }), "len"), n)) & 0xff); - } else { - const p3: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterChain(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2208: rt.u8): rt.u8 => { - const x150: rt.u8 = _2208; + return x225; + }), "index"), n)) & 0xff); + } else if (_1804 === 6) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x222: rt.u8): rt.u8 => { + const _6181: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6181.value, x222 ^ 9); + rt.refMutRelease(_6181); + return x222; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2824: rt.u8): rt.u8 => { + const x223: rt.u8 = _2824; const _6182: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6182.value, x150 ^ 5); + rt.byteVecPush(_6182.value, x223 ^ 10); rt.refMutRelease(_6182); - return x150; - }), rt.iterSlice(rt.byteSliceView(b2))), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2209: rt.u8): rt.u8 => { - const x151: rt.u8 = _2209; - const _6183: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6183.value, x151 ^ 6); - rt.refMutRelease(_6183); - return x151; - }), "len")); - rt.byteVecPush(out, (rt.peekablePeek(p3) !== undefined ? 1 : 0) ^ (rt.iterCount(p3) & 0xff)); - } - } - } else if (_28 === 2) { - if (!other) { - if ((kind & 16) === 0) { - const z7: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x138: rt.u8): rt.u8 => { - const _6178: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6178.value, x138 ^ 7); - rt.refMutRelease(_6178); - return x138; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x139: rt.u8): rt.u8 => { + return x223; + }), "index"), n)) & 0xff); + } else { + const p5: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x220: rt.u8): rt.u8 => { const _6179: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6179.value, x139 ^ 8); + rt.byteVecPush(_6179.value, x220 ^ 9); rt.refMutRelease(_6179); - return x139; - }), "index"); - const _574: rt.usize = rt.usizeRem(data.length, 8); - if (_574 === 0) { - rt.byteVecPush(out, rt.iterCount(z7) & 0xff); - } else if (_574 === 1) { - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z7), 238, (_2207: [rt.u8, rt.u8]): rt.u8 => { - return _2207[0] ^ _2207[1]; + return x220; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2823: rt.u8): rt.u8 => { + const x221: rt.u8 = _2823; + const _6180: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6180.value, x221 ^ 10); + rt.refMutRelease(_6180); + return x221; + }), "index")); + rt.byteVecPush(out, (rt.peekablePeek(p5) !== undefined ? 1 : 0) ^ (rt.iterCount(p5) & 0xff)); + } + } + } else if (!other) { + if ((kind & 16) === 0) { + const _1931: rt.usize = rt.usizeRem(rt.usizeDiv(data.length, 8), 5); + if (_1931 === 0) { + const z31: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2811: rt.u8): rt.u8 => { + const x208: rt.u8 = _2811; + const _6175: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6175.value, x208 ^ 11); + rt.refMutRelease(_6175); + return x208; + }), (_2812: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2813: rt.u8): rt.u8 => { + const x209: rt.u8 = _2813; + const _6176: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6176.value, x209 ^ 12); + rt.refMutRelease(_6176); + return x209; + })); + const _1947: rt.usize = rt.usizeRem(data.length, 8); + if (_1947 === 0) { + rt.byteVecPush(out, rt.iterCount(z31) & 0xff); + } else if (_1947 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z31), 238, (_2822: [rt.u8, rt.u8]): rt.u8 => { + return _2822[0] ^ _2822[1]; })); - } else if (_574 === 2) { - rt.iterForEach(z7, (p15: [rt.u8, rt.u8]): undefined => { - rt.byteVecPush(out, _573(p15)); + } else if (_1947 === 2) { + rt.iterForEach(z31, (p27: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1946(p27)); }); - } else if (_574 === 3) { - rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z7, (_2206: [rt.u8, rt.u8]): rt.u32 => { - return rt.u32Add(_2206[0] as rt.u32, _2206[1] as rt.u32); + } else if (_1947 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z31, (_2821: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2821[0] as rt.u32, _2821[1] as rt.u32); }), rt.u32Add, 0)).reverse()), undefined, true); - } else if (_574 === 4) { - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z7, (_2205: [rt.u8, rt.u8]): rt.u8 => { - return _2205[0] ^ _2205[1]; - }), "index", true, 1)), undefined, true); - } else if (_574 === 5) { - rt.byteVecPush(out, rt.iterFold(z7, 0, (acc4: rt.u8, p14: [rt.u8, rt.u8]): rt.u8 => { - return rt.u8WrappingMul(acc4, 3) ^ _573(p14); + } else if (_1947 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z31, (_2820: [rt.u8, rt.u8]): rt.u8 => { + return _2820[0] ^ _2820[1]; + }), "next")), undefined, true); + } else if (_1947 === 5) { + rt.byteVecPush(out, rt.iterFold(z31, 0, (acc10: rt.u8, p26: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc10, 3) ^ _1946(p26); })); - } else if (_574 === 6) { - rt.byteVecPush(out, rt.iterAny(rt.iterMap(z7, (_2204: [rt.u8, rt.u8]): rt.u8 => { - return _2204[0] ^ _2204[1]; - }), (x146: rt.u8): boolean => { - return x146 === 0; + } else if (_1947 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(z31, (_2819: [rt.u8, rt.u8]): rt.u8 => { + return _2819[0] ^ _2819[1]; + }), (x216: rt.u8): boolean => { + return x216 === 0; }) ? 1 : 0); } else { - const z8: rt.Iter<[rt.u8, rt.u8]> = z7; - rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z8, (_2199: [rt.u8, rt.u8]): boolean => { - return _2199[0] > _2199[1]; - }), 238, (i8: rt.usize): rt.u8 => { - return i8 & 0xff; + const z32: rt.Iter<[rt.u8, rt.u8]> = z31; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z32, (_2814: [rt.u8, rt.u8]): boolean => { + return _2814[0] > _2814[1]; + }), 238, (i12: rt.usize): rt.u8 => { + return i12 & 0xff; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z8, (_2200: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2200[0], 3) === 0; - }), 238, (_2201: [rt.u8, rt.u8]): rt.u8 => { - return _2201[0] ^ _2201[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z32, (_2815: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2815[0], 3) === 0; + }), 238, (_2816: [rt.u8, rt.u8]): rt.u8 => { + return _2816[0] ^ _2816[1]; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z8, n), 238, (_2202: [rt.u8, rt.u8]): rt.u8 => { - return _2202[0] ^ _2202[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z32, n), 238, (_2817: [rt.u8, rt.u8]): rt.u8 => { + return _2817[0] ^ _2817[1]; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z8.next()), 238, (_2203: [rt.u8, rt.u8]): rt.u8 => { - return _2203[0] ^ _2203[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z32.next()), 238, (_2818: [rt.u8, rt.u8]): rt.u8 => { + return _2818[0] ^ _2818[1]; })); } - } else { - const _612: rt.usize = rt.usizeRem(data.length, 8); - if (_612 === 0) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x135: rt.u8): rt.u8 => { - const _6176: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6176.value, x135 ^ 7); - rt.refMutRelease(_6176); - return x135; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x136: rt.u8): rt.u8 => { - const _6177: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6177.value, x136 ^ 8); - rt.refMutRelease(_6177); - return x136; - }), "index"), (_2198: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2198[0], 2) === 0; - })) & 0xff); - } else if (_612 === 1) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x132: rt.u8): rt.u8 => { - const _6174: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6174.value, x132 ^ 7); - rt.refMutRelease(_6174); - return x132; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x133: rt.u8): rt.u8 => { - const _6175: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6175.value, x133 ^ 8); - rt.refMutRelease(_6175); - return x133; - }), "index"), (_2197: [rt.u8, rt.u8]): rt.u8 | undefined => { - return rt.u8CheckedSub(_2197[0], _2197[1]); - })) & 0xff); - } else if (_612 === 2) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x129: rt.u8): rt.u8 => { - const _6172: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6172.value, x129 ^ 7); - rt.refMutRelease(_6172); - return x129; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x130: rt.u8): rt.u8 => { - const _6173: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6173.value, x130 ^ 8); - rt.refMutRelease(_6173); - return x130; - }), "index"), (_2196: [rt.u8, rt.u8]): boolean => { - return _2196[0] < 128; - })) & 0xff); - } else if (_612 === 3) { - rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x127: rt.u8): rt.u8 => { - const _6170: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6170.value, x127 ^ 7); - rt.refMutRelease(_6170); - return x127; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x128: rt.u8): rt.u8 => { - const _6171: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6171.value, x128 ^ 8); - rt.refMutRelease(_6171); - return x128; - }), "index")), (_2195: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { - return _2195[0] & 0xff; - })), 238)); - } else if (_612 === 4) { - rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x125: rt.u8): rt.u8 => { - const _6168: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6168.value, x125 ^ 7); - rt.refMutRelease(_6168); - return x125; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x126: rt.u8): rt.u8 => { - const _6169: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6169.value, x126 ^ 8); - rt.refMutRelease(_6169); - return x126; - }), "index"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); - } else if (_612 === 5) { - rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x123: rt.u8): rt.u8 => { - const _6166: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6166.value, x123 ^ 7); - rt.refMutRelease(_6166); - return x123; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x124: rt.u8): rt.u8 => { - const _6167: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6167.value, x124 ^ 8); - rt.refMutRelease(_6167); - return x124; - }), "index"), n)) & 0xff); - } else if (_612 === 6) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x121: rt.u8): rt.u8 => { - const _6164: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6164.value, x121 ^ 7); - rt.refMutRelease(_6164); - return x121; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x122: rt.u8): rt.u8 => { - const _6165: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6165.value, x122 ^ 8); - rt.refMutRelease(_6165); - return x122; - }), "index"), n)) & 0xff); + } else if (_1931 === 1) { + const z33: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2799: rt.u8): rt.u8 => { + const x196: rt.u8 = _2799; + const _6171: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6171.value, x196 ^ 11); + rt.refMutRelease(_6171); + return x196; + }), (_2800: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2801: rt.u8): rt.u8 => { + const x197: rt.u8 = _2801; + const _6172: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6172.value, x197 ^ 12); + rt.refMutRelease(_6172); + return x197; + })); + const _1997: rt.usize = rt.usizeRem(data.length, 8); + if (_1997 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z33)) & 0xff); + } else if (_1997 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z33)), 238, (_2810: [rt.u8, rt.u8]): rt.u8 => { + return _2810[0] ^ _2810[1]; + })); + } else if (_1997 === 2) { + const _2004: (a0: [rt.u8, rt.u8]) => undefined = (p25: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _1996(p25)); + }; + rt.iterForEach(rt.iterBoxed(z33), _2004); + } else if (_1997 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z33), (_2809: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2809[0] as rt.u32, _2809[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_1997 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z33), (_2808: [rt.u8, rt.u8]): rt.u8 => { + return _2808[0] ^ _2808[1]; + }), "next")), undefined, true); + } else if (_1997 === 5) { + const _2012: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc9: rt.u8, p24: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc9, 3) ^ _1996(p24); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z33), 0, _2012)); + } else if (_1997 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z33), (_2807: [rt.u8, rt.u8]): rt.u8 => { + return _2807[0] ^ _2807[1]; + }), (x204: rt.u8): boolean => { + return x204 === 0; + }) ? 1 : 0); } else { - const p4: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), (x119: rt.u8): rt.u8 => { - const _6162: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6162.value, x119 ^ 7); - rt.refMutRelease(_6162); - return x119; - }), rt.iterMap(rt.byteVecIntoIter(rt.byteSliceToByteVec(b2)), (x120: rt.u8): rt.u8 => { - const _6163: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6163.value, x120 ^ 8); - rt.refMutRelease(_6163); - return x120; - }), "index")); - rt.byteVecPush(out, (rt.peekablePeek(p4) !== undefined ? 1 : 0) ^ (rt.iterCount(p4) & 0xff)); + const z34: rt.Iter<[rt.u8, rt.u8]> = z33; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z34), (_2802: [rt.u8, rt.u8]): boolean => { + return _2802[0] > _2802[1]; + }), 238, (i11: rt.usize): rt.u8 => { + return i11 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z34), (_2803: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2803[0], 3) === 0; + }), 238, (_2804: [rt.u8, rt.u8]): rt.u8 => { + return _2804[0] ^ _2804[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z34), n), 238, (_2805: [rt.u8, rt.u8]): rt.u8 => { + return _2805[0] ^ _2805[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z34.next()), 238, (_2806: [rt.u8, rt.u8]): rt.u8 => { + return _2806[0] ^ _2806[1]; + })); } - } - } else if ((kind & 16) === 0) { - const z9: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x107: rt.u8): rt.u8 => { - const _6158: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6158.value, x107 ^ 9); - rt.refMutRelease(_6158); - return x107; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2185: rt.u8): rt.u8 => { - const x108: rt.u8 = _2185; - const _6159: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6159.value, x108 ^ 10); - rt.refMutRelease(_6159); - return x108; - }), "index"); - const _751: rt.usize = rt.usizeRem(data.length, 8); - if (_751 === 0) { - rt.byteVecPush(out, rt.iterCount(z9) & 0xff); - } else if (_751 === 1) { - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z9), 238, (_2194: [rt.u8, rt.u8]): rt.u8 => { - return _2194[0] ^ _2194[1]; - })); - } else if (_751 === 2) { - rt.iterForEach(z9, (p13: [rt.u8, rt.u8]): undefined => { - rt.byteVecPush(out, _750(p13)); - }); - } else if (_751 === 3) { - rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z9, (_2193: [rt.u8, rt.u8]): rt.u32 => { - return rt.u32Add(_2193[0] as rt.u32, _2193[1] as rt.u32); - }), rt.u32Add, 0)).reverse()), undefined, true); - } else if (_751 === 4) { - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z9, (_2192: [rt.u8, rt.u8]): rt.u8 => { - return _2192[0] ^ _2192[1]; - }), "index", true, 1)), undefined, true); - } else if (_751 === 5) { - rt.byteVecPush(out, rt.iterFold(z9, 0, (acc3: rt.u8, p12: [rt.u8, rt.u8]): rt.u8 => { - return rt.u8WrappingMul(acc3, 3) ^ _750(p12); + } else if (_1931 === 2) { + const z35: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2787: rt.u8): rt.u8 => { + const x184: rt.u8 = _2787; + const _6167: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6167.value, x184 ^ 11); + rt.refMutRelease(_6167); + return x184; + }), (_2788: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2789: rt.u8): rt.u8 => { + const x185: rt.u8 = _2789; + const _6168: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6168.value, x185 ^ 12); + rt.refMutRelease(_6168); + return x185; + })), n); + const _2048: rt.usize = rt.usizeRem(data.length, 8); + if (_2048 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z35)) & 0xff); + } else if (_2048 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z35)), 238, (_2798: [rt.u8, rt.u8]): rt.u8 => { + return _2798[0] ^ _2798[1]; + })); + } else if (_2048 === 2) { + const _2055: (a0: [rt.u8, rt.u8]) => undefined = (p23: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2047(p23)); + }; + rt.iterForEach(rt.iterBoxed(z35), _2055); + } else if (_2048 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z35), (_2797: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2797[0] as rt.u32, _2797[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_2048 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z35), (_2796: [rt.u8, rt.u8]): rt.u8 => { + return _2796[0] ^ _2796[1]; + }), "next")), undefined, true); + } else if (_2048 === 5) { + const _2063: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc8: rt.u8, p22: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc8, 3) ^ _2047(p22); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z35), 0, _2063)); + } else if (_2048 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z35), (_2795: [rt.u8, rt.u8]): rt.u8 => { + return _2795[0] ^ _2795[1]; + }), (x192: rt.u8): boolean => { + return x192 === 0; + }) ? 1 : 0); + } else { + const z36: rt.Iter<[rt.u8, rt.u8]> = z35; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z36), (_2790: [rt.u8, rt.u8]): boolean => { + return _2790[0] > _2790[1]; + }), 238, (i10: rt.usize): rt.u8 => { + return i10 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z36), (_2791: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2791[0], 3) === 0; + }), 238, (_2792: [rt.u8, rt.u8]): rt.u8 => { + return _2792[0] ^ _2792[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z36), n), 238, (_2793: [rt.u8, rt.u8]): rt.u8 => { + return _2793[0] ^ _2793[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z36.next()), 238, (_2794: [rt.u8, rt.u8]): rt.u8 => { + return _2794[0] ^ _2794[1]; + })); + } + } else if (_1931 === 3) { + const _2087: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2775: rt.u8): rt.u8 => { + const x172: rt.u8 = _2775; + const _6163: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6163.value, x172 ^ 11); + rt.refMutRelease(_6163); + return x172; + }), (_2776: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2777: rt.u8): rt.u8 => { + const x173: rt.u8 = _2777; + const _6164: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6164.value, x173 ^ 12); + rt.refMutRelease(_6164); + return x173; })); - } else if (_751 === 6) { - rt.byteVecPush(out, rt.iterAny(rt.iterMap(z9, (_2191: [rt.u8, rt.u8]): rt.u8 => { - return _2191[0] ^ _2191[1]; - }), (x115: rt.u8): boolean => { - return x115 === 0; - }) ? 1 : 0); + const _2099: rt.usize = rt.usizeRem(data.length, 8); + if (_2099 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_2087))) & 0xff); + } else if (_2099 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_2087))), 238, (_2786: [rt.u8, rt.u8]): rt.u8 => { + return _2786[0] ^ _2786[1]; + })); + } else if (_2099 === 2) { + const _2106: (a0: [rt.u8, rt.u8]) => undefined = (p21: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2098(p21)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_2087)), _2106); + } else if (_2099 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2087)), (_2785: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2785[0] as rt.u32, _2785[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_2099 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2087)), (_2784: [rt.u8, rt.u8]): rt.u8 => { + return _2784[0] ^ _2784[1]; + }), "next")), undefined, true); + } else if (_2099 === 5) { + const _2114: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc7: rt.u8, p20: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc7, 3) ^ _2098(p20); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_2087)), 0, _2114)); + } else if (_2099 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2087)), (_2783: [rt.u8, rt.u8]): rt.u8 => { + return _2783[0] ^ _2783[1]; + }), (x180: rt.u8): boolean => { + return x180 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_2087), (_2778: [rt.u8, rt.u8]): boolean => { + return _2778[0] > _2778[1]; + }), 238, (i9: rt.usize): rt.u8 => { + return i9 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_2087), (_2779: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2779[0], 3) === 0; + }), 238, (_2780: [rt.u8, rt.u8]): rt.u8 => { + return _2780[0] ^ _2780[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_2087), n), 238, (_2781: [rt.u8, rt.u8]): rt.u8 => { + return _2781[0] ^ _2781[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_2087.next()), 238, (_2782: [rt.u8, rt.u8]): rt.u8 => { + return _2782[0] ^ _2782[1]; + })); + } } else { - const z10: rt.Iter<[rt.u8, rt.u8]> = z9; - rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z10, (_2186: [rt.u8, rt.u8]): boolean => { - return _2186[0] > _2186[1]; - }), 238, (i6: rt.usize): rt.u8 => { - return i6 & 0xff; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z10, (_2187: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2187[0], 3) === 0; - }), 238, (_2188: [rt.u8, rt.u8]): rt.u8 => { - return _2188[0] ^ _2188[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z10, n), 238, (_2189: [rt.u8, rt.u8]): rt.u8 => { - return _2189[0] ^ _2189[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z10.next()), 238, (_2190: [rt.u8, rt.u8]): rt.u8 => { - return _2190[0] ^ _2190[1]; - })); + const _2133: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2763: rt.u8): rt.u8 => { + const x160: rt.u8 = _2763; + const _6159: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6159.value, x160 ^ 11); + rt.refMutRelease(_6159); + return x160; + }), (_2764: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2765: rt.u8): rt.u8 => { + const x161: rt.u8 = _2765; + const _6160: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6160.value, x161 ^ 12); + rt.refMutRelease(_6160); + return x161; + })), n); + const _2146: rt.usize = rt.usizeRem(data.length, 8); + if (_2146 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_2133))) & 0xff); + } else if (_2146 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_2133))), 238, (_2774: [rt.u8, rt.u8]): rt.u8 => { + return _2774[0] ^ _2774[1]; + })); + } else if (_2146 === 2) { + const _2153: (a0: [rt.u8, rt.u8]) => undefined = (p19: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2145(p19)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_2133)), _2153); + } else if (_2146 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2133)), (_2773: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2773[0] as rt.u32, _2773[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_2146 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2133)), (_2772: [rt.u8, rt.u8]): rt.u8 => { + return _2772[0] ^ _2772[1]; + }), "next")), undefined, true); + } else if (_2146 === 5) { + const _2161: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc6: rt.u8, p18: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc6, 3) ^ _2145(p18); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_2133)), 0, _2161)); + } else if (_2146 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2133)), (_2771: [rt.u8, rt.u8]): rt.u8 => { + return _2771[0] ^ _2771[1]; + }), (x168: rt.u8): boolean => { + return x168 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_2133), (_2766: [rt.u8, rt.u8]): boolean => { + return _2766[0] > _2766[1]; + }), 238, (i8: rt.usize): rt.u8 => { + return i8 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_2133), (_2767: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2767[0], 3) === 0; + }), 238, (_2768: [rt.u8, rt.u8]): rt.u8 => { + return _2768[0] ^ _2768[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_2133), n), 238, (_2769: [rt.u8, rt.u8]): rt.u8 => { + return _2769[0] ^ _2769[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_2133.next()), 238, (_2770: [rt.u8, rt.u8]): rt.u8 => { + return _2770[0] ^ _2770[1]; + })); + } } } else { - const _789: rt.usize = rt.usizeRem(data.length, 8); - if (_789 === 0) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x104: rt.u8): rt.u8 => { - const _6156: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6156.value, x104 ^ 9); - rt.refMutRelease(_6156); - return x104; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2183: rt.u8): rt.u8 => { - const x105: rt.u8 = _2183; + const _2179: rt.usize = rt.usizeRem(data.length, 8); + if (_2179 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2758: rt.u8): rt.u8 => { + const x157: rt.u8 = _2758; const _6157: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6157.value, x105 ^ 10); + rt.byteVecPush(_6157.value, x157 ^ 11); rt.refMutRelease(_6157); - return x105; - }), "index"), (_2184: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2184[0], 2) === 0; + return x157; + }), (_2760: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2761: rt.u8): rt.u8 => { + const x158: rt.u8 = _2761; + const _6158: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6158.value, x158 ^ 12); + rt.refMutRelease(_6158); + return x158; + })), (_2762: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2762[0], 2) === 0; })) & 0xff); - } else if (_789 === 1) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x101: rt.u8): rt.u8 => { - const _6154: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6154.value, x101 ^ 9); - rt.refMutRelease(_6154); - return x101; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2181: rt.u8): rt.u8 => { - const x102: rt.u8 = _2181; + } else if (_2179 === 1) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2747: rt.u8): rt.u8 => { + const x154: rt.u8 = _2747; const _6155: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6155.value, x102 ^ 10); + rt.byteVecPush(_6155.value, x154 ^ 11); rt.refMutRelease(_6155); - return x102; - }), "index"), (_2182: [rt.u8, rt.u8]): rt.u8 | undefined => { - return rt.u8CheckedSub(_2182[0], _2182[1]); + return x154; + }), (_2749: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2750: rt.u8): rt.u8 => { + const x155: rt.u8 = _2750; + const _6156: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6156.value, x155 ^ 12); + rt.refMutRelease(_6156); + return x155; + })), (_2755: [rt.u8, rt.u8]): rt.u8 | undefined => { + return rt.u8CheckedSub(_2755[0], _2755[1]); })) & 0xff); - } else if (_789 === 2) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x98: rt.u8): rt.u8 => { - const _6152: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6152.value, x98 ^ 9); - rt.refMutRelease(_6152); - return x98; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2179: rt.u8): rt.u8 => { - const x99: rt.u8 = _2179; + } else if (_2179 === 2) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2734: rt.u8): rt.u8 => { + const x151: rt.u8 = _2734; const _6153: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6153.value, x99 ^ 10); + rt.byteVecPush(_6153.value, x151 ^ 11); rt.refMutRelease(_6153); - return x99; - }), "index"), (_2180: [rt.u8, rt.u8]): boolean => { - return _2180[0] < 128; + return x151; + }), (_2739: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2744: rt.u8): rt.u8 => { + const x152: rt.u8 = _2744; + const _6154: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6154.value, x152 ^ 12); + rt.refMutRelease(_6154); + return x152; + })), (_2745: [rt.u8, rt.u8]): boolean => { + return _2745[0] < 128; })) & 0xff); - } else if (_789 === 3) { - rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x96: rt.u8): rt.u8 => { - const _6150: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6150.value, x96 ^ 9); - rt.refMutRelease(_6150); - return x96; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2177: rt.u8): rt.u8 => { - const x97: rt.u8 = _2177; + } else if (_2179 === 3) { + rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2716: rt.u8): rt.u8 => { + const x149: rt.u8 = _2716; const _6151: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6151.value, x97 ^ 10); + rt.byteVecPush(_6151.value, x149 ^ 11); rt.refMutRelease(_6151); - return x97; - }), "index")), (_2178: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { - return _2178[0] & 0xff; + return x149; + }), (_2721: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2726: rt.u8): rt.u8 => { + const x150: rt.u8 = _2726; + const _6152: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6152.value, x150 ^ 12); + rt.refMutRelease(_6152); + return x150; + }))), (_2727: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { + return _2727[0] & 0xff; })), 238)); - } else if (_789 === 4) { - rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x94: rt.u8): rt.u8 => { - const _6148: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6148.value, x94 ^ 9); - rt.refMutRelease(_6148); - return x94; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2176: rt.u8): rt.u8 => { - const x95: rt.u8 = _2176; + } else if (_2179 === 4) { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2696: rt.u8): rt.u8 => { + const x147: rt.u8 = _2696; const _6149: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6149.value, x95 ^ 10); + rt.byteVecPush(_6149.value, x147 ^ 11); rt.refMutRelease(_6149); - return x95; - }), "index"), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); - } else if (_789 === 5) { - rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x92: rt.u8): rt.u8 => { - const _6146: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6146.value, x92 ^ 9); - rt.refMutRelease(_6146); - return x92; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2175: rt.u8): rt.u8 => { - const x93: rt.u8 = _2175; + return x147; + }), (_2701: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2706: rt.u8): rt.u8 => { + const x148: rt.u8 = _2706; + const _6150: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6150.value, x148 ^ 12); + rt.refMutRelease(_6150); + return x148; + })), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); + } else if (_2179 === 5) { + rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2674: rt.u8): rt.u8 => { + const x145: rt.u8 = _2674; const _6147: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6147.value, x93 ^ 10); + rt.byteVecPush(_6147.value, x145 ^ 11); rt.refMutRelease(_6147); - return x93; - }), "index"), n)) & 0xff); - } else if (_789 === 6) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x90: rt.u8): rt.u8 => { - const _6144: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6144.value, x90 ^ 9); - rt.refMutRelease(_6144); - return x90; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2174: rt.u8): rt.u8 => { - const x91: rt.u8 = _2174; + return x145; + }), (_2679: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2684: rt.u8): rt.u8 => { + const x146: rt.u8 = _2684; + const _6148: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6148.value, x146 ^ 12); + rt.refMutRelease(_6148); + return x146; + })), n)) & 0xff); + } else if (_2179 === 6) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2654: rt.u8): rt.u8 => { + const x143: rt.u8 = _2654; const _6145: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6145.value, x91 ^ 10); + rt.byteVecPush(_6145.value, x143 ^ 11); rt.refMutRelease(_6145); - return x91; - }), "index"), n)) & 0xff); + return x143; + }), (_2659: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2664: rt.u8): rt.u8 => { + const x144: rt.u8 = _2664; + const _6146: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6146.value, x144 ^ 12); + rt.refMutRelease(_6146); + return x144; + })), n)) & 0xff); } else { - const p5: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterMap(rt.iterSkip(rt.byteVecIntoIter(rt.byteSliceToByteVec(a2)), 1), (x88: rt.u8): rt.u8 => { - const _6142: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6142.value, x88 ^ 9); - rt.refMutRelease(_6142); - return x88; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2173: rt.u8): rt.u8 => { - const x89: rt.u8 = _2173; + const p6: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2633: rt.u8): rt.u8 => { + const x141: rt.u8 = _2633; const _6143: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6143.value, x89 ^ 10); + rt.byteVecPush(_6143.value, x141 ^ 11); rt.refMutRelease(_6143); - return x89; - }), "index")); - rt.byteVecPush(out, (rt.peekablePeek(p5) !== undefined ? 1 : 0) ^ (rt.iterCount(p5) & 0xff)); + return x141; + }), (_2638: rt.u8): boolean => { + return true; + }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2643: rt.u8): rt.u8 => { + const x142: rt.u8 = _2643; + const _6144: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6144.value, x142 ^ 12); + rt.refMutRelease(_6144); + return x142; + }))); + rt.byteVecPush(out, (rt.peekablePeek(p6) !== undefined ? 1 : 0) ^ (rt.iterCount(p6) & 0xff)); } } - } else if (!other) { - if ((kind & 16) === 0) { - const z11: rt.Iter<[rt.u8, rt.u8]> = rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2161: rt.u8): rt.u8 => { - const x76: rt.u8 = _2161; + } else if ((kind & 16) === 0) { + const _2298: rt.usize = rt.usizeRem(rt.usizeDiv(data.length, 8), 5); + if (_2298 === 0) { + const z37: rt.Iter<[rt.u8, rt.u8]> = rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2556: rt.u8): rt.u8 => { + const x127: rt.u8 = _2556; + const _6137: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6137.value, x127 ^ 13); + rt.refMutRelease(_6137); + return x127; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2564: rt.u8): rt.u8 => { + const x128: rt.u8 = _2564; const _6138: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6138.value, x76 ^ 11); + rt.byteVecPush(_6138.value, x128 ^ 14); rt.refMutRelease(_6138); - return x76; - }), (_2162: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2163: rt.u8): rt.u8 => { - const x77: rt.u8 = _2163; + return x128; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2567: rt.u8): rt.u8 => { + const x129: rt.u8 = _2567; const _6139: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6139.value, x77 ^ 12); + rt.byteVecPush(_6139.value, x129 ^ 15); rt.refMutRelease(_6139); - return x77; - })); - const _927: rt.usize = rt.usizeRem(data.length, 8); - if (_927 === 0) { - rt.byteVecPush(out, rt.iterCount(z11) & 0xff); - } else if (_927 === 1) { - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z11), 238, (_2172: [rt.u8, rt.u8]): rt.u8 => { - return _2172[0] ^ _2172[1]; + return x129; + }), "len"), (_2569: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2569[0][0] ^ _2569[1], _2569[0][1]] as [rt.u8, rt.u8]; + }); + const _2321: rt.usize = rt.usizeRem(data.length, 8); + if (_2321 === 0) { + rt.byteVecPush(out, rt.iterCount(z37) & 0xff); + } else if (_2321 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z37), 238, (_2623: [rt.u8, rt.u8]): rt.u8 => { + return _2623[0] ^ _2623[1]; })); - } else if (_927 === 2) { - rt.iterForEach(z11, (p11: [rt.u8, rt.u8]): undefined => { - rt.byteVecPush(out, _926(p11)); + } else if (_2321 === 2) { + rt.iterForEach(z37, (p17: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2320(p17)); }); - } else if (_927 === 3) { - rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z11, (_2171: [rt.u8, rt.u8]): rt.u32 => { - return rt.u32Add(_2171[0] as rt.u32, _2171[1] as rt.u32); + } else if (_2321 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z37, (_2618: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2618[0] as rt.u32, _2618[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_2321 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z37, (_2613: [rt.u8, rt.u8]): rt.u8 => { + return _2613[0] ^ _2613[1]; + }), undefined, true)), undefined, true); + } else if (_2321 === 5) { + rt.byteVecPush(out, rt.iterFold(z37, 0, (acc5: rt.u8, p16: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc5, 3) ^ _2320(p16); + })); + } else if (_2321 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(z37, (_2603: [rt.u8, rt.u8]): rt.u8 => { + return _2603[0] ^ _2603[1]; + }), (x137: rt.u8): boolean => { + return x137 === 0; + }) ? 1 : 0); + } else { + const z38: rt.Iter<[rt.u8, rt.u8]> = z37; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z38, (_2572: [rt.u8, rt.u8]): boolean => { + return _2572[0] > _2572[1]; + }), 238, (i6: rt.usize): rt.u8 => { + return i6 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z38, (_2575: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2575[0], 3) === 0; + }), 238, (_2578: [rt.u8, rt.u8]): rt.u8 => { + return _2578[0] ^ _2578[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z38, n), 238, (_2593: [rt.u8, rt.u8]): rt.u8 => { + return _2593[0] ^ _2593[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z38.next()), 238, (_2598: [rt.u8, rt.u8]): rt.u8 => { + return _2598[0] ^ _2598[1]; + })); + } + } else if (_2298 === 1) { + const z39: rt.Iter<[rt.u8, rt.u8]> = rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2487: rt.u8): rt.u8 => { + const x113: rt.u8 = _2487; + const _6131: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6131.value, x113 ^ 13); + rt.refMutRelease(_6131); + return x113; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2492: rt.u8): rt.u8 => { + const x114: rt.u8 = _2492; + const _6132: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6132.value, x114 ^ 14); + rt.refMutRelease(_6132); + return x114; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2502: rt.u8): rt.u8 => { + const x115: rt.u8 = _2502; + const _6133: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6133.value, x115 ^ 15); + rt.refMutRelease(_6133); + return x115; + }), "len"), (_2510: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2510[0][0] ^ _2510[1], _2510[0][1]] as [rt.u8, rt.u8]; + }); + const _2378: rt.usize = rt.usizeRem(data.length, 8); + if (_2378 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z39)) & 0xff); + } else if (_2378 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z39)), 238, (_2546: [rt.u8, rt.u8]): rt.u8 => { + return _2546[0] ^ _2546[1]; + })); + } else if (_2378 === 2) { + const _2385: (a0: [rt.u8, rt.u8]) => undefined = (p15: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2377(p15)); + }; + rt.iterForEach(rt.iterBoxed(z39), _2385); + } else if (_2378 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z39), (_2541: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2541[0] as rt.u32, _2541[1] as rt.u32); }), rt.u32Add, 0)).reverse()), undefined, true); - } else if (_927 === 4) { - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z11, (_2170: [rt.u8, rt.u8]): rt.u8 => { - return _2170[0] ^ _2170[1]; + } else if (_2378 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z39), (_2536: [rt.u8, rt.u8]): rt.u8 => { + return _2536[0] ^ _2536[1]; }), "next")), undefined, true); - } else if (_927 === 5) { - rt.byteVecPush(out, rt.iterFold(z11, 0, (acc2: rt.u8, p10: [rt.u8, rt.u8]): rt.u8 => { - return rt.u8WrappingMul(acc2, 3) ^ _926(p10); + } else if (_2378 === 5) { + const _2393: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc4: rt.u8, p14: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc4, 3) ^ _2377(p14); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z39), 0, _2393)); + } else if (_2378 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z39), (_2527: [rt.u8, rt.u8]): rt.u8 => { + return _2527[0] ^ _2527[1]; + }), (x123: rt.u8): boolean => { + return x123 === 0; + }) ? 1 : 0); + } else { + const z40: rt.Iter<[rt.u8, rt.u8]> = z39; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z40), (_2513: [rt.u8, rt.u8]): boolean => { + return _2513[0] > _2513[1]; + }), 238, (i5: rt.usize): rt.u8 => { + return i5 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z40), (_2515: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2515[0], 3) === 0; + }), 238, (_2518: [rt.u8, rt.u8]): rt.u8 => { + return _2518[0] ^ _2518[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z40), n), 238, (_2521: [rt.u8, rt.u8]): rt.u8 => { + return _2521[0] ^ _2521[1]; })); - } else if (_927 === 6) { - rt.byteVecPush(out, rt.iterAny(rt.iterMap(z11, (_2169: [rt.u8, rt.u8]): rt.u8 => { - return _2169[0] ^ _2169[1]; - }), (x84: rt.u8): boolean => { - return x84 === 0; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z40.next()), 238, (_2524: [rt.u8, rt.u8]): rt.u8 => { + return _2524[0] ^ _2524[1]; + })); + } + } else if (_2298 === 2) { + const z41: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2452: rt.u8): rt.u8 => { + const x99: rt.u8 = _2452; + const _6125: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6125.value, x99 ^ 13); + rt.refMutRelease(_6125); + return x99; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2455: rt.u8): rt.u8 => { + const x100: rt.u8 = _2455; + const _6126: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6126.value, x100 ^ 14); + rt.refMutRelease(_6126); + return x100; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2457: rt.u8): rt.u8 => { + const x101: rt.u8 = _2457; + const _6127: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6127.value, x101 ^ 15); + rt.refMutRelease(_6127); + return x101; + }), "len"), (_2458: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2458[0][0] ^ _2458[1], _2458[0][1]] as [rt.u8, rt.u8]; + }), n); + const _2436: rt.usize = rt.usizeRem(data.length, 8); + if (_2436 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBoxed(z41)) & 0xff); + } else if (_2436 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBoxed(z41)), 238, (_2482: [rt.u8, rt.u8]): rt.u8 => { + return _2482[0] ^ _2482[1]; + })); + } else if (_2436 === 2) { + const _2443: (a0: [rt.u8, rt.u8]) => undefined = (p13: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2435(p13)); + }; + rt.iterForEach(rt.iterBoxed(z41), _2443); + } else if (_2436 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBoxed(z41), (_2474: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2474[0] as rt.u32, _2474[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_2436 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBoxed(z41), (_2473: [rt.u8, rt.u8]): rt.u8 => { + return _2473[0] ^ _2473[1]; + }), "next")), undefined, true); + } else if (_2436 === 5) { + const _2451: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc3: rt.u8, p12: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc3, 3) ^ _2435(p12); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBoxed(z41), 0, _2451)); + } else if (_2436 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBoxed(z41), (_2470: [rt.u8, rt.u8]): rt.u8 => { + return _2470[0] ^ _2470[1]; + }), (x109: rt.u8): boolean => { + return x109 === 0; }) ? 1 : 0); } else { - const z12: rt.Iter<[rt.u8, rt.u8]> = z11; - rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z12, (_2164: [rt.u8, rt.u8]): boolean => { - return _2164[0] > _2164[1]; + const z42: rt.Iter<[rt.u8, rt.u8]> = z41; + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(z42), (_2461: [rt.u8, rt.u8]): boolean => { + return _2461[0] > _2461[1]; }), 238, (i4: rt.usize): rt.u8 => { return i4 & 0xff; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z12, (_2165: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2165[0], 3) === 0; - }), 238, (_2166: [rt.u8, rt.u8]): rt.u8 => { - return _2166[0] ^ _2166[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(z42), (_2462: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2462[0], 3) === 0; + }), 238, (_2465: [rt.u8, rt.u8]): rt.u8 => { + return _2465[0] ^ _2465[1]; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z12, n), 238, (_2167: [rt.u8, rt.u8]): rt.u8 => { - return _2167[0] ^ _2167[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(z42), n), 238, (_2466: [rt.u8, rt.u8]): rt.u8 => { + return _2466[0] ^ _2466[1]; })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z12.next()), 238, (_2168: [rt.u8, rt.u8]): rt.u8 => { - return _2168[0] ^ _2168[1]; + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z42.next()), 238, (_2469: [rt.u8, rt.u8]): rt.u8 => { + return _2469[0] ^ _2469[1]; })); } - } else { - const _965: rt.usize = rt.usizeRem(data.length, 8); - if (_965 === 0) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2157: rt.u8): rt.u8 => { - const x73: rt.u8 = _2157; - const _6136: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6136.value, x73 ^ 11); - rt.refMutRelease(_6136); - return x73; - }), (_2158: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2159: rt.u8): rt.u8 => { - const x74: rt.u8 = _2159; - const _6137: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6137.value, x74 ^ 12); - rt.refMutRelease(_6137); - return x74; - })), (_2160: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2160[0], 2) === 0; - })) & 0xff); - } else if (_965 === 1) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2153: rt.u8): rt.u8 => { - const x70: rt.u8 = _2153; - const _6134: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6134.value, x70 ^ 11); - rt.refMutRelease(_6134); - return x70; - }), (_2154: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2155: rt.u8): rt.u8 => { - const x71: rt.u8 = _2155; - const _6135: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6135.value, x71 ^ 12); - rt.refMutRelease(_6135); - return x71; - })), (_2156: [rt.u8, rt.u8]): rt.u8 | undefined => { - return rt.u8CheckedSub(_2156[0], _2156[1]); - })) & 0xff); - } else if (_965 === 2) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2149: rt.u8): rt.u8 => { - const x67: rt.u8 = _2149; - const _6132: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6132.value, x67 ^ 11); - rt.refMutRelease(_6132); - return x67; - }), (_2150: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2151: rt.u8): rt.u8 => { - const x68: rt.u8 = _2151; - const _6133: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6133.value, x68 ^ 12); - rt.refMutRelease(_6133); - return x68; - })), (_2152: [rt.u8, rt.u8]): boolean => { - return _2152[0] < 128; - })) & 0xff); - } else if (_965 === 3) { - rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2145: rt.u8): rt.u8 => { - const x65: rt.u8 = _2145; - const _6130: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6130.value, x65 ^ 11); - rt.refMutRelease(_6130); - return x65; - }), (_2146: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2147: rt.u8): rt.u8 => { - const x66: rt.u8 = _2147; - const _6131: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6131.value, x66 ^ 12); - rt.refMutRelease(_6131); - return x66; - }))), (_2148: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { - return _2148[0] & 0xff; - })), 238)); - } else if (_965 === 4) { - rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2142: rt.u8): rt.u8 => { - const x63: rt.u8 = _2142; - const _6128: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6128.value, x63 ^ 11); - rt.refMutRelease(_6128); - return x63; - }), (_2143: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2144: rt.u8): rt.u8 => { - const x64: rt.u8 = _2144; - const _6129: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6129.value, x64 ^ 12); - rt.refMutRelease(_6129); - return x64; - })), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); - } else if (_965 === 5) { - rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2139: rt.u8): rt.u8 => { - const x61: rt.u8 = _2139; - const _6126: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6126.value, x61 ^ 11); - rt.refMutRelease(_6126); - return x61; - }), (_2140: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2141: rt.u8): rt.u8 => { - const x62: rt.u8 = _2141; - const _6127: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6127.value, x62 ^ 12); - rt.refMutRelease(_6127); - return x62; - })), n)) & 0xff); - } else if (_965 === 6) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2136: rt.u8): rt.u8 => { - const x59: rt.u8 = _2136; - const _6124: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6124.value, x59 ^ 11); - rt.refMutRelease(_6124); - return x59; - }), (_2137: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2138: rt.u8): rt.u8 => { - const x60: rt.u8 = _2138; - const _6125: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6125.value, x60 ^ 12); - rt.refMutRelease(_6125); - return x60; - })), n)) & 0xff); + } else if (_2298 === 3) { + const _2475: rt.Iter<[rt.u8, rt.u8]> = rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2400: rt.u8): rt.u8 => { + const x85: rt.u8 = _2400; + const _6119: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6119.value, x85 ^ 13); + rt.refMutRelease(_6119); + return x85; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2403: rt.u8): rt.u8 => { + const x86: rt.u8 = _2403; + const _6120: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6120.value, x86 ^ 14); + rt.refMutRelease(_6120); + return x86; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2404: rt.u8): rt.u8 => { + const x87: rt.u8 = _2404; + const _6121: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6121.value, x87 ^ 15); + rt.refMutRelease(_6121); + return x87; + }), "len"), (_2407: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2407[0][0] ^ _2407[1], _2407[0][1]] as [rt.u8, rt.u8]; + }); + const _2494: rt.usize = rt.usizeRem(data.length, 8); + if (_2494 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_2475))) & 0xff); + } else if (_2494 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_2475))), 238, (_2444: [rt.u8, rt.u8]): rt.u8 => { + return _2444[0] ^ _2444[1]; + })); + } else if (_2494 === 2) { + const _2501: (a0: [rt.u8, rt.u8]) => undefined = (p11: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2493(p11)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_2475)), _2501); + } else if (_2494 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2475)), (_2434: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2434[0] as rt.u32, _2434[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_2494 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2475)), (_2429: [rt.u8, rt.u8]): rt.u8 => { + return _2429[0] ^ _2429[1]; + }), "next")), undefined, true); + } else if (_2494 === 5) { + const _2509: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc2: rt.u8, p10: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc2, 3) ^ _2493(p10); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_2475)), 0, _2509)); + } else if (_2494 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2475)), (_2424: [rt.u8, rt.u8]): rt.u8 => { + return _2424[0] ^ _2424[1]; + }), (x95: rt.u8): boolean => { + return x95 === 0; + }) ? 1 : 0); } else { - const p6: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterZip(rt.iterFilter(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2133: rt.u8): rt.u8 => { - const x57: rt.u8 = _2133; - const _6122: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6122.value, x57 ^ 11); - rt.refMutRelease(_6122); - return x57; - }), (_2134: rt.u8): boolean => { - return true; - }), rt.iterMap(rt.iterSlice(rt.byteSliceView(b2)), (_2135: rt.u8): rt.u8 => { - const x58: rt.u8 = _2135; - const _6123: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6123.value, x58 ^ 12); - rt.refMutRelease(_6123); - return x58; - }))); - rt.byteVecPush(out, (rt.peekablePeek(p6) !== undefined ? 1 : 0) ^ (rt.iterCount(p6) & 0xff)); + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_2475), (_2408: [rt.u8, rt.u8]): boolean => { + return _2408[0] > _2408[1]; + }), 238, (i3: rt.usize): rt.u8 => { + return i3 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_2475), (_2411: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2411[0], 3) === 0; + }), 238, (_2412: [rt.u8, rt.u8]): rt.u8 => { + return _2412[0] ^ _2412[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_2475), n), 238, (_2415: [rt.u8, rt.u8]): rt.u8 => { + return _2415[0] ^ _2415[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_2475.next()), 238, (_2416: [rt.u8, rt.u8]): rt.u8 => { + return _2416[0] ^ _2416[1]; + })); } - } - } else if ((kind & 16) === 0) { - const z13: rt.Iter<[rt.u8, rt.u8]> = rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2120: rt.u8): rt.u8 => { - const x43: rt.u8 = _2120; - const _6116: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6116.value, x43 ^ 13); - rt.refMutRelease(_6116); - return x43; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2121: rt.u8): rt.u8 => { - const x44: rt.u8 = _2121; - const _6117: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6117.value, x44 ^ 14); - rt.refMutRelease(_6117); - return x44; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2122: rt.u8): rt.u8 => { - const x45: rt.u8 = _2122; - const _6118: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6118.value, x45 ^ 15); - rt.refMutRelease(_6118); - return x45; - }), "len"), (_2123: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_2123[0][0] ^ _2123[1], _2123[0][1]] as [rt.u8, rt.u8]; - }); - const _1102: rt.usize = rt.usizeRem(data.length, 8); - if (_1102 === 0) { - rt.byteVecPush(out, rt.iterCount(z13) & 0xff); - } else if (_1102 === 1) { - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(z13), 238, (_2132: [rt.u8, rt.u8]): rt.u8 => { - return _2132[0] ^ _2132[1]; - })); - } else if (_1102 === 2) { - rt.iterForEach(z13, (p9: [rt.u8, rt.u8]): undefined => { - rt.byteVecPush(out, _1101(p9)); - }); - } else if (_1102 === 3) { - rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(z13, (_2131: [rt.u8, rt.u8]): rt.u32 => { - return rt.u32Add(_2131[0] as rt.u32, _2131[1] as rt.u32); - }), rt.u32Add, 0)).reverse()), undefined, true); - } else if (_1102 === 4) { - rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(z13, (_2130: [rt.u8, rt.u8]): rt.u8 => { - return _2130[0] ^ _2130[1]; - }), undefined, true)), undefined, true); - } else if (_1102 === 5) { - rt.byteVecPush(out, rt.iterFold(z13, 0, (acc: rt.u8, p8: [rt.u8, rt.u8]): rt.u8 => { - return rt.u8WrappingMul(acc, 3) ^ _1101(p8); - })); - } else if (_1102 === 6) { - rt.byteVecPush(out, rt.iterAny(rt.iterMap(z13, (_2129: [rt.u8, rt.u8]): rt.u8 => { - return _2129[0] ^ _2129[1]; - }), (x53: rt.u8): boolean => { - return x53 === 0; - }) ? 1 : 0); } else { - const z14: rt.Iter<[rt.u8, rt.u8]> = z13; - rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(z14, (_2124: [rt.u8, rt.u8]): boolean => { - return _2124[0] > _2124[1]; - }), 238, (i2: rt.usize): rt.u8 => { - return i2 & 0xff; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(z14, (_2125: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2125[0], 3) === 0; - }), 238, (_2126: [rt.u8, rt.u8]): rt.u8 => { - return _2126[0] ^ _2126[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(z14, n), 238, (_2127: [rt.u8, rt.u8]): rt.u8 => { - return _2127[0] ^ _2127[1]; - })); - rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(z14.next()), 238, (_2128: [rt.u8, rt.u8]): rt.u8 => { - return _2128[0] ^ _2128[1]; - })); - } - } else { - const _1140: rt.usize = rt.usizeRem(data.length, 8); - if (_1140 === 0) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2115: rt.u8): rt.u8 => { - const x38: rt.u8 = _2115; - const _6112: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6112.value, x38 ^ 13); - rt.refMutRelease(_6112); - return x38; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2116: rt.u8): rt.u8 => { - const x39: rt.u8 = _2116; + const _2528: rt.Iter<[rt.u8, rt.u8]> = rt.iterSkip(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2350: rt.u8): rt.u8 => { + const x71: rt.u8 = _2350; const _6113: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6113.value, x39 ^ 14); + rt.byteVecPush(_6113.value, x71 ^ 13); rt.refMutRelease(_6113); - return x39; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2117: rt.u8): rt.u8 => { - const x40: rt.u8 = _2117; + return x71; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2351: rt.u8): rt.u8 => { + const x72: rt.u8 = _2351; const _6114: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6114.value, x40 ^ 15); + rt.byteVecPush(_6114.value, x72 ^ 14); rt.refMutRelease(_6114); - return x40; - }), "len"), (_2118: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_2118[0][0] ^ _2118[1], _2118[0][1]] as [rt.u8, rt.u8]; - }), (_2119: [rt.u8, rt.u8]): boolean => { - return rt.u8Rem(_2119[0], 2) === 0; - })) & 0xff); - } else if (_1140 === 1) { - rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2110: rt.u8): rt.u8 => { - const x33: rt.u8 = _2110; - const _6108: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6108.value, x33 ^ 13); - rt.refMutRelease(_6108); - return x33; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2111: rt.u8): rt.u8 => { - const x34: rt.u8 = _2111; + return x72; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2354: rt.u8): rt.u8 => { + const x73: rt.u8 = _2354; + const _6115: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6115.value, x73 ^ 15); + rt.refMutRelease(_6115); + return x73; + }), "len"), (_2355: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2355[0][0] ^ _2355[1], _2355[0][1]] as [rt.u8, rt.u8]; + }), n); + const _2548: rt.usize = rt.usizeRem(data.length, 8); + if (_2548 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterBorrow(rt.iterBoxed(_2528))) & 0xff); + } else if (_2548 === 1) { + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterLast(rt.iterBorrow(rt.iterBoxed(_2528))), 238, (_2399: [rt.u8, rt.u8]): rt.u8 => { + return _2399[0] ^ _2399[1]; + })); + } else if (_2548 === 2) { + const _2555: (a0: [rt.u8, rt.u8]) => undefined = (p9: [rt.u8, rt.u8]): undefined => { + rt.byteVecPush(out, _2547(p9)); + }; + rt.iterForEach(rt.iterBorrow(rt.iterBoxed(_2528)), _2555); + } else if (_2548 === 3) { + rt.iterExtendBytes(out, rt.iterSlice(rt.u32ToBeBytes(rt.iterSum(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2528)), (_2397: [rt.u8, rt.u8]): rt.u32 => { + return rt.u32Add(_2397[0] as rt.u32, _2397[1] as rt.u32); + }), rt.u32Add, 0)).reverse()), undefined, true); + } else if (_2548 === 4) { + rt.iterExtendBytes(out, rt.byteVecIntoIter(rt.iterToByteVec(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2528)), (_2394: [rt.u8, rt.u8]): rt.u8 => { + return _2394[0] ^ _2394[1]; + }), "next")), undefined, true); + } else if (_2548 === 5) { + const _2563: (a0: rt.u8, a1: [rt.u8, rt.u8]) => rt.u8 = (acc: rt.u8, p8: [rt.u8, rt.u8]): rt.u8 => { + return rt.u8WrappingMul(acc, 3) ^ _2547(p8); + }; + rt.byteVecPush(out, rt.iterFold(rt.iterBorrow(rt.iterBoxed(_2528)), 0, _2563)); + } else if (_2548 === 6) { + rt.byteVecPush(out, rt.iterAny(rt.iterMap(rt.iterBorrow(rt.iterBoxed(_2528)), (_2386: [rt.u8, rt.u8]): rt.u8 => { + return _2386[0] ^ _2386[1]; + }), (x81: rt.u8): boolean => { + return x81 === 0; + }) ? 1 : 0); + } else { + rt.byteVecPush(out, option_mapOr$02k4ito(rt.iterPosition(rt.iterBoxed(_2528), (_2358: [rt.u8, rt.u8]): boolean => { + return _2358[0] > _2358[1]; + }), 238, (i2: rt.usize): rt.u8 => { + return i2 & 0xff; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterFind(rt.iterBoxed(_2528), (_2359: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2359[0], 3) === 0; + }), 238, (_2366: [rt.u8, rt.u8]): rt.u8 => { + return _2366[0] ^ _2366[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterNth(rt.iterBoxed(_2528), n), 238, (_2371: [rt.u8, rt.u8]): rt.u8 => { + return _2371[0] ^ _2371[1]; + })); + rt.byteVecPush(out, option_mapOr$0mmpeqx(rt.iterToOption(_2528.next()), 238, (_2376: [rt.u8, rt.u8]): rt.u8 => { + return _2376[0] ^ _2376[1]; + })); + } + } + } else { + const _2581: rt.usize = rt.usizeRem(data.length, 8); + if (_2581 === 0) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilter(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2340: rt.u8): rt.u8 => { + const x66: rt.u8 = _2340; const _6109: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6109.value, x34 ^ 14); + rt.byteVecPush(_6109.value, x66 ^ 13); rt.refMutRelease(_6109); - return x34; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2112: rt.u8): rt.u8 => { - const x35: rt.u8 = _2112; + return x66; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2342: rt.u8): rt.u8 => { + const x67: rt.u8 = _2342; const _6110: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6110.value, x35 ^ 15); + rt.byteVecPush(_6110.value, x67 ^ 14); rt.refMutRelease(_6110); - return x35; - }), "len"), (_2113: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_2113[0][0] ^ _2113[1], _2113[0][1]] as [rt.u8, rt.u8]; - }), (_2114: [rt.u8, rt.u8]): rt.u8 | undefined => { - return rt.u8CheckedSub(_2114[0], _2114[1]); + return x67; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2343: rt.u8): rt.u8 => { + const x68: rt.u8 = _2343; + const _6111: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6111.value, x68 ^ 15); + rt.refMutRelease(_6111); + return x68; + }), "len"), (_2346: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2346[0][0] ^ _2346[1], _2346[0][1]] as [rt.u8, rt.u8]; + }), (_2347: [rt.u8, rt.u8]): boolean => { + return rt.u8Rem(_2347[0], 2) === 0; })) & 0xff); - } else if (_1140 === 2) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2105: rt.u8): rt.u8 => { - const x28: rt.u8 = _2105; - const _6104: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6104.value, x28 ^ 13); - rt.refMutRelease(_6104); - return x28; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2106: rt.u8): rt.u8 => { - const x29: rt.u8 = _2106; + } else if (_2581 === 1) { + rt.byteVecPush(out, rt.iterCount(rt.iterFilterMap(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2309: rt.u8): rt.u8 => { + const x61: rt.u8 = _2309; const _6105: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6105.value, x29 ^ 14); + rt.byteVecPush(_6105.value, x61 ^ 13); rt.refMutRelease(_6105); - return x29; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2107: rt.u8): rt.u8 => { - const x30: rt.u8 = _2107; + return x61; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2314: rt.u8): rt.u8 => { + const x62: rt.u8 = _2314; const _6106: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6106.value, x30 ^ 15); + rt.byteVecPush(_6106.value, x62 ^ 14); rt.refMutRelease(_6106); - return x30; - }), "len"), (_2108: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_2108[0][0] ^ _2108[1], _2108[0][1]] as [rt.u8, rt.u8]; - }), (_2109: [rt.u8, rt.u8]): boolean => { - return _2109[0] < 128; + return x62; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2319: rt.u8): rt.u8 => { + const x63: rt.u8 = _2319; + const _6107: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6107.value, x63 ^ 15); + rt.refMutRelease(_6107); + return x63; + }), "len"), (_2329: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2329[0][0] ^ _2329[1], _2329[0][1]] as [rt.u8, rt.u8]; + }), (_2337: [rt.u8, rt.u8]): rt.u8 | undefined => { + return rt.u8CheckedSub(_2337[0], _2337[1]); })) & 0xff); - } else if (_1140 === 3) { - rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2100: rt.u8): rt.u8 => { - const x24: rt.u8 = _2100; - const _6100: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6100.value, x24 ^ 13); - rt.refMutRelease(_6100); - return x24; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2101: rt.u8): rt.u8 => { - const x25: rt.u8 = _2101; + } else if (_2581 === 2) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkipWhile(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2287: rt.u8): rt.u8 => { + const x56: rt.u8 = _2287; const _6101: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6101.value, x25 ^ 14); + rt.byteVecPush(_6101.value, x56 ^ 13); rt.refMutRelease(_6101); - return x25; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2102: rt.u8): rt.u8 => { - const x26: rt.u8 = _2102; + return x56; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2289: rt.u8): rt.u8 => { + const x57: rt.u8 = _2289; const _6102: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_6102.value, x26 ^ 15); + rt.byteVecPush(_6102.value, x57 ^ 14); rt.refMutRelease(_6102); - return x26; - }), "len"), (_2103: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_2103[0][0] ^ _2103[1], _2103[0][1]] as [rt.u8, rt.u8]; - })), (_2104: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { - return _2104[0] & 0xff; + return x57; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2291: rt.u8): rt.u8 => { + const x58: rt.u8 = _2291; + const _6103: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_6103.value, x58 ^ 15); + rt.refMutRelease(_6103); + return x58; + }), "len"), (_2292: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2292[0][0] ^ _2292[1], _2292[0][1]] as [rt.u8, rt.u8]; + }), (_2303: [rt.u8, rt.u8]): boolean => { + return _2303[0] < 128; + })) & 0xff); + } else if (_2581 === 3) { + rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterLast(rt.iterMap(rt.iterEnumerate(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2271: rt.u8): rt.u8 => { + const x52: rt.u8 = _2271; + const _682: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_682.value, x52 ^ 13); + rt.refMutRelease(_682); + return x52; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2275: rt.u8): rt.u8 => { + const x53: rt.u8 = _2275; + const _692: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_692.value, x53 ^ 14); + rt.refMutRelease(_692); + return x53; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2276: rt.u8): rt.u8 => { + const x54: rt.u8 = _2276; + const _697: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_697.value, x54 ^ 15); + rt.refMutRelease(_697); + return x54; + }), "len"), (_2282: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2282[0][0] ^ _2282[1], _2282[0][1]] as [rt.u8, rt.u8]; + })), (_2286: [rt.usize, [rt.u8, rt.u8]]): rt.u8 => { + return _2286[0] & 0xff; })), 238)); - } else if (_1140 === 4) { - rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_279: rt.u8): rt.u8 => { - const x20: rt.u8 = _279; - const _671: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_671.value, x20 ^ 13); - rt.refMutRelease(_671); - return x20; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_284: rt.u8): rt.u8 => { - const x21: rt.u8 = _284; - const _680: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_680.value, x21 ^ 14); - rt.refMutRelease(_680); - return x21; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_294: rt.u8): rt.u8 => { - const x22: rt.u8 = _294; - const _685: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_685.value, x22 ^ 15); - rt.refMutRelease(_685); - return x22; - }), "len"), (_299: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_299[0][0] ^ _299[1], _299[0][1]] as [rt.u8, rt.u8]; + } else if (_2581 === 4) { + rt.byteVecPush(out, rt.iterCount(rt.iterChain(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2243: rt.u8): rt.u8 => { + const x48: rt.u8 = _2243; + const _654: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_654.value, x48 ^ 13); + rt.refMutRelease(_654); + return x48; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2247: rt.u8): rt.u8 => { + const x49: rt.u8 = _2247; + const _663: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_663.value, x49 ^ 14); + rt.refMutRelease(_663); + return x49; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2258: rt.u8): rt.u8 => { + const x50: rt.u8 = _2258; + const _668: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_668.value, x50 ^ 15); + rt.refMutRelease(_668); + return x50; + }), "len"), (_2262: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2262[0][0] ^ _2262[1], _2262[0][1]] as [rt.u8, rt.u8]; }), rt.iterSlice([[1, 2] as [rt.u8, rt.u8]]))) & 0xff); - } else if (_1140 === 5) { - rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_251: rt.u8): rt.u8 => { - const x16: rt.u8 = _251; - const _642: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_642.value, x16 ^ 13); - rt.refMutRelease(_642); - return x16; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_256: rt.u8): rt.u8 => { - const x17: rt.u8 = _256; - const _651: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_651.value, x17 ^ 14); - rt.refMutRelease(_651); - return x17; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_265: rt.u8): rt.u8 => { - const x18: rt.u8 = _265; - const _656: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_656.value, x18 ^ 15); - rt.refMutRelease(_656); - return x18; - }), "len"), (_270: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_270[0][0] ^ _270[1], _270[0][1]] as [rt.u8, rt.u8]; + } else if (_2581 === 5) { + rt.byteVecPush(out, rt.iterCount(rt.iterTake(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2216: rt.u8): rt.u8 => { + const x44: rt.u8 = _2216; + const _629: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_629.value, x44 ^ 13); + rt.refMutRelease(_629); + return x44; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2220: rt.u8): rt.u8 => { + const x45: rt.u8 = _2220; + const _632: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_632.value, x45 ^ 14); + rt.refMutRelease(_632); + return x45; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2230: rt.u8): rt.u8 => { + const x46: rt.u8 = _2230; + const _635: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_635.value, x46 ^ 15); + rt.refMutRelease(_635); + return x46; + }), "len"), (_2234: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2234[0][0] ^ _2234[1], _2234[0][1]] as [rt.u8, rt.u8]; }), n)) & 0xff); - } else if (_1140 === 6) { - rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_232: rt.u8): rt.u8 => { - const x12: rt.u8 = _232; - const _611: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_611.value, x12 ^ 13); - rt.refMutRelease(_611); - return x12; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_235: rt.u8): rt.u8 => { - const x13: rt.u8 = _235; - const _623: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_623.value, x13 ^ 14); - rt.refMutRelease(_623); - return x13; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_236: rt.u8): rt.u8 => { - const x14: rt.u8 = _236; - const _628: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_628.value, x14 ^ 15); - rt.refMutRelease(_628); - return x14; - }), "len"), (_239: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_239[0][0] ^ _239[1], _239[0][1]] as [rt.u8, rt.u8]; + } else if (_2581 === 6) { + rt.byteVecPush(out, rt.iterCount(rt.iterSkip(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2190: rt.u8): rt.u8 => { + const x40: rt.u8 = _2190; + const _613: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_613.value, x40 ^ 13); + rt.refMutRelease(_613); + return x40; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2194: rt.u8): rt.u8 => { + const x41: rt.u8 = _2194; + const _621: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_621.value, x41 ^ 14); + rt.refMutRelease(_621); + return x41; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2203: rt.u8): rt.u8 => { + const x42: rt.u8 = _2203; + const _624: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_624.value, x42 ^ 15); + rt.refMutRelease(_624); + return x42; + }), "len"), (_2207: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2207[0][0] ^ _2207[1], _2207[0][1]] as [rt.u8, rt.u8]; }), n)) & 0xff); } else { - const p7: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_224: rt.u8): rt.u8 => { - const x8: rt.u8 = _224; + const p7: rt.Peekable<[rt.u8, rt.u8]> = rt.iterPeekable(rt.iterMap(rt.iterZip(rt.iterZip(rt.iterMap(rt.iterSlice(rt.byteSliceView(a2)), (_2167: rt.u8): rt.u8 => { + const x36: rt.u8 = _2167; const _62: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_62.value, x8 ^ 13); + rt.byteVecPush(_62.value, x36 ^ 13); rt.refMutRelease(_62); - return x8; - }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_227: rt.u8): rt.u8 => { - const x9: rt.u8 = _227; - const _63: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_63.value, x9 ^ 14); - rt.refMutRelease(_63); - return x9; - }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_228: rt.u8): rt.u8 => { - const x10: rt.u8 = _228; - const _66: rt.RefCell = rt.refCellBorrowMut(log); - rt.byteVecPush(_66.value, x10 ^ 15); - rt.refMutRelease(_66); - return x10; - }), "len"), (_231: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { - return [_231[0][0] ^ _231[1], _231[0][1]] as [rt.u8, rt.u8]; + return x36; + }), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(b2))), (_2170: rt.u8): rt.u8 => { + const x37: rt.u8 = _2170; + const _65: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_65.value, x37 ^ 14); + rt.refMutRelease(_65); + return x37; + }), "len"), rt.iterMap(rt.iterRev(rt.iterSlice(rt.byteSliceView(a2))), (_2173: rt.u8): rt.u8 => { + const x38: rt.u8 = _2173; + const _67: rt.RefCell = rt.refCellBorrowMut(log); + rt.byteVecPush(_67.value, x38 ^ 15); + rt.refMutRelease(_67); + return x38; + }), "len"), (_2176: [[rt.u8, rt.u8], rt.u8]): [rt.u8, rt.u8] => { + return [_2176[0][0] ^ _2176[1], _2176[0][1]] as [rt.u8, rt.u8]; })); rt.byteVecPush(out, (rt.peekablePeek(p7) !== undefined ? 1 : 0) ^ (rt.iterCount(p7) & 0xff)); } } - const _1318: rt.RefCell = rt.refCellBorrow(log); - rt.byteVecExtendFromSlice(out, rt.byteVecSlice(_1318.value)); - rt.refRelease(_1318); + const _2759: rt.RefCell = rt.refCellBorrow(log); + rt.byteVecExtendFromSlice(out, rt.byteVecSlice(_2759.value)); + rt.refRelease(_2759); } /** @@ -9534,7 +11446,7 @@ export function lent(data: rt.ByteSlice, out: rt.ByteVec): void { rt.byteVecPush(out, option_unwrapOr$0r2bmpr(rt.iterToOption(erased.next()), 238)); rt.iterExtendBytes(out, range, undefined, true); let boxed: rt.Iter = rt.iterDyn(rt.iterRev(rt.iterSlice(rt.byteSliceView(data)))); - rt.iterExtendBytes(out, rt.iterTake(rt.iterBorrow(boxed), n), "next"); + rt.iterExtendBytes(out, rt.iterTake(rt.iterBorrow(rt.iterBoxed(boxed)), n), "next"); rt.iterExtendBytes(out, rt.iterTake(boxed, 1), "next"); const rest: rt.Iter = rt.iterSlice(rt.byteSliceView(data)); rt.iterExtendBytes(out, rt.byteVecIntoIter(halves$mut_iter_Copied_slice_Iter_u8(rest, n)), undefined, true); diff --git a/ts/fixtures/lang/iters/src/iters.rs b/ts/fixtures/lang/iters/src/iters.rs index d66cee380..bc246dbeb 100644 --- a/ts/fixtures/lang/iters/src/iters.rs +++ b/ts/fixtures/lang/iters/src/iters.rs @@ -1190,7 +1190,8 @@ fn at(items: &[T], i: usize) -> Option<&T> { /// A zip of each kind std specializes, of sides whose closures log each item they make, and /// either side shorter or empty: by index (`TrustedRandomAccess`), folded by its size hint /// (`TrustedLen`, or only `TrustedRandomAccessNoCoerce`), and by `next` (neither), read by -/// each of std's consumers, and through adaptors that fold it or read it by `try_fold`. +/// each of std's consumers, through adaptors that fold it or read it by `try_fold`, and +/// through a box. pub fn zips(kind: u8, data: &[u8], out: &mut Vec) { let split = (kind >> 5) as usize % (data.len() + 1); let (a, b) = data.split_at(split); @@ -1228,6 +1229,7 @@ pub fn zips(kind: u8, data: &[u8], out: &mut Vec) { 5 => out.push(z.fold(0u8, |acc, p| acc.wrapping_mul(3) ^ at(p))), 6 => out.push(z.map(at).any(|x| x == 0) as u8), _ => { + #[allow(unused_mut, reason = "a zip read through a `&mut` needs none")] let mut z = z; out.push(z.position(|(x, y)| x > y).map_or(0xee, |i| i as u8)); out.push(z.find(|&(x, _)| x % 3 == 0).map_or(0xee, at)); @@ -1237,11 +1239,19 @@ pub fn zips(kind: u8, data: &[u8], out: &mut Vec) { } }}; } - // `$zip` and then adaptors of it, each folding it or reading it by `try_fold`. + // `$zip` and then adaptors of it, each folding it or reading it by `try_fold`, or a box + // of it, owned or borrowed, which std's reads by `next` for each consumer but `nth` and + // `last`. macro_rules! adapt { ($zip:expr) => {{ match kind & 16 { - 0 => read!($zip), + 0 => match data.len() / 8 % 5 { + 0 => read!($zip), + 1 => read!(Box::new($zip)), + 2 => read!(Box::new($zip.skip(n))), + 3 => read!(&mut Box::new($zip)), + _ => read!(&mut Box::new($zip.skip(n))), + }, _ => match data.len() % 8 { 0 => out.push($zip.filter(|&(x, _)| x % 2 == 0).count() as u8), 1 => out.push($zip.filter_map(|(x, y)| x.checked_sub(y)).count() as u8), diff --git a/ts/runtime/rt/iter.ts b/ts/runtime/rt/iter.ts index f256f417f..3b6656fc8 100644 --- a/ts/runtime/rt/iter.ts +++ b/ts/runtime/rt/iter.ts @@ -598,6 +598,11 @@ export function iterBorrow(it: Iter): Iter { return new Borrowed(it); } +/** A box of the sized iterator `it`, read as std's `Iterator` for `Box` reads it. */ +export function iterBoxed(it: Iter): Iter { + return new Boxed(it); +} + /** * A `dyn Iterator` of `it`: what std's vtable has, as `it` does it, and the rest by `next`, as * std's default methods read a trait object. It drops `it` as it drops. @@ -916,6 +921,7 @@ export function iterCount(it: Iter): number { export function iterLast(it: Iter): T | undefined; export function iterLast(it: Iter, none: None): T | None; export function iterLast(it: Iter, none?: None): T | undefined | None { + if (it instanceof Boxed) return iterLast(it.inner, none as None); const folded = it.folded(true); let last: T | Done = DONE; for (let item = folded.next(); item !== DONE; item = folded.next()) last = item; @@ -1545,6 +1551,7 @@ function count(it: Iter, drop: Drop | undefined): number { */ function last(it: Iter, drop: Drop | undefined): T | Done { if (it instanceof FromNext && it.own?.last !== undefined) return it.taken(it.own.last); + if (it instanceof Boxed) return last(it.inner, drop); if ((it instanceof SliceIter && drop !== undefined) || (it instanceof BTreeIter && it.back)) { // std's, of a `Vec`'s or an array's, and of a B-tree's `into_keys` and // `into_values`: the last item, and then the rest drop with it. @@ -2193,6 +2200,56 @@ class Dyn extends Iter implements Disposable { } } +/** + * A box of a sized iterator, which forwards only what std's `impl Iterator for Box` + * does, `last` included, as std's specializes it for a sized `I`, and reads the rest by + * `next` and `next_back`. It drops `inner` as it drops. + */ +class Boxed extends Iter implements Disposable { + readonly inner: Iter; + + constructor(inner: Iter) { + super(); + this.inner = inner; + } + + override sizeHint(): SizeHint { + return this.inner.sizeHint(); + } + + next(): T | Done { + return this.inner.next(); + } + + nextBack(): T | Done { + return this.inner.nextBack(); + } + + len(): number { + return this.inner.len(); + } + + override nth(n: number, drop?: Drop): T | Done { + return this.inner.nth(n, drop); + } + + override nthBack(n: number, drop?: Drop): T | Done { + return this.inner.nthBack(n, drop); + } + + remaining(): Iterable { + return this.inner.remaining(); + } + + clone(h?: Clones): Iter { + return new Boxed(this.inner.clone(h)); + } + + [Symbol.dispose](): void { + dispose(this.inner); + } +} + /** * An iterator borrowed by `&mut`, which forwards only what std's `impl Iterator for &mut * I` does, its folds included, as std's specializes them for a sized `I`, and which diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index dacdd502a..a75c87477 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -368,13 +368,12 @@ fn folds_own<'tcx>(b: &Body<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool { /// The `rt.Own` of the crate's iterator of type `ty`: each method of `OWN` but `next` that /// it has of its own, as a function of its source, and those in `BY_VALUE` only if it is -/// `owned`, of which only `last` if `boxed`, as std's `Iterator` for a box forwards no other. -/// `undefined` if it has none. -fn own_methods<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, owned: bool, boxed: bool, span: Span) -> Expr { +/// `owned`. `undefined` if it has none. +fn own_methods<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, owned: bool, span: Span) -> Expr { let none = b.t.iter_item(ty.peel_refs()).and_then(|item| b.t.none_arg(item)); let mut props = Vec::new(); for (tr, name) in &OWN[1..] { - if BY_VALUE.contains(&(tr, name)) && (!owned || boxed && *name != "last") { + if !owned && BY_VALUE.contains(&(tr, name)) { continue; } let Some(instance) = own_method(b, ty, tr, name) else { @@ -487,9 +486,13 @@ impl<'tcx> Body<'_, '_, 'tcx> { /// each, and the crate's own iterator what drops it. pub fn into_iter<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, value: Expr, span: Span) -> Option { let tcx = b.t.tcx; + let boxed = boxes_iter(b, ty); let (peeled, value) = peel_iter(b, ty, value); - // std's `Iterator` for a box forwards only some of the crate's own methods. - let boxed = peeled != ty && !peeled.is_ref(); + // A box, by value, which std's `Iterator` for `Box` reads by `next` where it forwards + // nothing else. + if peeled != ty && !peeled.is_ref() { + return into_iter(b, peeled, value, span).map(|it| Expr::rt("iterBoxed", vec![it])); + } let (ty, value) = match unbox_ref(tcx, peeled) { unboxed if unboxed != peeled => (unboxed, b.t.pointee_value(peeled, value)), _ => (peeled, value), @@ -514,12 +517,14 @@ pub fn into_iter<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, value: Expr, sp true => b.t.dropper(ty, span), false => Expr::undefined(), }; - let own = own_methods(b, ty, owned, boxed, span); + let own = own_methods(b, ty, owned, span); Expr::rt("iterFrom", tail(vec![value, next], vec![drop, own])) } // One borrowed by `&mut`, which std's adaptors may drop once it ends, but which // is its owner's to drop, and which a consumer reads on through the borrow - // rather than by its by-value overrides, as `Chain::count` ends both halves. + // rather than by its by-value overrides, as `Chain::count` ends both halves. Through + // a box, which folds by `next`. + None if !owned && boxed => Expr::rt("iterBorrow", vec![Expr::rt("iterBoxed", vec![value])]), None if !owned => Expr::rt("iterBorrow", vec![value]), None => value, }); @@ -648,6 +653,14 @@ pub fn unbox_ref<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> Ty<'tcx> { } } +/// Whether `ty`, read through each reference, is a box of an iterator. +fn boxes_iter<'tcx>(b: &Body<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool { + match *ty.kind() { + ty::Ref(_, inner, _) => boxes_iter(b, inner), + _ => ty.boxed_ty().is_some_and(|held| b.t.iter_item(held).is_some()), + } +} + /// Whether `ty` is a `&mut` to a `&mut`, which is an `rt.Place` of it, or a box of one, /// which is what it holds. pub fn through_mut(ty: Ty<'_>) -> bool { From afe5a215c4e8268f73d977fc669f9d8c14046831 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 22:02:51 -0800 Subject: [PATCH 13/13] test(ts): dyns' borrowed boxes read as rt.iterBoxed Co-Authored-By: Claude Opus 5.5 --- ts/fixtures/lang/dyns/expected/dyns.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ts/fixtures/lang/dyns/expected/dyns.ts b/ts/fixtures/lang/dyns/expected/dyns.ts index 94771d3aa..60b8e1ad0 100644 --- a/ts/fixtures/lang/dyns/expected/dyns.ts +++ b/ts/fixtures/lang/dyns/expected/dyns.ts @@ -877,7 +877,7 @@ export function iters(data: rt.ByteSlice, out: rt.ByteVec): void { const first: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterFrom(inner, Countdown.next$iter_Iterator)).next()); const second: rt.u8 | undefined = rt.iterToOption(Countdown.next$iter_Iterator(inner)); const erased: rt.Iter = rt.iterDyn(new rt.Range(rt.u8Rem(a, 4), rt.u8Rem(b, 8))); - const third: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterBorrow(erased)).next()); + const third: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterBorrow(rt.iterBoxed(erased))).next()); const doubled: Countdown.Countdown = new Countdown.Countdown(rt.u8Rem(a, 8)); const fourth: rt.u8 | undefined = rt.iterToOption(rt.iterDyn(rt.iterFrom(doubled, Countdown.next$iter_Iterator)).next()); const mapped: rt.ByteVec = rt.iterToByteVec(rt.iterMap(rt.iterBoxed(rt.iterFrom(new Countdown.Countdown(rt.u8Rem(b, 8)), Countdown.next$iter_Iterator, rt.drop)), (x3: rt.u8): rt.u8 => { @@ -894,7 +894,7 @@ export function iters(data: rt.ByteSlice, out: rt.ByteVec): void { const _262: [Countdown.Countdown, rt.Range] = [new Countdown.Countdown(rt.u8Rem(a, 8)), new rt.Range(rt.u8Rem(a, 4), rt.u8Rem(b, 8))]; const own2: Countdown.Countdown = _262[0]; const range: rt.Range = _262[1]; - const hints: [rt.usize, rt.usize | undefined][] = rt.arrayMap([rt.iterDyn(rt.iterFrom(own2, Countdown.next$iter_Iterator)), rt.iterDyn(rt.iterBorrow(range))], (it: rt.Iter): [rt.usize, rt.usize | undefined] => { + const hints: [rt.usize, rt.usize | undefined][] = rt.arrayMap([rt.iterDyn(rt.iterFrom(own2, Countdown.next$iter_Iterator)), rt.iterDyn(rt.iterBorrow(rt.iterBoxed(range)))], (it: rt.Iter): [rt.usize, rt.usize | undefined] => { return it.sizeHint(); }); let held: Countdown.Countdown = new Countdown.Countdown(rt.u8Rem(b, 8)); @@ -918,7 +918,7 @@ export function iters(data: rt.ByteSlice, out: rt.ByteVec): void { }), new rt.Range(0, rt.u8Rem(b, 4)), "len"); }; const owned: [rt.u8, rt.u8][] = rt.iterToArray(rt.iterBoxed(zipped()), "next", 2); - const lent3: [rt.u8, rt.u8][] = rt.iterToArray(rt.iterBorrow(zipped()), "next", 2); + const lent3: [rt.u8, rt.u8][] = rt.iterToArray(rt.iterBorrow(rt.iterBoxed(zipped())), "next", 2); const _339: rt.RefCell = rt.refCellBorrow(seen2); const args18: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtList(owned, f, (value: [rt.u8, rt.u8], f: rt.Formatter) => rt.fmtTuple([(f: rt.Formatter) => rt.u8Debug(value[0], f), (f: rt.Formatter) => rt.u8Debug(value[1], f)], f)), (f: rt.Formatter) => rt.fmtList(lent3, f, (value: [rt.u8, rt.u8], f: rt.Formatter) => rt.fmtTuple([(f: rt.Formatter) => rt.u8Debug(value[0], f), (f: rt.Formatter) => rt.u8Debug(value[1], f)], f)), (f: rt.Formatter) => rt.fmtList(rt.byteVecView(_339.value), f, rt.u8Debug)]; const _335: string = rt.fmtFormat([args18[0], " ", args18[1], " ", args18[2], " "]);