From e8a63940b7541da912f59dd1c404e0cfca6f4a40 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 04:06:48 -0800 Subject: [PATCH 1/3] chore(quest): claim quest/m3/ts-drop-order.md Quest-Claim: a234456d49680711 From 9d4e6d8ca53ebca4f2dbae95d2227044172b643c Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 05:24:24 -0800 Subject: [PATCH 2/3] feat(ts): drop the closures std's consumers and entries own where std's do reduce, max_by, min_by, their _by_key forms, is_sorted_by_key, and a map entry's or_insert_with, or_insert_with_key, and and_modify translate a closure that owns a value that drops, dropping it where std's does, proven by the task fixture's new `released` step against native wasm32. Co-Authored-By: Claude Opus 5.5 --- quest/m3/README.md | 2 + quest/m3/ts-closure-calls.md | 24 + quest/m3/ts-drop-order.md | 10 +- quest/m3/ts-string-closures.md | 18 + ts/MIGRATE.md | 3 + ts/README.md | 6 +- ts/fixtures/lang/expected/nested.ts | 16 +- ts/fixtures/lang/expected/orders.ts | 5 +- ts/fixtures/reject/census.md | 1043 +++++++++---------- ts/fixtures/reject/expected.txt | 373 ++++--- ts/fixtures/reject/src/lib.rs | 7 - ts/fixtures/reject/ts.toml | 1 - ts/fixtures/stock/expected/maps.Counted.ts | 25 + ts/fixtures/stock/expected/maps.ts | 135 ++- ts/fixtures/stock/src/maps.rs | 33 +- ts/fixtures/task/expected/drops.ts | 9 + ts/fixtures/task/expected/drops/closures.ts | 5 +- ts/fixtures/task/expected/drops/folds.ts | 5 +- ts/fixtures/task/expected/drops/released.ts | 451 ++++++++ ts/fixtures/task/src/drops.rs | 7 + ts/fixtures/task/src/drops/released.rs | 177 ++++ ts/fixtures/task/src/harness.rs | 3 + ts/fixtures/task/ts.toml | 1 + ts/runtime/rt/collections.ts | 48 +- ts/runtime/rt/iter.ts | 110 +- ts/src/lower/collections.rs | 50 +- ts/src/lower/iter.rs | 58 +- ts/src/lower/library.rs | 33 +- ts/tests/task.ts | 4 + 29 files changed, 1762 insertions(+), 900 deletions(-) create mode 100644 quest/m3/ts-closure-calls.md create mode 100644 quest/m3/ts-string-closures.md create mode 100644 ts/fixtures/stock/expected/maps.Counted.ts create mode 100644 ts/fixtures/task/expected/drops/released.ts create mode 100644 ts/fixtures/task/src/drops/released.rs diff --git a/quest/m3/README.md b/quest/m3/README.md index 5c3286027..ad0ee525a 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -22,6 +22,8 @@ generic std gap is planned here even when moq never calls it. - [Waiting: type-check in process with tsrs](/quest/m3/ts-tsrs.md) - rust2-ts checks bindings through tsrs instead of `tsc` once it is a stable library - [Drop order in std's folds and iterators](/quest/m3/ts-drop-order.md) - the values that drop still refused in std's consumers, flattens, and collects drop as std's do - [A slice of one value behind any &mut](/quest/m3/ts-slice-of-one.md) - `slice::from_mut` and `array::from_mut` of a `&mut u8`, or of an object no place names, translate +- [std's calls of a closure that have no mapping](/quest/m3/ts-closure-calls.md) - `rfold`, `try_fold`, `partition`, `repeat_with`, `sort_by_cached_key`, and `LazyCell::new` translate, dropping what their closures own as std's do +- [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 - [A slice's searches by a closure](/quest/m3/ts-binary-search-by.md) - `binary_search_by`, `binary_search_by_key`, and `partition_point` translate, probing as std's do - [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 diff --git a/quest/m3/ts-closure-calls.md b/quest/m3/ts-closure-calls.md new file mode 100644 index 000000000..aca513fb3 --- /dev/null +++ b/quest/m3/ts-closure-calls.md @@ -0,0 +1,24 @@ +# [M] std's calls of a closure that have no mapping + +## Goal + +[rust2-ts](/ts/README.md) translates std's functions that take a closure and are refused +as "unsupported call" whatever the closure holds, each calling it and dropping what it +owns as std's does, proven by the task fixture's differential tests against native Rust. + +## Plan + +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: + +- `DoubleEndedIterator::rfold`, and `Iterator::try_fold`, `try_for_each`, and `partition`. +- `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`. +- `LazyCell::new`, `Cell::update`, and `RefCell::replace_with` of a value JS copies. + +Each `rt.Iter` has a `fold` and `rfold` that drop what it holds where std's do: a consumer +that takes the iterator by value builds on them, as `rt.iterFold` does. + +Public API: the translator's output, and the runtime's functions each needs. diff --git a/quest/m3/ts-drop-order.md b/quest/m3/ts-drop-order.md index 7655d68f7..ccf8b0ebf 100644 --- a/quest/m3/ts-drop-order.md +++ b/quest/m3/ts-drop-order.md @@ -14,15 +14,11 @@ drop refusal left ([#139](https://github.com/moq-dev/rust2/pull/139)). `DebugLis ranges of bounds that drop, a drain or a B-tree's `range` of a range that drops, a hash map's `into_keys` and `into_values`, and the closures `for_each` and `fold` own landed in [#307](https://github.com/moq-dev/rust2/pull/307), with the task fixture's `inside` step. +The closures `reduce`, `max_by`, `min_by`, their `_by_key` forms, `is_sorted_by_key`, and +a map's entries' `or_insert_with`, `or_insert_with_key`, and `and_modify` own landed in +[#438](https://github.com/moq-dev/rust2/pull/438), with its `released` step. Each left is refused with a span where std's order is one JS's can't follow yet: -- A closure that owns a value that drops given to a std function that takes another - value that drops by value, other than `for_each` and `fold` (`iter::releases`), such as - `reduce`, `max_by_key`, or `partition` of items that drop; one that keeps it other - than in an adaptor; or one that calls it through `FnOnce` other than where `discards` - in `library.rs` says, as `or_insert_with` does (`called_closures`). Each consumer whose - std folds takes a `release` the way `rt.iterFold` does. The reject fixture's - `called_closure` reproduces `or_insert_with`. - A `skip` of a `zip` of two `TrustedRandomAccess` iterators of items that drop, as the reject fixture's `skipped_zip`: std's `Skip` read by index, as a zip by index or `take`'s fold reads it, makes and drops each skipped pair whole, where its `next` skips through diff --git a/quest/m3/ts-string-closures.md b/quest/m3/ts-string-closures.md new file mode 100644 index 000000000..954588891 --- /dev/null +++ b/quest/m3/ts-string-closures.md @@ -0,0 +1,18 @@ +# [S] A closure that drops given to a string's edit or search + +## Goal + +[rust2-ts](/ts/README.md) translates a closure that owns a value that drops given to +`String::retain`, or to `str`'s searches that map as a `Pattern`, such as `contains` and +`split`, dropping it where std's does, proven by the task fixture's differential tests +against native Rust. + +## Plan + +Found beside [drop order](/quest/m3/ts-drop-order.md) in +[#438](https://github.com/moq-dev/rust2/pull/438). The reject fixture's `string_retained` +and `pattern_closure` reproduce them. `String::retain` borrows the string and drops its +closure as it returns. A search that returns an iterator, such as `split`, holds the +pattern until the iterator drops; one that returns a value drops it before returning. + +Public API: the translator's output. diff --git a/ts/MIGRATE.md b/ts/MIGRATE.md index 439d9cade..066f29c42 100644 --- a/ts/MIGRATE.md +++ b/ts/MIGRATE.md @@ -2,6 +2,9 @@ ## Unreleased +- `rt.iterReduce`, `rt.iterMaxBy`, `rt.iterMinBy`, `rt.iterMaxByKey`, and + `rt.iterMinByKey` take whether they own their closure, which they drop where std's do, + before the `rt.None` they take last, as in `rt.iterReduce(it, f, drops, owns, none)`. - `rt.vecCapacity`, `rt.vecReserve`, `rt.vecReserveExact`, and `rt.dequeReserve` are now `Vec::capacity`, `reserve`, and `reserve_exact` and `VecDeque::reserve` of a vector, its element size in bytes last, as in `rt.vecReserve(v, additional, 4)`, not the arithmetic diff --git a/ts/README.md b/ts/README.md index cadf317f4..7a3bef9cb 100644 --- a/ts/README.md +++ b/ts/README.md @@ -842,9 +842,9 @@ behind `&`, `&mut`, `Box`, or `Arc` ([trait objects](/quest/m3/ts-dyn.md)), fail hand-written TS ([bindings](#bindings)). These fail translation: `f16` and `f128`, a `Poll` of a `Poll` of a `Poll`, a future whose output can be pending, an instance of a generic type whose field is a `Poll` of a type parameter that can be pending, a closure that owns a value -that drops given to a std function that drops it beside another value that drops, other -than `for_each` and `fold`, as `reduce` of items that drop does, or keeps it other than in -an iterator adaptor, and values that drop in some iterators ([drop order](/quest/m3/ts-drop-order.md)), a `Cow` of other than `str` or a slice, a std +that drops given to a std function that keeps it other than in an iterator or a +`poll_fn`, or whose mapping doesn't drop it where std's does, and values that drop in some +iterators ([drop order](/quest/m3/ts-drop-order.md)), a `Cow` of other than `str` or a slice, a std function without a mapping of its own that makes or reads an `Option` whose `None` is `rt.None`, as `Iterator::scan` of `Option`s does, an `Option` of an `Option` of `()` or another `Option`, an instance of a generic type whose field is an `Option` of a type parameter diff --git a/ts/fixtures/lang/expected/nested.ts b/ts/fixtures/lang/expected/nested.ts index ff178e363..c841ab9b5 100644 --- a/ts/fixtures/lang/expected/nested.ts +++ b/ts/fixtures/lang/expected/nested.ts @@ -285,22 +285,22 @@ export function consumers(data: rt.ByteSlice, out: rt.ByteVec): void { return option_map$0cs071d(o2, (b4: rt.u8): rt.u8 => { return rt.u8Rem(b4, 4); }); - }, rt.cmpLt(rt.cmpOption(rt.cmp)), undefined, undefined, rt.None))); + }, rt.cmpLt(rt.cmpOption(rt.cmp)), undefined, undefined, undefined, rt.None))); rt.byteVecPush(out, code(rt.iterMinByKey(it(), (o3: rt.u8 | undefined): rt.u8 | undefined => { return option_map$0cs071d(o3, (b5: rt.u8): rt.u8 => { return rt.u8Rem(b5, 4); }); - }, rt.cmpLt(rt.cmpOption(rt.cmp)), undefined, undefined, rt.None))); + }, rt.cmpLt(rt.cmpOption(rt.cmp)), undefined, undefined, undefined, rt.None))); rt.byteVecPush(out, code(rt.iterMaxByKey(it(), (o4: rt.u8 | undefined): rt.u8 | undefined | rt.None => { return option_map$0rbsrz6(o4, (b6: rt.u8): rt.u8 | undefined => { return thenSome$0d5am30(rt.u8Rem(b6, 4) !== 0, rt.u8Rem(b6, 3)); }); - }, rt.cmpLt(rt.cmpOption(rt.cmpOption(rt.cmp), rt.None)), undefined, undefined, rt.None))); + }, rt.cmpLt(rt.cmpOption(rt.cmpOption(rt.cmp), rt.None)), undefined, undefined, undefined, rt.None))); rt.byteVecPush(out, code(rt.iterMinByKey(it(), (o5: rt.u8 | undefined): rt.u8 | undefined | rt.None => { return option_map$0rbsrz6(o5, (b7: rt.u8): rt.u8 | undefined => { return thenSome$0d5am30(rt.u8Rem(b7, 4) !== 0, rt.u8Rem(b7, 3)); }); - }, rt.cmpLt(rt.cmpOption(rt.cmpOption(rt.cmp), rt.None)), undefined, undefined, rt.None))); + }, rt.cmpLt(rt.cmpOption(rt.cmpOption(rt.cmp), rt.None)), undefined, undefined, undefined, rt.None))); rt.byteVecPush(out, code(rt.iterFind(rt.iterSlice(items), (o6: rt.u8 | undefined): boolean => { return o6 === undefined; }, undefined, rt.None))); @@ -322,16 +322,16 @@ export function consumers(data: rt.ByteSlice, out: rt.ByteVec): void { return rt.u8Rem(b10, 4); }); return rt.cmpOption(rt.cmp)(_511, _8); - }, undefined, undefined, rt.None))); + }, undefined, undefined, undefined, rt.None))); rt.byteVecPush(out, code(rt.iterMinBy(it(), (a03: rt.u8 | undefined, a1: rt.u8 | undefined): rt.Ordering => { return rt.cmpOption(rt.cmp)(a03, a1); - }, undefined, undefined, rt.None))); + }, undefined, undefined, undefined, rt.None))); rt.byteVecPush(out, code(rt.iterMaxBy(it(), (_27: rt.u8 | undefined, _318: rt.u8 | undefined): rt.Ordering => { return 0; - }, undefined, undefined, rt.None))); + }, undefined, undefined, undefined, rt.None))); rt.byteVecPush(out, code(rt.iterReduce(it(), (a2: rt.u8 | undefined, b11: rt.u8 | undefined): rt.u8 | undefined => { return xor$0kctyix(a2, b11); - }, undefined, rt.None))); + }, undefined, undefined, rt.None))); const written: rt.Peekable = rt.iterPeekable(it()); const _139: rt.Place | undefined = rt.peekablePeekMut(written, true); if (_139 !== undefined) { diff --git a/ts/fixtures/lang/expected/orders.ts b/ts/fixtures/lang/expected/orders.ts index 0c9a4a0b7..aee95a184 100644 --- a/ts/fixtures/lang/expected/orders.ts +++ b/ts/fixtures/lang/expected/orders.ts @@ -197,14 +197,13 @@ export function sorted(data: rt.ByteSlice, out: rt.ByteVec): void { }), true, rt.drop, rt.drop) ? 1 : 0); const _108: rt.Iter = items(); const captured3 = k; - const _110: (a0: orders_Item.Item) => rt.u8 = rt.closure((x4: orders_Item.Item): rt.u8 => { + rt.byteVecPush(out, rt.iterIsSortedBy(rt.iterMap(_108, rt.closure((x4: orders_Item.Item): rt.u8 => { const _012: rt.u8 = rt.u8Add(x4.key, captured3.key); x4[Symbol.dispose](); return _012; }, (): void => { captured3[Symbol.dispose](); - }); - rt.byteVecPush(out, rt.dropAfter(_110, () => rt.iterIsSortedBy(rt.iterMap(_108, _110), rt.le)) ? 1 : 0); + })), rt.le, true) ? 1 : 0); const captured4 = l; const key: (a0: orders_Item.Item) => rt.u8 = rt.closure((x5: orders_Item.Item): rt.u8 => { const _013: rt.u8 = rt.u8Add(x5.key, captured4.key); diff --git a/ts/fixtures/reject/census.md b/ts/fixtures/reject/census.md index 67e9a15d8..a4775a888 100644 --- a/ts/fixtures/reject/census.md +++ b/ts/fixtures/reject/census.md @@ -1,87 +1,86 @@ # Census of `reject-fixture` -- Refusals: 231 -- Function instances: 293 +- Refusals: 230 +- Function instances: 292 - Generic functions no instance reached, lowered over their type parameters: 13 ## By construct | Count | Construct | First | | ---: | --- | --- | -| 49 | a raw pointer to `_` in `_`, which the crate may put another object in place of | fixtures/reject/src/lib.rs:608:10 | +| 49 | a raw pointer to `_` in `_`, which the crate may put another object in place of | fixtures/reject/src/lib.rs:601:10 | | 25 | unsupported call to `_` | fixtures/reject/src/lib.rs:160:8 | -| 22 | a raw pointer to `_` in a variable assigned again while it may point there | fixtures/reject/src/lib.rs:616:10 | -| 15 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | fixtures/reject/src/lib.rs:1337:33 | -| 15 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | fixtures/reject/src/lib.rs:1655:18 | -| 5 | `_` with a mutable reference to a value JS copies, which its mapping would copy | fixtures/reject/src/lib.rs:1235:22 | -| 5 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | fixtures/reject/src/lib.rs:679:10 | -| 4 | a variant of `_`, which is not supported: either is the same JS string | fixtures/reject/src/lib.rs:331:2 | +| 22 | a raw pointer to `_` in a variable assigned again while it may point there | fixtures/reject/src/lib.rs:609:10 | +| 15 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | fixtures/reject/src/lib.rs:1330:33 | +| 15 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | fixtures/reject/src/lib.rs:1648:18 | +| 5 | `_` with a mutable reference to a value JS copies, which its mapping would copy | fixtures/reject/src/lib.rs:1228:22 | +| 5 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | fixtures/reject/src/lib.rs:672:10 | +| 4 | a variant of `_`, which is not supported: either is the same JS string | fixtures/reject/src/lib.rs:324:2 | | 4 | an assignment through a reference to `_` | fixtures/reject/src/lib.rs:83:2 | | 3 | `_` of `_`, whose `clone_from` is its own, which is not supported yet | fixtures/reject/src/lib.rs:21:4 | | 3 | a copy of a closure that changes what it captured | fixtures/reject/src/lib.rs:224: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:2164:2 | +| 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:2157:2 | | 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 | | 2 | `_` of `_`, whose `None` is `rt.None`, which is not supported yet | fixtures/reject/src/lib.rs:37:4 | | 2 | `_`, a trait object of another crate's trait, which is not supported yet | fixtures/reject/src/lib.rs:11:16 | -| 2 | `_`, a trait object of the generic trait `_`, which is not supported yet | fixtures/reject/src/lib.rs:464:23 | -| 2 | a cast from a pointer to `_` to one to `_`, which reads the bytes of one type as another | fixtures/reject/src/lib.rs:555:27 | -| 2 | a coercion to `_`, which is not supported yet | fixtures/reject/src/lib.rs:455:40 | -| 2 | a raw pointer to a place of `()`, which has no address of its own | fixtures/reject/src/lib.rs:728:15 | +| 2 | `_`, a trait object of the generic trait `_`, which is not supported yet | fixtures/reject/src/lib.rs:457:23 | +| 2 | a cast from a pointer to `_` to one to `_`, which reads the bytes of one type as another | fixtures/reject/src/lib.rs:548:27 | +| 2 | a coercion to `_`, which is not supported yet | fixtures/reject/src/lib.rs:448:40 | +| 2 | a raw pointer to a place of `()`, which has no address of its own | fixtures/reject/src/lib.rs:721:15 | | 2 | an iterator of the crate implementing `_`, which is not supported yet | fixtures/reject/src/lib.rs:145:1 | -| 2 | comparing pointers to `_`, each a place JS makes of its own | fixtures/reject/src/lib.rs:596:2 | +| 2 | comparing pointers to `_`, each a place JS makes of its own | fixtures/reject/src/lib.rs:589: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:326:4 | -| 2 | unsupported type `_` from another crate | fixtures/reject/src/lib.rs:438:32 | -| 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | fixtures/reject/src/lib.rs:761:2 | -| 1 | `BufMut::put` of `_` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported | fixtures/reject/src/lib.rs:394:2 | -| 1 | `BufMut::put` of `_` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported | fixtures/reject/src/lib.rs:389:2 | -| 1 | `Bytes::from_owner` of `_`, which would drop with the last clone of what it makes, which is not supported | fixtures/reject/src/lib.rs:374:2 | -| 1 | `Extend` of `_` by `_`, whose `_` of `_` is not supported yet | fixtures/reject/src/lib.rs:1272:31 | +| 2 | passing `_`, which drops, to `_`, which is not supported yet | fixtures/reject/src/lib.rs:319:4 | +| 2 | unsupported type `_` from another crate | fixtures/reject/src/lib.rs:431:32 | +| 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | fixtures/reject/src/lib.rs:754:2 | +| 1 | `BufMut::put` of `_` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported | fixtures/reject/src/lib.rs:387:2 | +| 1 | `BufMut::put` of `_` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported | fixtures/reject/src/lib.rs:382:2 | +| 1 | `Bytes::from_owner` of `_`, which would drop with the last clone of what it makes, which is not supported | fixtures/reject/src/lib.rs:367:2 | +| 1 | `Extend` of `_` by `_`, whose `_` of `_` is not supported yet | fixtures/reject/src/lib.rs:1265:31 | | 1 | `Pointer` formatting, as in `{:p}`, is not supported | fixtures/reject/src/lib.rs:49:2 | | 1 | `_` is not supported: its `Pending` and `Ready` would both be `rt.OuterPending` | fixtures/reject/src/lib.rs:72:20 | | 1 | `_` is not supported: its field `_` is `_`, typed `_`, whose `None` would be `rt.None` as `_` | fixtures/reject/src/lib.rs:31:2 | -| 1 | `_` is not supported: its field `_` is `_`, typed `_`, whose `Pending` would be `rt.OuterPending` as `_` | fixtures/reject/src/lib.rs:502:2 | +| 1 | `_` is not supported: its field `_` is `_`, typed `_`, whose `Pending` would be `rt.OuterPending` as `_` | fixtures/reject/src/lib.rs:495:2 | | 1 | `_` of `_` by `_`, which is not supported yet | fixtures/reject/src/lib.rs:253:6 | -| 1 | `_` of `_`, which is not supported yet | fixtures/reject/src/lib.rs:538:4 | +| 1 | `_` of `_`, which is not supported yet | fixtures/reject/src/lib.rs:531:4 | | 1 | `_`, which is not supported yet | fixtures/reject/src/lib.rs:261:9 | -| 1 | `_`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported | fixtures/reject/src/lib.rs:383:6 | -| 1 | `clone_from` of `_`, whose items' `clone_from` is their own, which is not supported yet | fixtures/reject/src/lib.rs:2118:4 | -| 1 | `collect` of `_`, which sorts by `_`'s own `Ord`, of entries that drop, which is not supported yet | fixtures/reject/src/lib.rs:955:22 | +| 1 | `_`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported | fixtures/reject/src/lib.rs:376:6 | +| 1 | `clone_from` of `_`, whose items' `clone_from` is their own, which is not supported yet | fixtures/reject/src/lib.rs:2111:4 | +| 1 | `collect` of `_`, which sorts by `_`'s own `Ord`, of entries that drop, which is not supported yet | fixtures/reject/src/lib.rs:948:22 | | 1 | `fmt::Arguments` with a placeholder, or not made in place, written to `_`'s own `fmt::Write`, which is not supported yet: std splits what a placeholder writes into `write_str` calls the runtime does not make | fixtures/reject/src/lib.rs:55:10 | | 1 | a `collect` in place of `_`, a zip std reads by index, holding values that drop, which is not supported yet | fixtures/reject/src/lib.rs:209:40 | | 1 | a `skip` of `_`, a zip std reads by index, of items that drop, which is not supported yet | fixtures/reject/src/lib.rs:202:8 | | 1 | a cast from `_` to `_` | fixtures/reject/src/lib.rs:68:2 | -| 1 | a cast from `_` to `_`, which reads the bytes of one type as another | fixtures/reject/src/lib.rs:1713:33 | -| 1 | a coercion of `_` to `_`, a pointer to a slice | fixtures/reject/src/lib.rs:1714:28 | +| 1 | a cast from `_` to `_`, which reads the bytes of one type as another | fixtures/reject/src/lib.rs:1706:33 | +| 1 | a coercion of `_` to `_`, a pointer to a slice | fixtures/reject/src/lib.rs:1707:28 | | 1 | a coercion to `_` | fixtures/reject/src/lib.rs:291:2 | -| 1 | a constant of type `_`, a pointer into memory translation can't name | fixtures/reject/src/lib.rs:778:3 | -| 1 | a dangling pointer to `_`, a value of no bytes made of more than structs and tuples | fixtures/reject/src/lib.rs:737:11 | +| 1 | a constant of type `_`, a pointer into memory translation can't name | fixtures/reject/src/lib.rs:771:3 | +| 1 | a dangling pointer to `_`, a value of no bytes made of more than structs and tuples | fixtures/reject/src/lib.rs:730:11 | | 1 | a future of `_`, which can be `rt.Pending`, as the future's own `Pending` is | fixtures/reject/src/lib.rs:77:34 | -| 1 | a mapped guard of `_`, which JS can't write in place | fixtures/reject/src/lib.rs:2152:10 | -| 1 | a mutable reference into a `Result`'s payload, passed on or kept | fixtures/reject/src/lib.rs:362:12 | +| 1 | a mapped guard of `_`, which JS can't write in place | fixtures/reject/src/lib.rs:2145:10 | +| 1 | a mutable reference into a `Result`'s payload, passed on or kept | fixtures/reject/src/lib.rs:355:12 | | 1 | a mutable static, which any code may write | fixtures/reject/src/lib.rs:61:11 | -| 1 | a pointer's address, which JS has no counterpart of | fixtures/reject/src/lib.rs:560:17 | +| 1 | a pointer's address, which JS has no counterpart of | fixtures/reject/src/lib.rs:553:17 | | 1 | a printable type must implement `Display` or `Debug` | fixtures/reject/src/lib.rs:64:1 | -| 1 | a raw pointer to `_` behind a reference, which is the object and not where it is kept | fixtures/reject/src/lib.rs:577:10 | -| 1 | a reference through which a raw pointer may be made into `_` in an element, a payload, or a union field, which is not supported yet | fixtures/reject/src/lib.rs:1364:11 | +| 1 | a raw pointer to `_` behind a reference, which is the object and not where it is kept | fixtures/reject/src/lib.rs:570:10 | +| 1 | a reference through which a raw pointer may be made into `_` in an element, a payload, or a union field, which is not supported yet | fixtures/reject/src/lib.rs:1357:11 | | 1 | a scalar constant of type `_` | fixtures/reject/src/lib.rs:8:2 | -| 1 | a slice of one byte's place, which a byte slice can view only in an array of bytes | fixtures/reject/src/lib.rs:2158:2 | -| 1 | a trait object of `_`, which is not supported yet | fixtures/reject/src/lib.rs:481:26 | -| 1 | an upcast from `_` to `_`, which is not supported yet | fixtures/reject/src/lib.rs:532:32 | +| 1 | a slice of one byte's place, which a byte slice can view only in an array of bytes | fixtures/reject/src/lib.rs:2151:2 | +| 1 | a trait object of `_`, which is not supported yet | fixtures/reject/src/lib.rs:474:26 | +| 1 | an upcast from `_` to `_`, which is not supported yet | fixtures/reject/src/lib.rs:525:32 | | 1 | arithmetic on `_` | fixtures/reject/src/lib.rs:8:2 | -| 1 | comparing `_` | fixtures/reject/src/lib.rs:1712:41 | +| 1 | comparing `_` | fixtures/reject/src/lib.rs:1705:41 | | 1 | comparing `_` as a key, which is not supported yet | fixtures/reject/src/lib.rs:235:75 | -| 1 | comparing pointers to `_` in an atomic, which JS has no address of | fixtures/reject/src/lib.rs:777:15 | -| 1 | comparing pointers to `_`, which has no bytes and so no address of its own | fixtures/reject/src/lib.rs:728:70 | -| 1 | const generic types are not supported: `_` | fixtures/reject/src/lib.rs:2097:1 | -| 1 | constructing `_` | fixtures/reject/src/lib.rs:349:53 | +| 1 | comparing pointers to `_` in an atomic, which JS has no address of | fixtures/reject/src/lib.rs:770:15 | +| 1 | comparing pointers to `_`, which has no bytes and so no address of its own | fixtures/reject/src/lib.rs:721:70 | +| 1 | const generic types are not supported: `_` | fixtures/reject/src/lib.rs:2090:1 | +| 1 | constructing `_` | fixtures/reject/src/lib.rs:342:53 | | 1 | hashing `_` as a key, which is not supported yet | fixtures/reject/src/lib.rs:235:75 | -| 1 | hashing `_` by its address, which JS has no counterpart of | fixtures/reject/src/lib.rs:1716:5 | +| 1 | hashing `_` by its address, which JS has no counterpart of | fixtures/reject/src/lib.rs:1709:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | fixtures/reject/src/lib.rs:310:16 | -| 1 | passing `_`, a closure that owns a value that drops, to `_`, which is not supported yet | fixtures/reject/src/lib.rs:319:13 | -| 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | fixtures/reject/src/lib.rs:582:1 | +| 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | fixtures/reject/src/lib.rs:575:1 | ## By API @@ -89,169 +88,168 @@ The type or module each refused type or path belongs to. | Count | API | First | | ---: | --- | --- | -| 39 | `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:687:15 | -| 27 | `(u32, u32)` | fixtures/reject/src/lib.rs:608:10 | -| 6 | `[u8; 4]` | fixtures/reject/src/lib.rs:481:26 | +| 39 | `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:680:15 | +| 27 | `(u32, u32)` | fixtures/reject/src/lib.rs:601:10 | +| 6 | `[u8; 4]` | fixtures/reject/src/lib.rs:474:26 | | 6 | `f16` | fixtures/reject/src/lib.rs:7:14 | -| 6 | `std::borrow::Cow` | fixtures/reject/src/lib.rs:331:2 | -| 6 | `u32` | fixtures/reject/src/lib.rs:555:27 | -| 5 | `(u8, u8)` | fixtures/reject/src/lib.rs:1272:31 | -| 5 | `Gap` | fixtures/reject/src/lib.rs:908:10 | +| 6 | `std::borrow::Cow` | fixtures/reject/src/lib.rs:324:2 | +| 6 | `u32` | fixtures/reject/src/lib.rs:548:27 | +| 5 | `(u8, u8)` | fixtures/reject/src/lib.rs:1265:31 | +| 5 | `Gap` | fixtures/reject/src/lib.rs:901:10 | | 5 | `Option` | fixtures/reject/src/lib.rs:16:15 | | 5 | `u8` | fixtures/reject/src/lib.rs:253:6 | | 4 | `Iterator` | fixtures/reject/src/lib.rs:37:4 | | 4 | `std::pin::Pin` | fixtures/reject/src/lib.rs:91:2 | -| 4 | `std::str` | fixtures/reject/src/lib.rs:439:4 | -| 4 | `{closure}` | fixtures/reject/src/lib.rs:319:13 | -| 3 | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1713:33 | -| 3 | `Mid` | fixtures/reject/src/lib.rs:1355:34 | -| 3 | `Outer` | fixtures/reject/src/lib.rs:1355:34 | +| 4 | `std::str` | fixtures/reject/src/lib.rs:432:4 | +| 3 | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1706:33 | +| 3 | `Mid` | fixtures/reject/src/lib.rs:1348:34 | +| 3 | `Outer` | fixtures/reject/src/lib.rs:1348:34 | | 3 | `Reused` | fixtures/reject/src/lib.rs:21:4 | -| 3 | `std::ptr` | fixtures/reject/src/lib.rs:1710:3 | +| 3 | `std::ptr` | fixtures/reject/src/lib.rs:1703:3 | | 3 | `std::vec::Vec` | fixtures/reject/src/lib.rs:310:16 | -| 2 | `(u16, u16)` | fixtures/reject/src/lib.rs:1176:31 | -| 2 | `Counted` | fixtures/reject/src/lib.rs:389:2 | -| 2 | `InArray` | fixtures/reject/src/lib.rs:1302:9 | -| 2 | `InPayload` | fixtures/reject/src/lib.rs:1314:9 | -| 2 | `InTuple` | fixtures/reject/src/lib.rs:1306:9 | -| 2 | `InWritten` | fixtures/reject/src/lib.rs:1326:9 | -| 2 | `Inside` | fixtures/reject/src/lib.rs:1845:20 | +| 3 | `{closure}` | fixtures/reject/src/lib.rs:319:4 | +| 2 | `(u16, u16)` | fixtures/reject/src/lib.rs:1169:31 | +| 2 | `Counted` | fixtures/reject/src/lib.rs:382:2 | +| 2 | `InArray` | fixtures/reject/src/lib.rs:1295:9 | +| 2 | `InPayload` | fixtures/reject/src/lib.rs:1307:9 | +| 2 | `InTuple` | fixtures/reject/src/lib.rs:1299:9 | +| 2 | `InWritten` | fixtures/reject/src/lib.rs:1319:9 | +| 2 | `Inside` | fixtures/reject/src/lib.rs:1838:20 | | 2 | `Poll` | fixtures/reject/src/lib.rs:72:20 | -| 2 | `Scaled` | fixtures/reject/src/lib.rs:464:23 | -| 2 | `[u8; 2]` | fixtures/reject/src/lib.rs:1726:37 | -| 2 | `[u8; 3]` | fixtures/reject/src/lib.rs:1726:15 | -| 2 | `dyn Scaled` | fixtures/reject/src/lib.rs:464:23 | -| 2 | `dyn std::any::Any` | fixtures/reject/src/lib.rs:532:32 | +| 2 | `Scaled` | fixtures/reject/src/lib.rs:457:23 | +| 2 | `[u8; 2]` | fixtures/reject/src/lib.rs:1719:37 | +| 2 | `[u8; 3]` | fixtures/reject/src/lib.rs:1719:15 | +| 2 | `dyn Scaled` | fixtures/reject/src/lib.rs:457:23 | +| 2 | `dyn std::any::Any` | fixtures/reject/src/lib.rs:525:32 | | 2 | `dyn std::iter::Iterator` | fixtures/reject/src/lib.rs:11:16 | | 2 | `slice` | fixtures/reject/src/lib.rs:21:4 | -| 2 | `std::any::TypeId` | fixtures/reject/src/lib.rs:538:2 | +| 2 | `std::any::TypeId` | fixtures/reject/src/lib.rs:531:2 | | 2 | `std::collections::BTreeSet` | fixtures/reject/src/lib.rs:235:75 | -| 2 | `std::collections::LinkedList` | fixtures/reject/src/lib.rs:2117:4 | -| 2 | `std::mem::MaybeUninit` | fixtures/reject/src/lib.rs:922:19 | +| 2 | `std::collections::LinkedList` | fixtures/reject/src/lib.rs:2110:4 | +| 2 | `std::mem::MaybeUninit` | fixtures/reject/src/lib.rs:915:19 | | 2 | `std::ops::Range` | fixtures/reject/src/lib.rs:160:8 | -| 2 | `std::option::Option` | fixtures/reject/src/lib.rs:369:2 | -| 2 | `std::ptr::const_ptr` | fixtures/reject/src/lib.rs:1713:73 | -| 2 | `std::std` | fixtures/reject/src/lib.rs:567:11 | +| 2 | `std::option::Option` | fixtures/reject/src/lib.rs:362:2 | +| 2 | `std::ptr::const_ptr` | fixtures/reject/src/lib.rs:1706:73 | +| 2 | `std::std` | fixtures/reject/src/lib.rs:560:11 | | 2 | `std::sync::Arc` | fixtures/reject/src/lib.rs:291:2 | | 2 | `std::sync::MutexGuard` | fixtures/reject/src/lib.rs:83:2 | -| 2 | `std::vec::IntoIter` | fixtures/reject/src/lib.rs:434:17 | -| 1 | `(Dropped, (u8, u8))` | fixtures/reject/src/lib.rs:2263:2 | -| 1 | `([Cloned; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2247:2 | -| 1 | `([Greatest; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2281:13 | -| 1 | `([Touched; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2312:2 | -| 1 | `(std::vec::Vec, Tens)` | fixtures/reject/src/lib.rs:1272:31 | -| 1 | `(u16, ByKeyReplace)` | fixtures/reject/src/lib.rs:1621:55 | -| 1 | `(u16, ByKeySet)` | fixtures/reject/src/lib.rs:1613:51 | -| 1 | `(u16, ByKeyTake)` | fixtures/reject/src/lib.rs:1628:52 | -| 1 | `(u16, ByRefReplace)` | fixtures/reject/src/lib.rs:1597:32 | -| 1 | `(u16, ByRefTake)` | fixtures/reject/src/lib.rs:1605:32 | -| 1 | `(u16, InTuple)` | fixtures/reject/src/lib.rs:1346:33 | -| 1 | `*const [u8]` | fixtures/reject/src/lib.rs:1714:28 | -| 1 | `*const u8` | fixtures/reject/src/lib.rs:1713:33 | -| 1 | `*mut [u8; 4]` | fixtures/reject/src/lib.rs:1712:41 | -| 1 | `Aliased` | fixtures/reject/src/lib.rs:1120:29 | -| 1 | `Assigned` | fixtures/reject/src/lib.rs:2012:20 | +| 2 | `std::vec::IntoIter` | fixtures/reject/src/lib.rs:427:17 | +| 1 | `(Dropped, (u8, u8))` | fixtures/reject/src/lib.rs:2256:2 | +| 1 | `([Cloned; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2240:2 | +| 1 | `([Greatest; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2274:13 | +| 1 | `([Touched; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2305:2 | +| 1 | `(std::vec::Vec, Tens)` | fixtures/reject/src/lib.rs:1265:31 | +| 1 | `(u16, ByKeyReplace)` | fixtures/reject/src/lib.rs:1614:55 | +| 1 | `(u16, ByKeySet)` | fixtures/reject/src/lib.rs:1606:51 | +| 1 | `(u16, ByKeyTake)` | fixtures/reject/src/lib.rs:1621:52 | +| 1 | `(u16, ByRefReplace)` | fixtures/reject/src/lib.rs:1590:32 | +| 1 | `(u16, ByRefTake)` | fixtures/reject/src/lib.rs:1598:32 | +| 1 | `(u16, InTuple)` | fixtures/reject/src/lib.rs:1339:33 | +| 1 | `*const [u8]` | fixtures/reject/src/lib.rs:1707:28 | +| 1 | `*const u8` | fixtures/reject/src/lib.rs:1706:33 | +| 1 | `*mut [u8; 4]` | fixtures/reject/src/lib.rs:1705:41 | +| 1 | `Aliased` | fixtures/reject/src/lib.rs:1113:29 | +| 1 | `Assigned` | fixtures/reject/src/lib.rs:2005:20 | | 1 | `Batched` | fixtures/reject/src/lib.rs:310:16 | -| 1 | `Behind` | fixtures/reject/src/lib.rs:1751:22 | -| 1 | `Bits` | fixtures/reject/src/lib.rs:582:1 | -| 1 | `Blank` | fixtures/reject/src/lib.rs:761:2 | -| 1 | `Block` | fixtures/reject/src/lib.rs:2097:1 | -| 1 | `ByBox` | fixtures/reject/src/lib.rs:1504:35 | -| 1 | `ByClosure` | fixtures/reject/src/lib.rs:1519:35 | -| 1 | `ByExchanged` | fixtures/reject/src/lib.rs:1565:30 | -| 1 | `ByInstance` | fixtures/reject/src/lib.rs:1545:35 | -| 1 | `ByKeyReplace` | fixtures/reject/src/lib.rs:1621:55 | -| 1 | `ByKeySet` | fixtures/reject/src/lib.rs:1613:51 | -| 1 | `ByKeyTake` | fixtures/reject/src/lib.rs:1628:52 | -| 1 | `ByObject` | fixtures/reject/src/lib.rs:1532:35 | -| 1 | `ByRead` | fixtures/reject/src/lib.rs:1455:35 | -| 1 | `ByRefReplace` | fixtures/reject/src/lib.rs:1597:32 | -| 1 | `ByRefTake` | fixtures/reject/src/lib.rs:1605:32 | -| 1 | `ByReplace` | fixtures/reject/src/lib.rs:1493:35 | -| 1 | `BySwap` | fixtures/reject/src/lib.rs:1481:35 | -| 1 | `BySwapped` | fixtures/reject/src/lib.rs:1554:76 | -| 1 | `ByWrite` | fixtures/reject/src/lib.rs:1468:35 | -| 1 | `BytesMut` | fixtures/reject/src/lib.rs:383:6 | -| 1 | `Called` | fixtures/reject/src/lib.rs:1086:28 | -| 1 | `Chosen` | fixtures/reject/src/lib.rs:1906:17 | -| 1 | `Clone` | fixtures/reject/src/lib.rs:2169:4 | -| 1 | `Closed` | fixtures/reject/src/lib.rs:2078:15 | -| 1 | `Compared` | fixtures/reject/src/lib.rs:1873:22 | -| 1 | `Copied` | fixtures/reject/src/lib.rs:1176:31 | -| 1 | `Deep` | fixtures/reject/src/lib.rs:1787:18 | -| 1 | `Deeper` | fixtures/reject/src/lib.rs:2038:22 | +| 1 | `Behind` | fixtures/reject/src/lib.rs:1744:22 | +| 1 | `Bits` | fixtures/reject/src/lib.rs:575:1 | +| 1 | `Blank` | fixtures/reject/src/lib.rs:754:2 | +| 1 | `Block` | fixtures/reject/src/lib.rs:2090:1 | +| 1 | `ByBox` | fixtures/reject/src/lib.rs:1497:35 | +| 1 | `ByClosure` | fixtures/reject/src/lib.rs:1512:35 | +| 1 | `ByExchanged` | fixtures/reject/src/lib.rs:1558:30 | +| 1 | `ByInstance` | fixtures/reject/src/lib.rs:1538:35 | +| 1 | `ByKeyReplace` | fixtures/reject/src/lib.rs:1614:55 | +| 1 | `ByKeySet` | fixtures/reject/src/lib.rs:1606:51 | +| 1 | `ByKeyTake` | fixtures/reject/src/lib.rs:1621:52 | +| 1 | `ByObject` | fixtures/reject/src/lib.rs:1525:35 | +| 1 | `ByRead` | fixtures/reject/src/lib.rs:1448:35 | +| 1 | `ByRefReplace` | fixtures/reject/src/lib.rs:1590:32 | +| 1 | `ByRefTake` | fixtures/reject/src/lib.rs:1598:32 | +| 1 | `ByReplace` | fixtures/reject/src/lib.rs:1486:35 | +| 1 | `BySwap` | fixtures/reject/src/lib.rs:1474:35 | +| 1 | `BySwapped` | fixtures/reject/src/lib.rs:1547:76 | +| 1 | `ByWrite` | fixtures/reject/src/lib.rs:1461:35 | +| 1 | `BytesMut` | fixtures/reject/src/lib.rs:376:6 | +| 1 | `Called` | fixtures/reject/src/lib.rs:1079:28 | +| 1 | `Chosen` | fixtures/reject/src/lib.rs:1899:17 | +| 1 | `Clone` | fixtures/reject/src/lib.rs:2162:4 | +| 1 | `Closed` | fixtures/reject/src/lib.rs:2071:15 | +| 1 | `Compared` | fixtures/reject/src/lib.rs:1866:22 | +| 1 | `Copied` | fixtures/reject/src/lib.rs:1169:31 | +| 1 | `Deep` | fixtures/reject/src/lib.rs:1780:18 | +| 1 | `Deeper` | fixtures/reject/src/lib.rs:2031:22 | | 1 | `DoubleEndedIterator` | fixtures/reject/src/lib.rs:145:1 | -| 1 | `Dynamic` | fixtures/reject/src/lib.rs:2062:20 | -| 1 | `Enclosing` | fixtures/reject/src/lib.rs:1890:22 | -| 1 | `Entry` | fixtures/reject/src/lib.rs:319:13 | -| 1 | `Escaped` | fixtures/reject/src/lib.rs:1072:43 | +| 1 | `Dynamic` | fixtures/reject/src/lib.rs:2055:20 | +| 1 | `Enclosing` | fixtures/reject/src/lib.rs:1883:22 | +| 1 | `Escaped` | fixtures/reject/src/lib.rs:1065:43 | | 1 | `FusedIterator` | fixtures/reject/src/lib.rs:193:1 | -| 1 | `Fused` | fixtures/reject/src/lib.rs:728:70 | +| 1 | `Fused` | fixtures/reject/src/lib.rs:721:70 | | 1 | `HashMap` | fixtures/reject/src/lib.rs:253:6 | | 1 | `Hasher` | fixtures/reject/src/lib.rs:261:9 | -| 1 | `Hits` | fixtures/reject/src/lib.rs:720:21 | -| 1 | `InField` | fixtures/reject/src/lib.rs:1318:9 | -| 1 | `InGeneric` | fixtures/reject/src/lib.rs:1322:9 | -| 1 | `InNested` | fixtures/reject/src/lib.rs:1310:9 | -| 1 | `Lane` | fixtures/reject/src/lib.rs:872:19 | -| 1 | `Loaded` | fixtures/reject/src/lib.rs:1142:29 | -| 1 | `Looped` | fixtures/reject/src/lib.rs:1110:26 | -| 1 | `Mapped` | fixtures/reject/src/lib.rs:1187:39 | +| 1 | `Hits` | fixtures/reject/src/lib.rs:713:21 | +| 1 | `InField` | fixtures/reject/src/lib.rs:1311:9 | +| 1 | `InGeneric` | fixtures/reject/src/lib.rs:1315:9 | +| 1 | `InNested` | fixtures/reject/src/lib.rs:1303:9 | +| 1 | `Lane` | fixtures/reject/src/lib.rs:865:19 | +| 1 | `Loaded` | fixtures/reject/src/lib.rs:1135:29 | +| 1 | `Looped` | fixtures/reject/src/lib.rs:1103:26 | +| 1 | `Mapped` | fixtures/reject/src/lib.rs:1180:39 | | 1 | `Maybe` | fixtures/reject/src/lib.rs:31:2 | -| 1 | `Onced` | fixtures/reject/src/lib.rs:1233:46 | -| 1 | `Only` | fixtures/reject/src/lib.rs:737:11 | -| 1 | `Parked` | fixtures/reject/src/lib.rs:2137:20 | -| 1 | `Parking` | fixtures/reject/src/lib.rs:2137:20 | -| 1 | `Plain` | fixtures/reject/src/lib.rs:826:10 | -| 1 | `Pushed` | fixtures/reject/src/lib.rs:1248:22 | -| 1 | `Repeated` | fixtures/reject/src/lib.rs:1221:18 | -| 1 | `Replaced` | fixtures/reject/src/lib.rs:1957:20 | -| 1 | `Rewritten` | fixtures/reject/src/lib.rs:1130:47 | -| 1 | `Shared` | fixtures/reject/src/lib.rs:1828:20 | +| 1 | `Onced` | fixtures/reject/src/lib.rs:1226:46 | +| 1 | `Only` | fixtures/reject/src/lib.rs:730:11 | +| 1 | `Parked` | fixtures/reject/src/lib.rs:2130:20 | +| 1 | `Parking` | fixtures/reject/src/lib.rs:2130:20 | +| 1 | `Plain` | fixtures/reject/src/lib.rs:819:10 | +| 1 | `Pushed` | fixtures/reject/src/lib.rs:1241:22 | +| 1 | `Repeated` | fixtures/reject/src/lib.rs:1214:18 | +| 1 | `Replaced` | fixtures/reject/src/lib.rs:1950:20 | +| 1 | `Rewritten` | fixtures/reject/src/lib.rs:1123:47 | +| 1 | `Shared` | fixtures/reject/src/lib.rs:1821:20 | | 1 | `Sink` | fixtures/reject/src/lib.rs:55:10 | -| 1 | `Slotted` | fixtures/reject/src/lib.rs:1809:21 | -| 1 | `Span2` | fixtures/reject/src/lib.rs:608:10 | -| 1 | `String` | fixtures/reject/src/lib.rs:784:4 | -| 1 | `Swapped` | fixtures/reject/src/lib.rs:1975:20 | +| 1 | `Slotted` | fixtures/reject/src/lib.rs:1802:21 | +| 1 | `Span2` | fixtures/reject/src/lib.rs:601:10 | +| 1 | `String` | fixtures/reject/src/lib.rs:777:4 | +| 1 | `Swapped` | fixtures/reject/src/lib.rs:1968:20 | | 1 | `T \| undefined` | fixtures/reject/src/lib.rs:31:2 | -| 1 | `Tail` | fixtures/reject/src/lib.rs:491:30 | -| 1 | `Taken` | fixtures/reject/src/lib.rs:1993:20 | -| 1 | `Target` | fixtures/reject/src/lib.rs:1669:10 | -| 1 | `Tens` | fixtures/reject/src/lib.rs:1272:31 | -| 1 | `Track` | fixtures/reject/src/lib.rs:852:19 | -| 1 | `Unboxed` | fixtures/reject/src/lib.rs:1766:16 | -| 1 | `Waiting` | fixtures/reject/src/lib.rs:502:2 | -| 1 | `Window` | fixtures/reject/src/lib.rs:669:2 | -| 1 | `Wrapped` | fixtures/reject/src/lib.rs:1934:21 | -| 1 | `[InArray; 2]` | fixtures/reject/src/lib.rs:1337:33 | -| 1 | `[InWritten; 1]` | fixtures/reject/src/lib.rs:1398:35 | -| 1 | `[std::cell::UnsafeCell; 2]` | fixtures/reject/src/lib.rs:2091:20 | -| 1 | `dyn Keyed` | fixtures/reject/src/lib.rs:532:32 | -| 1 | `poll` | fixtures/reject/src/lib.rs:502:2 | -| 1 | `rt.Poll` | fixtures/reject/src/lib.rs:502:2 | -| 1 | `std::any::Any` | fixtures/reject/src/lib.rs:538:4 | -| 1 | `std::cell::Cell` | fixtures/reject/src/lib.rs:955:22 | -| 1 | `std::cell::LazyCell` | fixtures/reject/src/lib.rs:2206:3 | -| 1 | `std::collections::BTreeMap` | fixtures/reject/src/lib.rs:955:22 | +| 1 | `Tail` | fixtures/reject/src/lib.rs:484:30 | +| 1 | `Taken` | fixtures/reject/src/lib.rs:1986:20 | +| 1 | `Target` | fixtures/reject/src/lib.rs:1662:10 | +| 1 | `Tens` | fixtures/reject/src/lib.rs:1265:31 | +| 1 | `Track` | fixtures/reject/src/lib.rs:845:19 | +| 1 | `Unboxed` | fixtures/reject/src/lib.rs:1759:16 | +| 1 | `Waiting` | fixtures/reject/src/lib.rs:495:2 | +| 1 | `Window` | fixtures/reject/src/lib.rs:662:2 | +| 1 | `Wrapped` | fixtures/reject/src/lib.rs:1927:21 | +| 1 | `[InArray; 2]` | fixtures/reject/src/lib.rs:1330:33 | +| 1 | `[InWritten; 1]` | fixtures/reject/src/lib.rs:1391:35 | +| 1 | `[std::cell::UnsafeCell; 2]` | fixtures/reject/src/lib.rs:2084:20 | +| 1 | `dyn Keyed` | fixtures/reject/src/lib.rs:525:32 | +| 1 | `poll` | fixtures/reject/src/lib.rs:495:2 | +| 1 | `rt.Poll` | fixtures/reject/src/lib.rs:495:2 | +| 1 | `std::any::Any` | fixtures/reject/src/lib.rs:531:4 | +| 1 | `std::cell::Cell` | fixtures/reject/src/lib.rs:948:22 | +| 1 | `std::cell::LazyCell` | fixtures/reject/src/lib.rs:2199:3 | +| 1 | `std::collections::BTreeMap` | fixtures/reject/src/lib.rs:948:22 | | 1 | `std::collections::HashMap` | fixtures/reject/src/lib.rs:253:6 | -| 1 | `std::default::Default` | fixtures/reject/src/lib.rs:2119:2 | +| 1 | `std::default::Default` | fixtures/reject/src/lib.rs:2112:2 | | 1 | `std::iter::Map` | fixtures/reject/src/lib.rs:209:40 | | 1 | `std::iter::Zip` | fixtures/reject/src/lib.rs:202:8 | -| 1 | `std::iter` | fixtures/reject/src/lib.rs:1235:22 | -| 1 | `std::mem` | fixtures/reject/src/lib.rs:2174:2 | -| 1 | `std::net::AddrParseError` | fixtures/reject/src/lib.rs:438:32 | -| 1 | `std::net::Ipv4Addr` | fixtures/reject/src/lib.rs:438:32 | -| 1 | `std::num` | fixtures/reject/src/lib.rs:1277:4 | -| 1 | `std::ops::RangeFrom` | fixtures/reject/src/lib.rs:984:32 | -| 1 | `std::ops::RangeTo` | fixtures/reject/src/lib.rs:984:11 | -| 1 | `std::ptr::mut_ptr` | fixtures/reject/src/lib.rs:1713:56 | -| 1 | `std::slice::IterMut` | fixtures/reject/src/lib.rs:766:15 | -| 1 | `std::std::Layout` | fixtures/reject/src/lib.rs:565:15 | -| 1 | `std::sync::LazyLock` | fixtures/reject/src/lib.rs:2211:2 | -| 1 | `std::sync::Weak` | fixtures/reject/src/lib.rs:455:40 | +| 1 | `std::iter` | fixtures/reject/src/lib.rs:1228:22 | +| 1 | `std::mem` | fixtures/reject/src/lib.rs:2167:2 | +| 1 | `std::net::AddrParseError` | fixtures/reject/src/lib.rs:431:32 | +| 1 | `std::net::Ipv4Addr` | fixtures/reject/src/lib.rs:431:32 | +| 1 | `std::num` | fixtures/reject/src/lib.rs:1270:4 | +| 1 | `std::ops::RangeFrom` | fixtures/reject/src/lib.rs:977:32 | +| 1 | `std::ops::RangeTo` | fixtures/reject/src/lib.rs:977:11 | +| 1 | `std::ptr::mut_ptr` | fixtures/reject/src/lib.rs:1706:56 | +| 1 | `std::slice::IterMut` | fixtures/reject/src/lib.rs:759:15 | +| 1 | `std::std::Layout` | fixtures/reject/src/lib.rs:558:15 | +| 1 | `std::sync::LazyLock` | fixtures/reject/src/lib.rs:2204:2 | +| 1 | `std::sync::Weak` | fixtures/reject/src/lib.rs:448:40 | | 1 | `std::task::Poll` | fixtures/reject/src/lib.rs:77:34 | -| 1 | `std::thread::LocalKey` | fixtures/reject/src/lib.rs:2217:2 | -| 1 | `str` | fixtures/reject/src/lib.rs:326:4 | +| 1 | `std::thread::LocalKey` | fixtures/reject/src/lib.rs:2210:2 | +| 1 | `str` | fixtures/reject/src/lib.rs:319:4 | | 1 | `u64` | fixtures/reject/src/lib.rs:68:2 | | 1 | `value` | fixtures/reject/src/lib.rs:31:2 | @@ -259,240 +257,239 @@ The type or module each refused type or path belongs to. | Count | Construct | Type or path | First | | ---: | --- | --- | --- | -| 17 | a raw pointer to `_` in a variable assigned again while it may point there | `(u32, u32)` | fixtures/reject/src/lib.rs:616:10 | -| 4 | a variant of `_`, which is not supported: either is the same JS string | `std::borrow::Cow` | fixtures/reject/src/lib.rs:331:2 | -| 3 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Gap` | fixtures/reject/src/lib.rs:908: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:1355:34 | +| 17 | a raw pointer to `_` in a variable assigned again while it may point there | `(u32, u32)` | fixtures/reject/src/lib.rs:609:10 | +| 4 | a variant of `_`, which is not supported: either is the same JS string | `std::borrow::Cow` | fixtures/reject/src/lib.rs:324:2 | +| 3 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Gap` | fixtures/reject/src/lib.rs:901: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:1348:34 | | 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 | | 2 | `_`, a trait object of another crate's trait, which is not supported yet | `dyn std::iter::Iterator` | fixtures/reject/src/lib.rs:11:16 | -| 2 | `_`, a trait object of the generic trait `_`, which is not supported yet | `dyn Scaled`, `Scaled` | fixtures/reject/src/lib.rs:464:23 | -| 2 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::mem::MaybeUninit`, `Gap` | fixtures/reject/src/lib.rs:922:19 | -| 2 | a raw pointer to `_` in a variable assigned again while it may point there | `[u8; 4]` | fixtures/reject/src/lib.rs:1733:26 | -| 2 | a raw pointer to `_` in a variable assigned again while it may point there | `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:696:15 | -| 2 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | `[u8; 2]` | fixtures/reject/src/lib.rs:1726:37 | -| 2 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | `[u8; 3]` | fixtures/reject/src/lib.rs:1726:15 | -| 2 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Inside` | fixtures/reject/src/lib.rs:1845:20 | -| 2 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `[u8; 4]` | fixtures/reject/src/lib.rs:1733:26 | +| 2 | `_`, a trait object of the generic trait `_`, which is not supported yet | `dyn Scaled`, `Scaled` | fixtures/reject/src/lib.rs:457:23 | +| 2 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::mem::MaybeUninit`, `Gap` | fixtures/reject/src/lib.rs:915:19 | +| 2 | a raw pointer to `_` in a variable assigned again while it may point there | `[u8; 4]` | fixtures/reject/src/lib.rs:1726:26 | +| 2 | a raw pointer to `_` in a variable assigned again while it may point there | `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:689:15 | +| 2 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | `[u8; 2]` | fixtures/reject/src/lib.rs:1719:37 | +| 2 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | `[u8; 3]` | fixtures/reject/src/lib.rs:1719:15 | +| 2 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Inside` | fixtures/reject/src/lib.rs:1838:20 | +| 2 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `[u8; 4]` | fixtures/reject/src/lib.rs:1726:26 | | 2 | an assignment through a reference to `_` | `std::pin::Pin` | fixtures/reject/src/lib.rs:107:2 | -| 2 | comparing pointers to `_`, each a place JS makes of its own | `u32` | fixtures/reject/src/lib.rs:596:2 | +| 2 | comparing pointers to `_`, each a place JS makes of its own | `u32` | fixtures/reject/src/lib.rs:589:2 | | 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:434:17 | -| 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | `Blank` | fixtures/reject/src/lib.rs:761:2 | -| 1 | `BufMut::put` of `_` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported | `Counted` | fixtures/reject/src/lib.rs:394:2 | -| 1 | `BufMut::put` of `_` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported | `Counted` | fixtures/reject/src/lib.rs:389:2 | -| 1 | `Bytes::from_owner` of `_`, which would drop with the last clone of what it makes, which is not supported | `std::sync::Arc` | fixtures/reject/src/lib.rs:374:2 | -| 1 | `Extend` of `_` by `_`, whose `_` of `_` is not supported yet | `(std::vec::Vec, Tens)`, `(u8, u8)`, `Tens`, `u8` | fixtures/reject/src/lib.rs:1272:31 | +| 2 | unsupported call to `_` | `::sum` | fixtures/reject/src/lib.rs:427:17 | +| 1 | `Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported | `Blank` | fixtures/reject/src/lib.rs:754:2 | +| 1 | `BufMut::put` of `_` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported | `Counted` | fixtures/reject/src/lib.rs:387:2 | +| 1 | `BufMut::put` of `_` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported | `Counted` | fixtures/reject/src/lib.rs:382:2 | +| 1 | `Bytes::from_owner` of `_`, which would drop with the last clone of what it makes, which is not supported | `std::sync::Arc` | fixtures/reject/src/lib.rs:367:2 | +| 1 | `Extend` of `_` by `_`, whose `_` of `_` is not supported yet | `(std::vec::Vec, Tens)`, `(u8, u8)`, `Tens`, `u8` | fixtures/reject/src/lib.rs:1265:31 | | 1 | `_` is not supported: its `Pending` and `Ready` would both be `rt.OuterPending` | `Poll` | fixtures/reject/src/lib.rs:72:20 | | 1 | `_` is not supported: its field `_` is `_`, typed `_`, whose `None` would be `rt.None` as `_` | `Maybe`, `value`, `Option`, `T \| undefined`, `Option` | fixtures/reject/src/lib.rs:31:2 | -| 1 | `_` is not supported: its field `_` is `_`, typed `_`, whose `Pending` would be `rt.OuterPending` as `_` | `Waiting`, `poll`, `Poll`, `rt.Poll`, `Poll` | fixtures/reject/src/lib.rs:502:2 | +| 1 | `_` is not supported: its field `_` is `_`, typed `_`, whose `Pending` would be `rt.OuterPending` as `_` | `Waiting`, `poll`, `Poll`, `rt.Poll`, `Poll` | fixtures/reject/src/lib.rs:495:2 | | 1 | `_` of `_` by `_`, which is not supported yet | `HashMap::contains_key`, `std::collections::HashMap`, `u8` | fixtures/reject/src/lib.rs:253:6 | -| 1 | `_` of `_`, which is not supported yet | `std::any::Any::type_id`, `dyn std::any::Any` | fixtures/reject/src/lib.rs:538:4 | -| 1 | `_` of `_`, whose `clone_from` is its own, which is not supported yet | `Clone::clone_from`, `std::vec::Vec` | fixtures/reject/src/lib.rs:2169:4 | +| 1 | `_` of `_`, which is not supported yet | `std::any::Any::type_id`, `dyn std::any::Any` | fixtures/reject/src/lib.rs:531:4 | +| 1 | `_` of `_`, whose `clone_from` is its own, which is not supported yet | `Clone::clone_from`, `std::vec::Vec` | fixtures/reject/src/lib.rs:2162:4 | | 1 | `_` of `_`, whose `clone_from` is its own, which is not supported yet | `slice::clone_from_slice`, `Reused` | fixtures/reject/src/lib.rs:286:4 | | 1 | `_` of `_`, whose `clone_from` is its own, which is not supported yet | `slice::fill`, `Reused` | fixtures/reject/src/lib.rs:21:4 | -| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::collections::LinkedList::retain` | fixtures/reject/src/lib.rs:2117:4 | -| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::default::Default::default` | fixtures/reject/src/lib.rs:2119:2 | -| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::iter::once` | fixtures/reject/src/lib.rs:1235:22 | -| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::str::from_utf8_mut` | fixtures/reject/src/lib.rs:1642:20 | -| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::str::get_unchecked_mut` | fixtures/reject/src/lib.rs:1637:13 | +| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::collections::LinkedList::retain` | fixtures/reject/src/lib.rs:2110:4 | +| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::default::Default::default` | fixtures/reject/src/lib.rs:2112:2 | +| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::iter::once` | fixtures/reject/src/lib.rs:1228:22 | +| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::str::from_utf8_mut` | fixtures/reject/src/lib.rs:1635:20 | +| 1 | `_` with a mutable reference to a value JS copies, which its mapping would copy | `std::str::get_unchecked_mut` | fixtures/reject/src/lib.rs:1630:13 | | 1 | `_`, which is not supported yet | `Hasher::write` | fixtures/reject/src/lib.rs:261:9 | -| 1 | `_`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported | `BytesMut::capacity` | fixtures/reject/src/lib.rs:383:6 | -| 1 | `clone_from` of `_`, whose items' `clone_from` is their own, which is not supported yet | `std::collections::LinkedList` | fixtures/reject/src/lib.rs:2118:4 | -| 1 | `collect` of `_`, which sorts by `_`'s own `Ord`, of entries that drop, which is not supported yet | `std::collections::BTreeMap`, `std::cell::Cell` | fixtures/reject/src/lib.rs:955:22 | +| 1 | `_`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported | `BytesMut::capacity` | fixtures/reject/src/lib.rs:376:6 | +| 1 | `clone_from` of `_`, whose items' `clone_from` is their own, which is not supported yet | `std::collections::LinkedList` | fixtures/reject/src/lib.rs:2111:4 | +| 1 | `collect` of `_`, which sorts by `_`'s own `Ord`, of entries that drop, which is not supported yet | `std::collections::BTreeMap`, `std::cell::Cell` | fixtures/reject/src/lib.rs:948:22 | | 1 | `fmt::Arguments` with a placeholder, or not made in place, written to `_`'s own `fmt::Write`, which is not supported yet: std splits what a placeholder writes into `write_str` calls the runtime does not make | `Sink` | fixtures/reject/src/lib.rs:55:10 | | 1 | a `collect` in place of `_`, a zip std reads by index, holding values that drop, which is not supported yet | `std::iter::Map` | fixtures/reject/src/lib.rs:209:40 | | 1 | a `skip` of `_`, a zip std reads by index, of items that drop, which is not supported yet | `std::iter::Zip` | fixtures/reject/src/lib.rs:202:8 | | 1 | a cast from `_` to `_` | `u64`, `f16` | fixtures/reject/src/lib.rs:68:2 | -| 1 | a cast from `_` to `_`, which reads the bytes of one type as another | `*const [u8; 4]`, `*const u8` | fixtures/reject/src/lib.rs:1713:33 | -| 1 | a cast from a pointer to `_` to one to `_`, which reads the bytes of one type as another | `[u8; 4]`, `u8` | fixtures/reject/src/lib.rs:1713:17 | -| 1 | a cast from a pointer to `_` to one to `_`, which reads the bytes of one type as another | `u32`, `u8` | fixtures/reject/src/lib.rs:555:27 | -| 1 | a coercion of `_` to `_`, a pointer to a slice | `*const [u8; 4]`, `*const [u8]` | fixtures/reject/src/lib.rs:1714:28 | +| 1 | a cast from `_` to `_`, which reads the bytes of one type as another | `*const [u8; 4]`, `*const u8` | fixtures/reject/src/lib.rs:1706:33 | +| 1 | a cast from a pointer to `_` to one to `_`, which reads the bytes of one type as another | `[u8; 4]`, `u8` | fixtures/reject/src/lib.rs:1706:17 | +| 1 | a cast from a pointer to `_` to one to `_`, which reads the bytes of one type as another | `u32`, `u8` | fixtures/reject/src/lib.rs:548:27 | +| 1 | a coercion of `_` to `_`, a pointer to a slice | `*const [u8; 4]`, `*const [u8]` | fixtures/reject/src/lib.rs:1707:28 | | 1 | a coercion to `_` | `std::sync::Arc` | fixtures/reject/src/lib.rs:291:2 | -| 1 | a coercion to `_`, which is not supported yet | `&Tail` | fixtures/reject/src/lib.rs:491:30 | -| 1 | a coercion to `_`, which is not supported yet | `std::sync::Weak` | fixtures/reject/src/lib.rs:455:40 | -| 1 | a constant of type `_`, a pointer into memory translation can't name | `&u32` | fixtures/reject/src/lib.rs:778:3 | -| 1 | a dangling pointer to `_`, a value of no bytes made of more than structs and tuples | `Only` | fixtures/reject/src/lib.rs:737:11 | +| 1 | a coercion to `_`, which is not supported yet | `&Tail` | fixtures/reject/src/lib.rs:484:30 | +| 1 | a coercion to `_`, which is not supported yet | `std::sync::Weak` | fixtures/reject/src/lib.rs:448:40 | +| 1 | a constant of type `_`, a pointer into memory translation can't name | `&u32` | fixtures/reject/src/lib.rs:771:3 | +| 1 | a dangling pointer to `_`, a value of no bytes made of more than structs and tuples | `Only` | fixtures/reject/src/lib.rs:730:11 | | 1 | a future of `_`, which can be `rt.Pending`, as the future's own `Pending` is | `std::task::Poll` | fixtures/reject/src/lib.rs:77:34 | -| 1 | a mapped guard of `_`, which JS can't write in place | `{closure}` | fixtures/reject/src/lib.rs:2152:10 | -| 1 | a raw pointer to `_` behind a reference, which is the object and not where it is kept | `std::vec::Vec` | fixtures/reject/src/lib.rs:577:10 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u16, u16)`, `Copied` | fixtures/reject/src/lib.rs:1176:31 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u16, u16)`, `Pushed` | fixtures/reject/src/lib.rs:1248:22 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Lane` | fixtures/reject/src/lib.rs:872:19 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Plain` | fixtures/reject/src/lib.rs:826:10 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Span2` | fixtures/reject/src/lib.rs:608:10 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Track` | fixtures/reject/src/lib.rs:852:19 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Window` | fixtures/reject/src/lib.rs:669:2 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:687:15 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `(Dropped, (u8, u8))` | fixtures/reject/src/lib.rs:2263:2 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `([Cloned; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2247:2 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `([Greatest; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2281:13 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `([Touched; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2312:2 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByKeyReplace`, `(u16, ByKeyReplace)` | fixtures/reject/src/lib.rs:1621:55 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByKeySet`, `(u16, ByKeySet)` | fixtures/reject/src/lib.rs:1613:51 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByKeyTake`, `(u16, ByKeyTake)` | fixtures/reject/src/lib.rs:1628:52 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByRefReplace`, `(u16, ByRefReplace)` | fixtures/reject/src/lib.rs:1597:32 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByRefTake`, `(u16, ByRefTake)` | fixtures/reject/src/lib.rs:1605:32 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Aliased` | fixtures/reject/src/lib.rs:1120:29 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByBox` | fixtures/reject/src/lib.rs:1504:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByClosure` | fixtures/reject/src/lib.rs:1519:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByExchanged` | fixtures/reject/src/lib.rs:1565:30 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByInstance` | fixtures/reject/src/lib.rs:1545:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByObject` | fixtures/reject/src/lib.rs:1532:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByRead` | fixtures/reject/src/lib.rs:1455:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByReplace` | fixtures/reject/src/lib.rs:1493:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `BySwap` | fixtures/reject/src/lib.rs:1481:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `BySwapped` | fixtures/reject/src/lib.rs:1554:76 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByWrite` | fixtures/reject/src/lib.rs:1468:35 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Called` | fixtures/reject/src/lib.rs:1086:28 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Escaped` | fixtures/reject/src/lib.rs:1072:43 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Hits` | fixtures/reject/src/lib.rs:720:21 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InArray` | fixtures/reject/src/lib.rs:1302:9 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InField` | fixtures/reject/src/lib.rs:1318:9 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InGeneric` | fixtures/reject/src/lib.rs:1322:9 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InNested` | fixtures/reject/src/lib.rs:1310:9 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InPayload` | fixtures/reject/src/lib.rs:1314:9 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InTuple` | fixtures/reject/src/lib.rs:1306:9 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InWritten` | fixtures/reject/src/lib.rs:1326:9 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Loaded` | fixtures/reject/src/lib.rs:1142:29 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Looped` | fixtures/reject/src/lib.rs:1110:26 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Mapped` | fixtures/reject/src/lib.rs:1187:39 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Onced` | fixtures/reject/src/lib.rs:1233:46 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Repeated` | fixtures/reject/src/lib.rs:1221:18 | -| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Rewritten` | fixtures/reject/src/lib.rs:1130:47 | -| 1 | a raw pointer to `_` in a variable assigned again while it may point there | `Target` | fixtures/reject/src/lib.rs:1669:10 | -| 1 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | `(u32, u32)` | fixtures/reject/src/lib.rs:679:10 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `InArray`, `[InArray; 2]` | fixtures/reject/src/lib.rs:1337:33 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `InTuple`, `(u16, InTuple)` | fixtures/reject/src/lib.rs:1346:33 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `InWritten`, `[InWritten; 1]` | fixtures/reject/src/lib.rs:1398:35 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `Parked`, `Parking` | fixtures/reject/src/lib.rs:2137:20 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Assigned` | fixtures/reject/src/lib.rs:2012:20 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Closed` | fixtures/reject/src/lib.rs:2078:15 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Deeper` | fixtures/reject/src/lib.rs:2038:22 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Dynamic` | fixtures/reject/src/lib.rs:2062:20 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Replaced` | fixtures/reject/src/lib.rs:1957:20 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Swapped` | fixtures/reject/src/lib.rs:1975:20 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Taken` | fixtures/reject/src/lib.rs:1993:20 | -| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `[std::cell::UnsafeCell; 2]` | fixtures/reject/src/lib.rs:2091:20 | -| 1 | a reference through which a raw pointer may be made into `_` in an element, a payload, or a union field, which is not supported yet | `InPayload` | fixtures/reject/src/lib.rs:1364:11 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Behind` | fixtures/reject/src/lib.rs:1751:22 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Chosen` | fixtures/reject/src/lib.rs:1906:17 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Compared` | fixtures/reject/src/lib.rs:1873:22 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Deep` | fixtures/reject/src/lib.rs:1787:18 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Enclosing` | fixtures/reject/src/lib.rs:1890:22 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Shared` | fixtures/reject/src/lib.rs:1828:20 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Slotted` | fixtures/reject/src/lib.rs:1809:21 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Unboxed` | fixtures/reject/src/lib.rs:1766:16 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Wrapped` | fixtures/reject/src/lib.rs:1934:21 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:1655:18 | -| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `std::option::Option` | fixtures/reject/src/lib.rs:2108:13 | +| 1 | a mapped guard of `_`, which JS can't write in place | `{closure}` | fixtures/reject/src/lib.rs:2145:10 | +| 1 | a raw pointer to `_` behind a reference, which is the object and not where it is kept | `std::vec::Vec` | fixtures/reject/src/lib.rs:570:10 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u16, u16)`, `Copied` | fixtures/reject/src/lib.rs:1169:31 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u16, u16)`, `Pushed` | fixtures/reject/src/lib.rs:1241:22 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Lane` | fixtures/reject/src/lib.rs:865:19 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Plain` | fixtures/reject/src/lib.rs:819:10 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Span2` | fixtures/reject/src/lib.rs:601:10 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Track` | fixtures/reject/src/lib.rs:845:19 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `Window` | fixtures/reject/src/lib.rs:662:2 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u32, u32)`, `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:680:15 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `(Dropped, (u8, u8))` | fixtures/reject/src/lib.rs:2256:2 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `([Cloned; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2240:2 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `([Greatest; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2274:13 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `(u8, u8)`, `([Touched; 2], (u8, u8))` | fixtures/reject/src/lib.rs:2305:2 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByKeyReplace`, `(u16, ByKeyReplace)` | fixtures/reject/src/lib.rs:1614:55 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByKeySet`, `(u16, ByKeySet)` | fixtures/reject/src/lib.rs:1606:51 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByKeyTake`, `(u16, ByKeyTake)` | fixtures/reject/src/lib.rs:1621:52 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByRefReplace`, `(u16, ByRefReplace)` | fixtures/reject/src/lib.rs:1590:32 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `ByRefTake`, `(u16, ByRefTake)` | fixtures/reject/src/lib.rs:1598:32 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Aliased` | fixtures/reject/src/lib.rs:1113:29 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByBox` | fixtures/reject/src/lib.rs:1497:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByClosure` | fixtures/reject/src/lib.rs:1512:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByExchanged` | fixtures/reject/src/lib.rs:1558:30 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByInstance` | fixtures/reject/src/lib.rs:1538:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByObject` | fixtures/reject/src/lib.rs:1525:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByRead` | fixtures/reject/src/lib.rs:1448:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByReplace` | fixtures/reject/src/lib.rs:1486:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `BySwap` | fixtures/reject/src/lib.rs:1474:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `BySwapped` | fixtures/reject/src/lib.rs:1547:76 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `ByWrite` | fixtures/reject/src/lib.rs:1461:35 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Called` | fixtures/reject/src/lib.rs:1079:28 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Escaped` | fixtures/reject/src/lib.rs:1065:43 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Hits` | fixtures/reject/src/lib.rs:713:21 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InArray` | fixtures/reject/src/lib.rs:1295:9 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InField` | fixtures/reject/src/lib.rs:1311:9 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InGeneric` | fixtures/reject/src/lib.rs:1315:9 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InNested` | fixtures/reject/src/lib.rs:1303:9 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InPayload` | fixtures/reject/src/lib.rs:1307:9 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InTuple` | fixtures/reject/src/lib.rs:1299:9 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `InWritten` | fixtures/reject/src/lib.rs:1319:9 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Loaded` | fixtures/reject/src/lib.rs:1135:29 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Looped` | fixtures/reject/src/lib.rs:1103:26 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Mapped` | fixtures/reject/src/lib.rs:1180:39 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Onced` | fixtures/reject/src/lib.rs:1226:46 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Repeated` | fixtures/reject/src/lib.rs:1214:18 | +| 1 | a raw pointer to `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Rewritten` | fixtures/reject/src/lib.rs:1123:47 | +| 1 | a raw pointer to `_` in a variable assigned again while it may point there | `Target` | fixtures/reject/src/lib.rs:1662:10 | +| 1 | a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet | `(u32, u32)` | fixtures/reject/src/lib.rs:672:10 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `InArray`, `[InArray; 2]` | fixtures/reject/src/lib.rs:1330:33 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `InTuple`, `(u16, InTuple)` | fixtures/reject/src/lib.rs:1339:33 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `InWritten`, `[InWritten; 1]` | fixtures/reject/src/lib.rs:1391:35 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `Parked`, `Parking` | fixtures/reject/src/lib.rs:2130:20 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Assigned` | fixtures/reject/src/lib.rs:2005:20 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Closed` | fixtures/reject/src/lib.rs:2071:15 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Deeper` | fixtures/reject/src/lib.rs:2031:22 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Dynamic` | fixtures/reject/src/lib.rs:2055:20 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Replaced` | fixtures/reject/src/lib.rs:1950:20 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Swapped` | fixtures/reject/src/lib.rs:1968:20 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `Taken` | fixtures/reject/src/lib.rs:1986:20 | +| 1 | a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of | `std::cell::UnsafeCell`, `[std::cell::UnsafeCell; 2]` | fixtures/reject/src/lib.rs:2084:20 | +| 1 | a reference through which a raw pointer may be made into `_` in an element, a payload, or a union field, which is not supported yet | `InPayload` | fixtures/reject/src/lib.rs:1357:11 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Behind` | fixtures/reject/src/lib.rs:1744:22 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Chosen` | fixtures/reject/src/lib.rs:1899:17 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Compared` | fixtures/reject/src/lib.rs:1866:22 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Deep` | fixtures/reject/src/lib.rs:1780:18 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Enclosing` | fixtures/reject/src/lib.rs:1883:22 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Shared` | fixtures/reject/src/lib.rs:1821:20 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Slotted` | fixtures/reject/src/lib.rs:1802:21 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Unboxed` | fixtures/reject/src/lib.rs:1759:16 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `Wrapped` | fixtures/reject/src/lib.rs:1927:21 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `std::cell::UnsafeCell` | fixtures/reject/src/lib.rs:1648:18 | +| 1 | a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there | `std::option::Option` | fixtures/reject/src/lib.rs:2101:13 | | 1 | a scalar constant of type `_` | `f16` | fixtures/reject/src/lib.rs:8:2 | -| 1 | a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there | `Reused` | fixtures/reject/src/lib.rs:2164:2 | -| 1 | a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there | `std::cell::LazyCell` | fixtures/reject/src/lib.rs:2206:3 | -| 1 | a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there | `std::thread::LocalKey` | fixtures/reject/src/lib.rs:2217:2 | -| 1 | a trait object of `_`, which is not supported yet | `[u8; 4]` | fixtures/reject/src/lib.rs:481:26 | -| 1 | an assignment through a reference to `_` | `std::sync::LazyLock` | fixtures/reject/src/lib.rs:2211:2 | +| 1 | a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there | `Reused` | fixtures/reject/src/lib.rs:2157:2 | +| 1 | a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there | `std::cell::LazyCell` | fixtures/reject/src/lib.rs:2199:3 | +| 1 | a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there | `std::thread::LocalKey` | fixtures/reject/src/lib.rs:2210:2 | +| 1 | a trait object of `_`, which is not supported yet | `[u8; 4]` | fixtures/reject/src/lib.rs:474:26 | +| 1 | an assignment through a reference to `_` | `std::sync::LazyLock` | fixtures/reject/src/lib.rs:2204:2 | | 1 | an assignment through a reference to `_` | `std::sync::MutexGuard` | fixtures/reject/src/lib.rs:83:2 | | 1 | an iterator of the crate implementing `_`, which is not supported yet | `DoubleEndedIterator` | fixtures/reject/src/lib.rs:145:1 | | 1 | an iterator of the crate implementing `_`, which is not supported yet | `FusedIterator` | fixtures/reject/src/lib.rs:193:1 | -| 1 | an upcast from `_` to `_`, which is not supported yet | `dyn Keyed`, `dyn std::any::Any` | fixtures/reject/src/lib.rs:532:32 | +| 1 | an upcast from `_` to `_`, which is not supported yet | `dyn Keyed`, `dyn std::any::Any` | fixtures/reject/src/lib.rs:525:32 | | 1 | arithmetic on `_` | `f16` | fixtures/reject/src/lib.rs:8:2 | -| 1 | comparing `_` | `*mut [u8; 4]` | fixtures/reject/src/lib.rs:1712:41 | +| 1 | comparing `_` | `*mut [u8; 4]` | fixtures/reject/src/lib.rs:1705:41 | | 1 | comparing `_` as a key, which is not supported yet | `std::collections::BTreeSet` | fixtures/reject/src/lib.rs:235:75 | -| 1 | comparing pointers to `_` in an atomic, which JS has no address of | `u32` | fixtures/reject/src/lib.rs:777:15 | -| 1 | comparing pointers to `_`, which has no bytes and so no address of its own | `Fused` | fixtures/reject/src/lib.rs:728:70 | -| 1 | const generic types are not supported: `_` | `Block` | fixtures/reject/src/lib.rs:2097:1 | -| 1 | constructing `_` | `std::borrow::Cow` | fixtures/reject/src/lib.rs:349:53 | +| 1 | comparing pointers to `_` in an atomic, which JS has no address of | `u32` | fixtures/reject/src/lib.rs:770:15 | +| 1 | comparing pointers to `_`, which has no bytes and so no address of its own | `Fused` | fixtures/reject/src/lib.rs:721:70 | +| 1 | const generic types are not supported: `_` | `Block` | fixtures/reject/src/lib.rs:2090:1 | +| 1 | constructing `_` | `std::borrow::Cow` | fixtures/reject/src/lib.rs:342:53 | | 1 | hashing `_` as a key, which is not supported yet | `std::collections::BTreeSet` | fixtures/reject/src/lib.rs:235:75 | -| 1 | hashing `_` by its address, which JS has no counterpart of | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1716:5 | +| 1 | hashing `_` by its address, which JS has no counterpart of | `*const [u8; 4]` | fixtures/reject/src/lib.rs:1709:5 | | 1 | hashing `_` through `_`'s own `Hash::hash_slice`, which is not supported yet | `std::vec::Vec`, `Batched` | fixtures/reject/src/lib.rs:310:16 | | 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 `_`, which std's adaptors call in place of `next` or beside it | `Iterator::size_hint` | fixtures/reject/src/lib.rs:173:2 | -| 1 | passing `_`, a closure that owns a value that drops, to `_`, which is not supported yet | `{closure}`, `Entry::or_insert_with` | fixtures/reject/src/lib.rs:319:13 | -| 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `String::retain` | fixtures/reject/src/lib.rs:784:4 | -| 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `str::contains` | fixtures/reject/src/lib.rs:326:4 | +| 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `String::retain` | fixtures/reject/src/lib.rs:777:4 | +| 1 | passing `_`, which drops, to `_`, which is not supported yet | `{closure}`, `str::contains` | fixtures/reject/src/lib.rs:319:4 | | 1 | replacing the value behind a reference to `_` | `std::sync::MutexGuard` | fixtures/reject/src/lib.rs:112:2 | -| 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | `Bits`, `u32` | fixtures/reject/src/lib.rs:582:1 | -| 1 | unsupported call to `_` | `::eq` | fixtures/reject/src/lib.rs:538:2 | -| 1 | unsupported call to `_` | `::contains` | fixtures/reject/src/lib.rs:984:32 | -| 1 | unsupported call to `_` | `::eq` | fixtures/reject/src/lib.rs:369:2 | -| 1 | unsupported call to `_` | `::is_sorted` | fixtures/reject/src/lib.rs:766:15 | +| 1 | union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart | `Bits`, `u32` | fixtures/reject/src/lib.rs:575:1 | +| 1 | unsupported call to `_` | `::eq` | fixtures/reject/src/lib.rs:531:2 | +| 1 | unsupported call to `_` | `::contains` | fixtures/reject/src/lib.rs:977:32 | +| 1 | unsupported call to `_` | `::eq` | fixtures/reject/src/lib.rs:362:2 | +| 1 | unsupported call to `_` | `::is_sorted` | fixtures/reject/src/lib.rs:759:15 | | 1 | unsupported call to `_` | `::hash` | fixtures/reject/src/lib.rs:301:10 | -| 1 | unsupported call to `_` | `std::any::TypeId::of` | fixtures/reject/src/lib.rs:538:17 | -| 1 | unsupported call to `_` | `std::borrow::Cow::is_borrowed` | fixtures/reject/src/lib.rs:343:2 | -| 1 | unsupported call to `_` | `std::mem::size_of_val` | fixtures/reject/src/lib.rs:2174:2 | -| 1 | unsupported call to `_` | `std::num::is_ascii_octdigit` | fixtures/reject/src/lib.rs:1277:4 | +| 1 | unsupported call to `_` | `std::any::TypeId::of` | fixtures/reject/src/lib.rs:531:17 | +| 1 | unsupported call to `_` | `std::borrow::Cow::is_borrowed` | fixtures/reject/src/lib.rs:336:2 | +| 1 | unsupported call to `_` | `std::mem::size_of_val` | fixtures/reject/src/lib.rs:2167:2 | +| 1 | unsupported call to `_` | `std::num::is_ascii_octdigit` | fixtures/reject/src/lib.rs:1270:4 | | 1 | unsupported call to `_` | `std::ops::Range::contains` | fixtures/reject/src/lib.rs:160:8 | -| 1 | unsupported call to `_` | `std::ops::Range::is_empty` | fixtures/reject/src/lib.rs:989:9 | -| 1 | unsupported call to `_` | `std::ops::RangeTo::contains` | fixtures/reject/src/lib.rs:984:11 | -| 1 | unsupported call to `_` | `std::ptr::addr_eq` | fixtures/reject/src/lib.rs:1712:14 | -| 1 | unsupported call to `_` | `std::ptr::const_ptr::len` | fixtures/reject/src/lib.rs:1717:58 | -| 1 | unsupported call to `_` | `std::ptr::const_ptr::offset` | fixtures/reject/src/lib.rs:1713:73 | -| 1 | unsupported call to `_` | `std::ptr::copy_nonoverlapping` | fixtures/reject/src/lib.rs:1711:3 | -| 1 | unsupported call to `_` | `std::ptr::copy` | fixtures/reject/src/lib.rs:1710:3 | -| 1 | unsupported call to `_` | `std::ptr::mut_ptr::add` | fixtures/reject/src/lib.rs:1713:56 | -| 1 | unsupported call to `_` | `std::std::Layout::new` | fixtures/reject/src/lib.rs:565:15 | -| 1 | unsupported call to `_` | `std::std::alloc` | fixtures/reject/src/lib.rs:567:11 | -| 1 | unsupported call to `_` | `std::std::dealloc` | fixtures/reject/src/lib.rs:570:3 | -| 1 | unsupported call to `_` | `std::str::as_bytes_mut` | fixtures/reject/src/lib.rs:1636:13 | -| 1 | unsupported call to `_` | `std::str::parse` | fixtures/reject/src/lib.rs:439:4 | -| 1 | unsupported type `_` from another crate | `std::net::AddrParseError` | fixtures/reject/src/lib.rs:438:32 | -| 1 | unsupported type `_` from another crate | `std::net::Ipv4Addr` | fixtures/reject/src/lib.rs:438:32 | +| 1 | unsupported call to `_` | `std::ops::Range::is_empty` | fixtures/reject/src/lib.rs:982:9 | +| 1 | unsupported call to `_` | `std::ops::RangeTo::contains` | fixtures/reject/src/lib.rs:977:11 | +| 1 | unsupported call to `_` | `std::ptr::addr_eq` | fixtures/reject/src/lib.rs:1705:14 | +| 1 | unsupported call to `_` | `std::ptr::const_ptr::len` | fixtures/reject/src/lib.rs:1710:58 | +| 1 | unsupported call to `_` | `std::ptr::const_ptr::offset` | fixtures/reject/src/lib.rs:1706:73 | +| 1 | unsupported call to `_` | `std::ptr::copy_nonoverlapping` | fixtures/reject/src/lib.rs:1704:3 | +| 1 | unsupported call to `_` | `std::ptr::copy` | fixtures/reject/src/lib.rs:1703:3 | +| 1 | unsupported call to `_` | `std::ptr::mut_ptr::add` | fixtures/reject/src/lib.rs:1706:56 | +| 1 | unsupported call to `_` | `std::std::Layout::new` | fixtures/reject/src/lib.rs:558:15 | +| 1 | unsupported call to `_` | `std::std::alloc` | fixtures/reject/src/lib.rs:560:11 | +| 1 | unsupported call to `_` | `std::std::dealloc` | fixtures/reject/src/lib.rs:563:3 | +| 1 | unsupported call to `_` | `std::str::as_bytes_mut` | fixtures/reject/src/lib.rs:1629:13 | +| 1 | unsupported call to `_` | `std::str::parse` | fixtures/reject/src/lib.rs:432:4 | +| 1 | unsupported type `_` from another crate | `std::net::AddrParseError` | fixtures/reject/src/lib.rs:431:32 | +| 1 | unsupported type `_` from another crate | `std::net::Ipv4Addr` | fixtures/reject/src/lib.rs:431:32 | ## Spans
a raw pointer to `_` in `_`, which the crate may put another object in place of (49) -- fixtures/reject/src/lib.rs:608:10: a raw pointer to `(u32, u32)` in `Span2`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:669:2: a raw pointer to `(u32, u32)` in `Window`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:687:15: a raw pointer to `(u32, u32)` in `std::cell::UnsafeCell<(u32, u32)>`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:720:21: a raw pointer to `std::cell::UnsafeCell` in `Hits`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:826:10: a raw pointer to `(u32, u32)` in `Plain`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:852:19: a raw pointer to `(u32, u32)` in `Track`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:872:19: a raw pointer to `(u32, u32)` in `Lane`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:908:10: a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:909:10: a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:910:58: a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:922:19: a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:923:19: a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1072:43: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Escaped`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1086:28: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Called`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1110:26: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Looped`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1120:29: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Aliased`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1130:47: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Rewritten`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1142:29: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Loaded`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1176:31: a raw pointer to `(u16, u16)` in `Copied`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1187:39: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Mapped`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1221:18: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Repeated`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1233:46: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Onced`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1248:22: a raw pointer to `(u16, u16)` in `Pushed`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1302:9: a raw pointer to `std::cell::UnsafeCell` in `InArray`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1306:9: a raw pointer to `std::cell::UnsafeCell` in `InTuple`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1310:9: a raw pointer to `std::cell::UnsafeCell` in `InNested`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1314:9: a raw pointer to `std::cell::UnsafeCell` in `InPayload`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1318:9: a raw pointer to `std::cell::UnsafeCell` in `InField`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1322:9: a raw pointer to `std::cell::UnsafeCell` in `InGeneric`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1326:9: a raw pointer to `std::cell::UnsafeCell` in `InWritten`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1455:35: a raw pointer to `std::cell::UnsafeCell` in `ByRead`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1468:35: a raw pointer to `std::cell::UnsafeCell` in `ByWrite`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1481:35: a raw pointer to `std::cell::UnsafeCell` in `BySwap`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1493:35: a raw pointer to `std::cell::UnsafeCell` in `ByReplace`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1504:35: a raw pointer to `std::cell::UnsafeCell` in `ByBox`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1519:35: a raw pointer to `std::cell::UnsafeCell` in `ByClosure`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1532:35: a raw pointer to `std::cell::UnsafeCell` in `ByObject`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1545:35: a raw pointer to `std::cell::UnsafeCell` in `ByInstance`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1554:76: a raw pointer to `std::cell::UnsafeCell` in `BySwapped`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1565:30: a raw pointer to `std::cell::UnsafeCell` in `ByExchanged`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1597:32: a raw pointer to `ByRefReplace` in `(u16, ByRefReplace)`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1605:32: a raw pointer to `ByRefTake` in `(u16, ByRefTake)`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1613:51: a raw pointer to `ByKeySet` in `(u16, ByKeySet)`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1621:55: a raw pointer to `ByKeyReplace` in `(u16, ByKeyReplace)`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1628:52: a raw pointer to `ByKeyTake` in `(u16, ByKeyTake)`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2247:2: a raw pointer to `(u8, u8)` in `([Cloned; 2], (u8, u8))`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2263:2: a raw pointer to `(u8, u8)` in `(Dropped, (u8, u8))`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2281:13: a raw pointer to `(u8, u8)` in `([Greatest; 2], (u8, u8))`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2312:2: a raw pointer to `(u8, u8)` in `([Touched; 2], (u8, u8))`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:601:10: a raw pointer to `(u32, u32)` in `Span2`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:662:2: a raw pointer to `(u32, u32)` in `Window`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:680:15: a raw pointer to `(u32, u32)` in `std::cell::UnsafeCell<(u32, u32)>`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:713:21: a raw pointer to `std::cell::UnsafeCell` in `Hits`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:819:10: a raw pointer to `(u32, u32)` in `Plain`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:845:19: a raw pointer to `(u32, u32)` in `Track`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:865:19: a raw pointer to `(u32, u32)` in `Lane`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:901:10: a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:902:10: a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:903:58: a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:915:19: a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:916:19: a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1065:43: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Escaped`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1079:28: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Called`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1103:26: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Looped`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1113:29: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Aliased`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1123:47: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Rewritten`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1135:29: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Loaded`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1169:31: a raw pointer to `(u16, u16)` in `Copied`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1180:39: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Mapped`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1214:18: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Repeated`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1226:46: a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Onced`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1241:22: a raw pointer to `(u16, u16)` in `Pushed`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1295:9: a raw pointer to `std::cell::UnsafeCell` in `InArray`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1299:9: a raw pointer to `std::cell::UnsafeCell` in `InTuple`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1303:9: a raw pointer to `std::cell::UnsafeCell` in `InNested`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1307:9: a raw pointer to `std::cell::UnsafeCell` in `InPayload`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1311:9: a raw pointer to `std::cell::UnsafeCell` in `InField`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1315:9: a raw pointer to `std::cell::UnsafeCell` in `InGeneric`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1319:9: a raw pointer to `std::cell::UnsafeCell` in `InWritten`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1448:35: a raw pointer to `std::cell::UnsafeCell` in `ByRead`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1461:35: a raw pointer to `std::cell::UnsafeCell` in `ByWrite`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1474:35: a raw pointer to `std::cell::UnsafeCell` in `BySwap`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1486:35: a raw pointer to `std::cell::UnsafeCell` in `ByReplace`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1497:35: a raw pointer to `std::cell::UnsafeCell` in `ByBox`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1512:35: a raw pointer to `std::cell::UnsafeCell` in `ByClosure`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1525:35: a raw pointer to `std::cell::UnsafeCell` in `ByObject`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1538:35: a raw pointer to `std::cell::UnsafeCell` in `ByInstance`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1547:76: a raw pointer to `std::cell::UnsafeCell` in `BySwapped`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1558:30: a raw pointer to `std::cell::UnsafeCell` in `ByExchanged`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1590:32: a raw pointer to `ByRefReplace` in `(u16, ByRefReplace)`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1598:32: a raw pointer to `ByRefTake` in `(u16, ByRefTake)`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1606:51: a raw pointer to `ByKeySet` in `(u16, ByKeySet)`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1614:55: a raw pointer to `ByKeyReplace` in `(u16, ByKeyReplace)`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1621:52: a raw pointer to `ByKeyTake` in `(u16, ByKeyTake)`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2240:2: a raw pointer to `(u8, u8)` in `([Cloned; 2], (u8, u8))`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2256:2: a raw pointer to `(u8, u8)` in `(Dropped, (u8, u8))`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2274:13: a raw pointer to `(u8, u8)` in `([Greatest; 2], (u8, u8))`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2305:2: a raw pointer to `(u8, u8)` in `([Touched; 2], (u8, u8))`, which the crate may put another object in place of
@@ -500,125 +497,125 @@ The type or module each refused type or path belongs to. - fixtures/reject/src/lib.rs:160:8: unsupported call to `std::ops::Range::::contains::` - fixtures/reject/src/lib.rs:301:10: unsupported call to `::hash::` -- fixtures/reject/src/lib.rs:343:2: unsupported call to `std::borrow::Cow::<'_, [u8]>::is_borrowed` -- fixtures/reject/src/lib.rs:369:2: unsupported call to ` as std::cmp::PartialEq>::eq` -- fixtures/reject/src/lib.rs:434:17: unsupported call to ` as std::iter::Iterator>::sum::` -- fixtures/reject/src/lib.rs:434:38: unsupported call to ` as std::iter::Iterator>::sum::` -- fixtures/reject/src/lib.rs:439:4: unsupported call to `core::str::::parse::` -- fixtures/reject/src/lib.rs:538:2: unsupported call to `::eq` -- fixtures/reject/src/lib.rs:538:17: unsupported call to `std::any::TypeId::of::` -- fixtures/reject/src/lib.rs:565:15: unsupported call to `std::alloc::Layout::new::` -- fixtures/reject/src/lib.rs:567:11: unsupported call to `std::alloc::alloc` -- fixtures/reject/src/lib.rs:570:3: unsupported call to `std::alloc::dealloc` -- fixtures/reject/src/lib.rs:766:15: unsupported call to ` as std::iter::Iterator>::is_sorted` -- fixtures/reject/src/lib.rs:984:11: unsupported call to `std::ops::RangeTo::::contains::` -- fixtures/reject/src/lib.rs:984:32: unsupported call to ` as std::ops::RangeBounds>::contains::` -- fixtures/reject/src/lib.rs:989:9: unsupported call to `std::ops::Range::<&mut u8>::is_empty` -- fixtures/reject/src/lib.rs:1277:4: unsupported call to `core::num::::is_ascii_octdigit` -- fixtures/reject/src/lib.rs:1636:13: unsupported call to `core::str::::as_bytes_mut` -- fixtures/reject/src/lib.rs:1710:3: unsupported call to `std::ptr::copy::<[u8; 4]>` -- fixtures/reject/src/lib.rs:1711:3: unsupported call to `std::ptr::copy_nonoverlapping::<[u8; 4]>` -- fixtures/reject/src/lib.rs:1712:14: unsupported call to `std::ptr::addr_eq::<[u8; 4], [u8; 4]>` -- fixtures/reject/src/lib.rs:1713:56: unsupported call to `std::ptr::mut_ptr::::add` -- fixtures/reject/src/lib.rs:1713:73: unsupported call to `std::ptr::const_ptr::::offset` -- fixtures/reject/src/lib.rs:1717:58: unsupported call to `std::ptr::const_ptr::::len` -- fixtures/reject/src/lib.rs:2174:2: unsupported call to `std::mem::size_of_val::` +- fixtures/reject/src/lib.rs:336:2: unsupported call to `std::borrow::Cow::<'_, [u8]>::is_borrowed` +- fixtures/reject/src/lib.rs:362:2: unsupported call to ` as std::cmp::PartialEq>::eq` +- fixtures/reject/src/lib.rs:427:17: unsupported call to ` as std::iter::Iterator>::sum::` +- fixtures/reject/src/lib.rs:427:38: unsupported call to ` as std::iter::Iterator>::sum::` +- fixtures/reject/src/lib.rs:432:4: unsupported call to `core::str::::parse::` +- fixtures/reject/src/lib.rs:531:2: unsupported call to `::eq` +- fixtures/reject/src/lib.rs:531:17: unsupported call to `std::any::TypeId::of::` +- fixtures/reject/src/lib.rs:558:15: unsupported call to `std::alloc::Layout::new::` +- fixtures/reject/src/lib.rs:560:11: unsupported call to `std::alloc::alloc` +- fixtures/reject/src/lib.rs:563:3: unsupported call to `std::alloc::dealloc` +- fixtures/reject/src/lib.rs:759:15: unsupported call to ` as std::iter::Iterator>::is_sorted` +- fixtures/reject/src/lib.rs:977:11: unsupported call to `std::ops::RangeTo::::contains::` +- fixtures/reject/src/lib.rs:977:32: unsupported call to ` as std::ops::RangeBounds>::contains::` +- fixtures/reject/src/lib.rs:982:9: unsupported call to `std::ops::Range::<&mut u8>::is_empty` +- fixtures/reject/src/lib.rs:1270:4: unsupported call to `core::num::::is_ascii_octdigit` +- fixtures/reject/src/lib.rs:1629:13: unsupported call to `core::str::::as_bytes_mut` +- fixtures/reject/src/lib.rs:1703:3: unsupported call to `std::ptr::copy::<[u8; 4]>` +- fixtures/reject/src/lib.rs:1704:3: unsupported call to `std::ptr::copy_nonoverlapping::<[u8; 4]>` +- fixtures/reject/src/lib.rs:1705:14: unsupported call to `std::ptr::addr_eq::<[u8; 4], [u8; 4]>` +- fixtures/reject/src/lib.rs:1706:56: unsupported call to `std::ptr::mut_ptr::::add` +- fixtures/reject/src/lib.rs:1706:73: unsupported call to `std::ptr::const_ptr::::offset` +- fixtures/reject/src/lib.rs:1710:58: unsupported call to `std::ptr::const_ptr::::len` +- fixtures/reject/src/lib.rs:2167:2: unsupported call to `std::mem::size_of_val::`
a raw pointer to `_` in a variable assigned again while it may point there (22) -- fixtures/reject/src/lib.rs:616:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:624:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:633:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:641:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:650:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:658:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:696:15: a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:709:15: a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1001:26: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1014:22: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1024:12: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1033:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1043:17: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1048:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1669:10: a raw pointer to `Target` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1682:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1697:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1733:26: a raw pointer to `[u8; 4]` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:1734:10: a raw pointer to `[u8; 4]` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:2180:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:2188:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there -- fixtures/reject/src/lib.rs:2196:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:609:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:617:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:626:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:634:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:643:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:651:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:689:15: a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:702:15: a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:994:26: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1007:22: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1017:12: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1026:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1036:17: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1041:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1662:10: a raw pointer to `Target` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1675:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1690:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1726:26: a raw pointer to `[u8; 4]` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:1727:10: a raw pointer to `[u8; 4]` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:2173:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:2181:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there +- fixtures/reject/src/lib.rs:2189:10: a raw pointer to `(u32, u32)` in a variable assigned again while it may point there
a reference through which a raw pointer may be made into `_` in `_`, which the crate may put another object in place of (15) -- fixtures/reject/src/lib.rs:1337:33: a reference through which a raw pointer may be made into `InArray` in `[InArray; 2]`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1346:33: a reference through which a raw pointer may be made into `InTuple` in `(u16, InTuple)`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1355:34: a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1376:33: a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1389:35: a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1398:35: a reference through which a raw pointer may be made into `InWritten` in `[InWritten; 1]`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1957:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Replaced`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1975:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Swapped`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:1993:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Taken`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2012:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Assigned`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2038:22: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Deeper`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2062:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Dynamic`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2078:15: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Closed`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2091:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `[std::cell::UnsafeCell; 2]`, which the crate may put another object in place of -- fixtures/reject/src/lib.rs:2137:20: a reference through which a raw pointer may be made into `Parked` in `Parking`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1330:33: a reference through which a raw pointer may be made into `InArray` in `[InArray; 2]`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1339:33: a reference through which a raw pointer may be made into `InTuple` in `(u16, InTuple)`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1348:34: a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1369:33: a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1382:35: a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1391:35: a reference through which a raw pointer may be made into `InWritten` in `[InWritten; 1]`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1950:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Replaced`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1968:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Swapped`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:1986:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Taken`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2005:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Assigned`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2031:22: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Deeper`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2055:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Dynamic`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2071:15: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Closed`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2084:20: a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `[std::cell::UnsafeCell; 2]`, which the crate may put another object in place of +- fixtures/reject/src/lib.rs:2130:20: a reference through which a raw pointer may be made into `Parked` in `Parking`, which the crate may put another object in place of
a reference to `_`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there (15) -- fixtures/reject/src/lib.rs:1655:18: a reference to `std::cell::UnsafeCell`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1733:26: a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1751:22: a reference to `Behind`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1766:16: a reference to `Unboxed`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1787:18: a reference to `Deep`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1809:21: a reference to `Slotted`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1828:20: a reference to `Shared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1845:20: a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1858:26: a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1873:22: a reference to `Compared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1890:22: a reference to `Enclosing`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1906:17: a reference to `Chosen`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1919:19: a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:1934:21: a reference to `Wrapped>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there -- fixtures/reject/src/lib.rs:2108:13: a reference to `std::option::Option>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1648:18: a reference to `std::cell::UnsafeCell`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1726:26: a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1744:22: a reference to `Behind`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1759:16: a reference to `Unboxed`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1780:18: a reference to `Deep`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1802:21: a reference to `Slotted`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1821:20: a reference to `Shared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1838:20: a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1851:26: a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1866:22: a reference to `Compared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1883:22: a reference to `Enclosing`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1899:17: a reference to `Chosen`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1912:19: a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:1927:21: a reference to `Wrapped>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there +- fixtures/reject/src/lib.rs:2101:13: a reference to `std::option::Option>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there
`_` with a mutable reference to a value JS copies, which its mapping would copy (5) -- fixtures/reject/src/lib.rs:1235:22: `std::iter::once` with a mutable reference to a value JS copies, which its mapping would copy -- fixtures/reject/src/lib.rs:1637:13: `core::str::::get_unchecked_mut` with a mutable reference to a value JS copies, which its mapping would copy -- fixtures/reject/src/lib.rs:1642:20: `std::str::from_utf8_mut` with a mutable reference to a value JS copies, which its mapping would copy -- fixtures/reject/src/lib.rs:2117:4: `std::collections::LinkedList::::retain` with a mutable reference to a value JS copies, which its mapping would copy -- fixtures/reject/src/lib.rs:2119:2: `std::default::Default::default` with a mutable reference to a value JS copies, which its mapping would copy +- fixtures/reject/src/lib.rs:1228:22: `std::iter::once` with a mutable reference to a value JS copies, which its mapping would copy +- fixtures/reject/src/lib.rs:1630:13: `core::str::::get_unchecked_mut` with a mutable reference to a value JS copies, which its mapping would copy +- fixtures/reject/src/lib.rs:1635:20: `std::str::from_utf8_mut` with a mutable reference to a value JS copies, which its mapping would copy +- fixtures/reject/src/lib.rs:2110:4: `std::collections::LinkedList::::retain` with a mutable reference to a value JS copies, which its mapping would copy +- fixtures/reject/src/lib.rs:2112:2: `std::default::Default::default` with a mutable reference to a value JS copies, which its mapping would copy
a raw pointer to `_` in an element, a payload, or a union field, which is not supported yet (5) -- fixtures/reject/src/lib.rs:679:10: a raw pointer to `(u32, u32)` in an element, a payload, or a union field, which is not supported yet -- fixtures/reject/src/lib.rs:1726:15: a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet -- fixtures/reject/src/lib.rs:1726:18: a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet -- fixtures/reject/src/lib.rs:1726:37: a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet -- fixtures/reject/src/lib.rs:1726:44: a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet +- fixtures/reject/src/lib.rs:672:10: a raw pointer to `(u32, u32)` in an element, a payload, or a union field, which is not supported yet +- fixtures/reject/src/lib.rs:1719:15: a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet +- fixtures/reject/src/lib.rs:1719:18: a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet +- fixtures/reject/src/lib.rs:1719:37: a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet +- fixtures/reject/src/lib.rs:1719:44: a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet
a variant of `_`, which is not supported: either is the same JS string (4) +- fixtures/reject/src/lib.rs:324:2: a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string +- fixtures/reject/src/lib.rs:325:30: a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string +- fixtures/reject/src/lib.rs:326:27: a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string - fixtures/reject/src/lib.rs:331:2: a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string -- fixtures/reject/src/lib.rs:332:30: a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string -- fixtures/reject/src/lib.rs:333:27: a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string -- fixtures/reject/src/lib.rs:338:2: a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string
@@ -627,7 +624,7 @@ The type or module each refused type or path belongs to. - fixtures/reject/src/lib.rs:83:2: an assignment through a reference to `std::sync::MutexGuard<'_, u8>` - fixtures/reject/src/lib.rs:107:2: an assignment through a reference to `std::pin::Pin>>` - fixtures/reject/src/lib.rs:214:2: an assignment through a reference to `std::pin::Pin<&mut Noisy>` -- fixtures/reject/src/lib.rs:2211:2: an assignment through a reference to `std::sync::LazyLock` +- fixtures/reject/src/lib.rs:2204:2: an assignment through a reference to `std::sync::LazyLock` @@ -635,23 +632,23 @@ The type or module each refused type or path belongs to. - fixtures/reject/src/lib.rs:21:4: `slice::fill` of `Reused`, whose `clone_from` is its own, which is not supported yet - fixtures/reject/src/lib.rs:286:4: `slice::clone_from_slice` of `Reused`, whose `clone_from` is its own, which is not supported yet -- fixtures/reject/src/lib.rs:2169:4: `Clone::clone_from` of `std::vec::Vec`, whose `clone_from` is its own, which is not supported yet +- fixtures/reject/src/lib.rs:2162:4: `Clone::clone_from` of `std::vec::Vec`, whose `clone_from` is its own, which is not supported yet
a copy of a closure that changes what it captured (3) - fixtures/reject/src/lib.rs:224:14: a copy of a closure that changes what it captured -- fixtures/reject/src/lib.rs:514:14: a copy of a closure that changes what it captured -- fixtures/reject/src/lib.rs:515:14: a copy of a closure that changes what it captured +- fixtures/reject/src/lib.rs:507:14: a copy of a closure that changes what it captured +- fixtures/reject/src/lib.rs:508:14: a copy of a closure that changes what it captured
a slice or a cell of a mutable reference to `_` that names no place, which a whole write would replace only there (3) -- fixtures/reject/src/lib.rs:2164:2: a slice or a cell of a mutable reference to `Reused` that names no place, which a whole write would replace only there -- fixtures/reject/src/lib.rs:2206:3: a slice or a cell of a mutable reference to `std::cell::LazyCell` that names no place, which a whole write would replace only there -- fixtures/reject/src/lib.rs:2217:2: a slice or a cell of a mutable reference to `std::thread::LocalKey` that names no place, which a whole write would replace only there +- fixtures/reject/src/lib.rs:2157:2: a slice or a cell of a mutable reference to `Reused` that names no place, which a whole write would replace only there +- fixtures/reject/src/lib.rs:2199:3: a slice or a cell of a mutable reference to `std::cell::LazyCell` that names no place, which a whole write would replace only there +- fixtures/reject/src/lib.rs:2210:2: a slice or a cell of a mutable reference to `std::thread::LocalKey` that names no place, which a whole write would replace only there
@@ -694,29 +691,29 @@ The type or module each refused type or path belongs to.
`_`, a trait object of the generic trait `_`, which is not supported yet (2) -- fixtures/reject/src/lib.rs:464:23: `dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet -- fixtures/reject/src/lib.rs:465:4: `dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet +- fixtures/reject/src/lib.rs:457:23: `dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet +- fixtures/reject/src/lib.rs:458:4: `dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet
a cast from a pointer to `_` to one to `_`, which reads the bytes of one type as another (2) -- fixtures/reject/src/lib.rs:555:27: a cast from a pointer to `u32` to one to `u8`, which reads the bytes of one type as another -- fixtures/reject/src/lib.rs:1713:17: a cast from a pointer to `[u8; 4]` to one to `u8`, which reads the bytes of one type as another +- fixtures/reject/src/lib.rs:548:27: a cast from a pointer to `u32` to one to `u8`, which reads the bytes of one type as another +- fixtures/reject/src/lib.rs:1706:17: a cast from a pointer to `[u8; 4]` to one to `u8`, which reads the bytes of one type as another
a coercion to `_`, which is not supported yet (2) -- fixtures/reject/src/lib.rs:455:40: a coercion to `std::sync::Weak`, which is not supported yet -- fixtures/reject/src/lib.rs:491:30: a coercion to `&Tail`, which is not supported yet +- fixtures/reject/src/lib.rs:448:40: a coercion to `std::sync::Weak`, which is not supported yet +- fixtures/reject/src/lib.rs:484:30: a coercion to `&Tail`, which is not supported yet
a raw pointer to a place of `()`, which has no address of its own (2) -- fixtures/reject/src/lib.rs:728:15: a raw pointer to a place of `()`, which has no address of its own -- fixtures/reject/src/lib.rs:728:29: a raw pointer to a place of `()`, which has no address of its own +- fixtures/reject/src/lib.rs:721:15: a raw pointer to a place of `()`, which has no address of its own +- fixtures/reject/src/lib.rs:721:29: a raw pointer to a place of `()`, which has no address of its own
@@ -729,8 +726,8 @@ The type or module each refused type or path belongs to.
comparing pointers to `_`, each a place JS makes of its own (2) -- fixtures/reject/src/lib.rs:596:2: comparing pointers to `u32`, each a place JS makes of its own -- fixtures/reject/src/lib.rs:2145:2: comparing pointers to `u32`, each a place JS makes of its own +- fixtures/reject/src/lib.rs:589:2: comparing pointers to `u32`, each a place JS makes of its own +- fixtures/reject/src/lib.rs:2138:2: comparing pointers to `u32`, each a place JS makes of its own
@@ -743,45 +740,45 @@ The type or module each refused type or path belongs to.
passing `_`, which drops, to `_`, which is not supported yet (2) -- fixtures/reject/src/lib.rs:326:4: passing `{closure@fixtures/reject/src/lib.rs:326:13: 326:27}`, which drops, to `str::contains`, which is not supported yet -- fixtures/reject/src/lib.rs:784:4: passing `{closure@fixtures/reject/src/lib.rs:784:11: 784:19}`, which drops, to `String::retain`, which is not supported yet +- fixtures/reject/src/lib.rs:319:4: passing `{closure@fixtures/reject/src/lib.rs:319:13: 319:27}`, which drops, to `str::contains`, which is not supported yet +- fixtures/reject/src/lib.rs:777:4: passing `{closure@fixtures/reject/src/lib.rs:777:11: 777:19}`, which drops, to `String::retain`, which is not supported yet
unsupported type `_` from another crate (2) -- fixtures/reject/src/lib.rs:438:32: unsupported type `std::net::AddrParseError` from another crate -- fixtures/reject/src/lib.rs:438:32: unsupported type `std::net::Ipv4Addr` from another crate +- fixtures/reject/src/lib.rs:431:32: unsupported type `std::net::AddrParseError` from another crate +- fixtures/reject/src/lib.rs:431:32: unsupported type `std::net::Ipv4Addr` from another crate
`Buf::copy_to_bytes` of `_`, a value JS copies, which is not supported (1) -- fixtures/reject/src/lib.rs:761:2: `Buf::copy_to_bytes` of `Blank`, a value JS copies, which is not supported +- fixtures/reject/src/lib.rs:754:2: `Buf::copy_to_bytes` of `Blank`, a value JS copies, which is not supported
`BufMut::put` of `_` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported (1) -- fixtures/reject/src/lib.rs:394:2: `BufMut::put` of `Counted` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported +- fixtures/reject/src/lib.rs:387:2: `BufMut::put` of `Counted` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported
`BufMut::put` of `_` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported (1) -- fixtures/reject/src/lib.rs:389:2: `BufMut::put` of `Counted` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported +- fixtures/reject/src/lib.rs:382:2: `BufMut::put` of `Counted` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported
`Bytes::from_owner` of `_`, which would drop with the last clone of what it makes, which is not supported (1) -- fixtures/reject/src/lib.rs:374:2: `Bytes::from_owner` of `std::sync::Arc<[u8]>`, which would drop with the last clone of what it makes, which is not supported +- fixtures/reject/src/lib.rs:367:2: `Bytes::from_owner` of `std::sync::Arc<[u8]>`, which would drop with the last clone of what it makes, which is not supported
`Extend` of `_` by `_`, whose `_` of `_` is not supported yet (1) -- fixtures/reject/src/lib.rs:1272:31: `Extend` of `(std::vec::Vec, Tens)` by `(u8, u8)`, whose `Tens` of `u8` is not supported yet +- fixtures/reject/src/lib.rs:1265:31: `Extend` of `(std::vec::Vec, Tens)` by `(u8, u8)`, whose `Tens` of `u8` is not supported yet
@@ -805,7 +802,7 @@ The type or module each refused type or path belongs to.
`_` is not supported: its field `_` is `_`, typed `_`, whose `Pending` would be `rt.OuterPending` as `_` (1) -- fixtures/reject/src/lib.rs:502:2: `Waiting>` is not supported: its field `poll` is `Poll`, typed `rt.Poll`, whose `Pending` would be `rt.OuterPending` as `Poll>` +- fixtures/reject/src/lib.rs:495:2: `Waiting>` is not supported: its field `poll` is `Poll`, typed `rt.Poll`, whose `Pending` would be `rt.OuterPending` as `Poll>`
@@ -817,7 +814,7 @@ The type or module each refused type or path belongs to.
`_` of `_`, which is not supported yet (1) -- fixtures/reject/src/lib.rs:538:4: `std::any::Any::type_id` of `dyn std::any::Any`, which is not supported yet +- fixtures/reject/src/lib.rs:531:4: `std::any::Any::type_id` of `dyn std::any::Any`, which is not supported yet
@@ -829,19 +826,19 @@ The type or module each refused type or path belongs to.
`_`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported (1) -- fixtures/reject/src/lib.rs:383:6: `BytesMut::capacity`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported +- fixtures/reject/src/lib.rs:376:6: `BytesMut::capacity`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported
`clone_from` of `_`, whose items' `clone_from` is their own, which is not supported yet (1) -- fixtures/reject/src/lib.rs:2118:4: `clone_from` of `std::collections::LinkedList`, whose items' `clone_from` is their own, which is not supported yet +- fixtures/reject/src/lib.rs:2111:4: `clone_from` of `std::collections::LinkedList`, whose items' `clone_from` is their own, which is not supported yet
`collect` of `_`, which sorts by `_`'s own `Ord`, of entries that drop, which is not supported yet (1) -- fixtures/reject/src/lib.rs:955:22: `collect` of `std::collections::BTreeMap, Noisy>`, which sorts by `std::cell::Cell`'s own `Ord`, of entries that drop, which is not supported yet +- fixtures/reject/src/lib.rs:948:22: `collect` of `std::collections::BTreeMap, Noisy>`, which sorts by `std::cell::Cell`'s own `Ord`, of entries that drop, which is not supported yet
@@ -871,13 +868,13 @@ The type or module each refused type or path belongs to.
a cast from `_` to `_`, which reads the bytes of one type as another (1) -- fixtures/reject/src/lib.rs:1713:33: a cast from `*const [u8; 4]` to `*const u8`, which reads the bytes of one type as another +- fixtures/reject/src/lib.rs:1706:33: a cast from `*const [u8; 4]` to `*const u8`, which reads the bytes of one type as another
a coercion of `_` to `_`, a pointer to a slice (1) -- fixtures/reject/src/lib.rs:1714:28: a coercion of `*const [u8; 4]` to `*const [u8]`, a pointer to a slice +- fixtures/reject/src/lib.rs:1707:28: a coercion of `*const [u8; 4]` to `*const [u8]`, a pointer to a slice
@@ -889,13 +886,13 @@ The type or module each refused type or path belongs to.
a constant of type `_`, a pointer into memory translation can't name (1) -- fixtures/reject/src/lib.rs:778:3: a constant of type `&u32`, a pointer into memory translation can't name +- fixtures/reject/src/lib.rs:771:3: a constant of type `&u32`, a pointer into memory translation can't name
a dangling pointer to `_`, a value of no bytes made of more than structs and tuples (1) -- fixtures/reject/src/lib.rs:737:11: a dangling pointer to `Only`, a value of no bytes made of more than structs and tuples +- fixtures/reject/src/lib.rs:730:11: a dangling pointer to `Only`, a value of no bytes made of more than structs and tuples
@@ -907,13 +904,13 @@ The type or module each refused type or path belongs to.
a mapped guard of `_`, which JS can't write in place (1) -- fixtures/reject/src/lib.rs:2152:10: a mapped guard of `{closure@fixtures/reject/src/lib.rs:2151:38: 2151:50}`, which JS can't write in place +- fixtures/reject/src/lib.rs:2145:10: a mapped guard of `{closure@fixtures/reject/src/lib.rs:2144:38: 2144:50}`, which JS can't write in place
a mutable reference into a `Result`'s payload, passed on or kept (1) -- fixtures/reject/src/lib.rs:362:12: a mutable reference into a `Result`'s payload, passed on or kept +- fixtures/reject/src/lib.rs:355:12: a mutable reference into a `Result`'s payload, passed on or kept
@@ -925,7 +922,7 @@ The type or module each refused type or path belongs to.
a pointer's address, which JS has no counterpart of (1) -- fixtures/reject/src/lib.rs:560:17: a pointer's address, which JS has no counterpart of +- fixtures/reject/src/lib.rs:553:17: a pointer's address, which JS has no counterpart of
@@ -937,13 +934,13 @@ The type or module each refused type or path belongs to.
a raw pointer to `_` behind a reference, which is the object and not where it is kept (1) -- fixtures/reject/src/lib.rs:577:10: a raw pointer to `std::vec::Vec` behind a reference, which is the object and not where it is kept +- fixtures/reject/src/lib.rs:570:10: a raw pointer to `std::vec::Vec` behind a reference, which is the object and not where it is kept
a reference through which a raw pointer may be made into `_` in an element, a payload, or a union field, which is not supported yet (1) -- fixtures/reject/src/lib.rs:1364:11: a reference through which a raw pointer may be made into `InPayload` in an element, a payload, or a union field, which is not supported yet +- fixtures/reject/src/lib.rs:1357:11: a reference through which a raw pointer may be made into `InPayload` in an element, a payload, or a union field, which is not supported yet
@@ -955,19 +952,19 @@ The type or module each refused type or path belongs to.
a slice of one byte's place, which a byte slice can view only in an array of bytes (1) -- fixtures/reject/src/lib.rs:2158:2: a slice of one byte's place, which a byte slice can view only in an array of bytes +- fixtures/reject/src/lib.rs:2151:2: a slice of one byte's place, which a byte slice can view only in an array of bytes
a trait object of `_`, which is not supported yet (1) -- fixtures/reject/src/lib.rs:481:26: a trait object of `[u8; 4]`, which is not supported yet +- fixtures/reject/src/lib.rs:474:26: a trait object of `[u8; 4]`, which is not supported yet
an upcast from `_` to `_`, which is not supported yet (1) -- fixtures/reject/src/lib.rs:532:32: an upcast from `dyn Keyed` to `dyn std::any::Any`, which is not supported yet +- fixtures/reject/src/lib.rs:525:32: an upcast from `dyn Keyed` to `dyn std::any::Any`, which is not supported yet
@@ -979,7 +976,7 @@ The type or module each refused type or path belongs to.
comparing `_` (1) -- fixtures/reject/src/lib.rs:1712:41: comparing `*mut [u8; 4]` +- fixtures/reject/src/lib.rs:1705:41: comparing `*mut [u8; 4]`
@@ -991,25 +988,25 @@ The type or module each refused type or path belongs to.
comparing pointers to `_` in an atomic, which JS has no address of (1) -- fixtures/reject/src/lib.rs:777:15: comparing pointers to `u32` in an atomic, which JS has no address of +- fixtures/reject/src/lib.rs:770:15: comparing pointers to `u32` in an atomic, which JS has no address of
comparing pointers to `_`, which has no bytes and so no address of its own (1) -- fixtures/reject/src/lib.rs:728:70: comparing pointers to `Fused`, which has no bytes and so no address of its own +- fixtures/reject/src/lib.rs:721:70: comparing pointers to `Fused`, which has no bytes and so no address of its own
const generic types are not supported: `_` (1) -- fixtures/reject/src/lib.rs:2097:1: const generic types are not supported: `Block` +- fixtures/reject/src/lib.rs:2090:1: const generic types are not supported: `Block`
constructing `_` (1) -- fixtures/reject/src/lib.rs:349:53: constructing `std::borrow::Cow<'_, std::sync::Arc>` +- fixtures/reject/src/lib.rs:342:53: constructing `std::borrow::Cow<'_, std::sync::Arc>`
@@ -1021,7 +1018,7 @@ The type or module each refused type or path belongs to.
hashing `_` by its address, which JS has no counterpart of (1) -- fixtures/reject/src/lib.rs:1716:5: hashing `*const [u8; 4]` by its address, which JS has no counterpart of +- fixtures/reject/src/lib.rs:1709:5: hashing `*const [u8; 4]` by its address, which JS has no counterpart of
@@ -1031,14 +1028,8 @@ The type or module each refused type or path belongs to. -
passing `_`, a closure that owns a value that drops, to `_`, which is not supported yet (1) - -- fixtures/reject/src/lib.rs:319:13: passing `{closure@fixtures/reject/src/lib.rs:319:28: 319:35}`, a closure that owns a value that drops, to `Entry::or_insert_with`, which is not supported yet - -
-
union `_`, whose fields overlap in `_` and `f64`, which JS keeps apart (1) -- fixtures/reject/src/lib.rs:582:1: union `Bits`, whose fields overlap in `u32` and `f64`, which JS keeps apart +- fixtures/reject/src/lib.rs:575: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 1b991db4d..c2d3e50ef 100644 --- a/ts/fixtures/reject/expected.txt +++ b/ts/fixtures/reject/expected.txt @@ -25,9 +25,9 @@ replacing the value behind a reference to `std::pin::Pin>>` at fixtures/reject/src/lib.rs:107:2 replacing the value behind a reference to `std::pin::Pin>` at fixtures/reject/src/lib.rs:99:2 unsupported call to `std::ops::Range::::contains::` at fixtures/reject/src/lib.rs:160:8 -unsupported call to `std::ops::RangeTo::::contains::` at fixtures/reject/src/lib.rs:984:11 -unsupported call to ` as std::ops::RangeBounds>::contains::` at fixtures/reject/src/lib.rs:984:32 -unsupported call to `std::ops::Range::<&mut u8>::is_empty` at fixtures/reject/src/lib.rs:989:9 +unsupported call to `std::ops::RangeTo::::contains::` at fixtures/reject/src/lib.rs:977:11 +unsupported call to ` as std::ops::RangeBounds>::contains::` at fixtures/reject/src/lib.rs:977:32 +unsupported call to `std::ops::Range::<&mut u8>::is_empty` at fixtures/reject/src/lib.rs:982:9 a `skip` of `std::iter::Zip, {closure@fixtures/reject/src/lib.rs:201:27: 201:31}>, std::iter::Map, {closure@fixtures/reject/src/lib.rs:201:59: 201:63}>>`, a zip std reads by index, of items that drop, which is not supported yet at fixtures/reject/src/lib.rs:202:8 a `collect` in place of `std::iter::Map, {closure@fixtures/reject/src/lib.rs:208:32: 208:40}>, std::ops::Range>, {closure@fixtures/reject/src/lib.rs:209:24: 209:32}>`, a zip std reads by index, holding values that drop, which is not supported yet at fixtures/reject/src/lib.rs:209:40 an assignment through a reference to `std::pin::Pin<&mut Noisy>` at fixtures/reject/src/lib.rs:214:2 @@ -38,194 +38,193 @@ comparing `std::collections::BTreeSet` as a key, which is not supported yet `HashMap::contains_key` of `std::collections::HashMap` by `u8`, which is not supported yet at fixtures/reject/src/lib.rs:253:6 `slice::clone_from_slice` of `Reused`, whose `clone_from` is its own, which is not supported yet at fixtures/reject/src/lib.rs:286:4 a coercion to `std::sync::Arc<[u8]>` at fixtures/reject/src/lib.rs:291:2 +a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string at fixtures/reject/src/lib.rs:324:2 +a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string at fixtures/reject/src/lib.rs:326:27 +a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string at fixtures/reject/src/lib.rs:325:30 a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string at fixtures/reject/src/lib.rs:331:2 -a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string at fixtures/reject/src/lib.rs:333:27 -a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string at fixtures/reject/src/lib.rs:332:30 -a variant of `std::borrow::Cow<'_, str>`, which is not supported: either is the same JS string at fixtures/reject/src/lib.rs:338:2 -unsupported call to `std::borrow::Cow::<'_, [u8]>::is_borrowed` at fixtures/reject/src/lib.rs:343:2 -constructing `std::borrow::Cow<'_, std::sync::Arc>` at fixtures/reject/src/lib.rs:349:53 +unsupported call to `std::borrow::Cow::<'_, [u8]>::is_borrowed` at fixtures/reject/src/lib.rs:336:2 +constructing `std::borrow::Cow<'_, std::sync::Arc>` at fixtures/reject/src/lib.rs:342:53 hashing `std::vec::Vec` through `Batched`'s own `Hash::hash_slice`, which is not supported yet at fixtures/reject/src/lib.rs:310:16 -passing `{closure@fixtures/reject/src/lib.rs:319:28: 319:35}`, a closure that owns a value that drops, to `Entry::or_insert_with`, which is not supported yet at fixtures/reject/src/lib.rs:319:13 -passing `{closure@fixtures/reject/src/lib.rs:326:13: 326:27}`, which drops, to `str::contains`, which is not supported yet at fixtures/reject/src/lib.rs:326:4 -unsupported call to ` as std::iter::Iterator>::sum::` at fixtures/reject/src/lib.rs:434:17 -unsupported call to ` as std::iter::Iterator>::sum::` at fixtures/reject/src/lib.rs:434:38 -a mutable reference into a `Result`'s payload, passed on or kept at fixtures/reject/src/lib.rs:362:12 -unsupported call to ` as std::cmp::PartialEq>::eq` at fixtures/reject/src/lib.rs:369:2 -`Bytes::from_owner` of `std::sync::Arc<[u8]>`, which would drop with the last clone of what it makes, which is not supported at fixtures/reject/src/lib.rs:374:2 -`BytesMut::capacity`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported at fixtures/reject/src/lib.rs:383:6 -`BufMut::put` of `Counted` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported at fixtures/reject/src/lib.rs:389:2 -`BufMut::put` of `Counted` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported at fixtures/reject/src/lib.rs:394:2 -unsupported call to `core::str::::parse::` at fixtures/reject/src/lib.rs:439:4 -unsupported type `std::net::Ipv4Addr` from another crate at fixtures/reject/src/lib.rs:438:32 -unsupported type `std::net::AddrParseError` from another crate at fixtures/reject/src/lib.rs:438:32 -a coercion to `std::sync::Weak`, which is not supported yet at fixtures/reject/src/lib.rs:455:40 -`dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet at fixtures/reject/src/lib.rs:464:23 -`dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet at fixtures/reject/src/lib.rs:465:4 -a trait object of `[u8; 4]`, which is not supported yet at fixtures/reject/src/lib.rs:481:26 -a coercion to `&Tail`, which is not supported yet at fixtures/reject/src/lib.rs:491:30 -`Waiting>` is not supported: its field `poll` is `Poll`, typed `rt.Poll`, whose `Pending` would be `rt.OuterPending` as `Poll>` at fixtures/reject/src/lib.rs:502:2 -a copy of a closure that changes what it captured at fixtures/reject/src/lib.rs:514:14 -a copy of a closure that changes what it captured at fixtures/reject/src/lib.rs:515:14 -an upcast from `dyn Keyed` to `dyn std::any::Any`, which is not supported yet at fixtures/reject/src/lib.rs:532:32 -`std::any::Any::type_id` of `dyn std::any::Any`, which is not supported yet at fixtures/reject/src/lib.rs:538:4 -unsupported call to `std::any::TypeId::of::` at fixtures/reject/src/lib.rs:538:17 -unsupported call to `::eq` at fixtures/reject/src/lib.rs:538:2 -a cast from a pointer to `u32` to one to `u8`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:555:27 -a pointer's address, which JS has no counterpart of at fixtures/reject/src/lib.rs:560:17 -unsupported call to `std::alloc::Layout::new::` at fixtures/reject/src/lib.rs:565:15 -unsupported call to `std::alloc::alloc` at fixtures/reject/src/lib.rs:567:11 -unsupported call to `std::alloc::dealloc` at fixtures/reject/src/lib.rs:570:3 -a raw pointer to `std::vec::Vec` behind a reference, which is the object and not where it is kept at fixtures/reject/src/lib.rs:577:10 -union `Bits`, whose fields overlap in `u32` and `f64`, which JS keeps apart at fixtures/reject/src/lib.rs:588:10 -comparing pointers to `u32`, each a place JS makes of its own at fixtures/reject/src/lib.rs:596:2 -comparing pointers to `u32`, each a place JS makes of its own at fixtures/reject/src/lib.rs:2145:2 -a raw pointer to `(u32, u32)` in `Span2`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:608:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:616:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:624:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:633:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:641:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:650:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:658:10 -a reference to `std::cell::UnsafeCell`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1655:18 -a raw pointer to `Target` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1669:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1682:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1697:10 -a reference to `Behind`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1751:22 -a reference to `Unboxed`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1766:16 -a reference to `Deep`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1787:18 -a reference to `Slotted`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1809:21 -a reference to `Shared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1828:20 -a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1845:20 -a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1858:26 -a reference to `Wrapped>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1934:21 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Replaced`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1957:20 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Swapped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1975:20 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Taken`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1993:20 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Assigned`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2012:20 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Deeper`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2038:22 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Dynamic`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2062:20 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Closed`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2078:15 -a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `[std::cell::UnsafeCell; 2]`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2091:20 -a reference to `Compared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1873:22 -a reference to `Enclosing`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1890:22 -a reference to `Chosen`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1906:17 -a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1919:19 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1001:26 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1014:22 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1024:12 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1033:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1043:17 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1048:10 -a raw pointer to `(u32, u32)` in `Window`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:669:2 -a raw pointer to `(u32, u32)` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:679:10 -a raw pointer to `(u32, u32)` in `std::cell::UnsafeCell<(u32, u32)>`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:687:15 -a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:696:15 -a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:709:15 -a raw pointer to `std::cell::UnsafeCell` in `Hits`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:720:21 -a raw pointer to a place of `()`, which has no address of its own at fixtures/reject/src/lib.rs:728:15 -a raw pointer to a place of `()`, which has no address of its own at fixtures/reject/src/lib.rs:728:29 -comparing pointers to `Fused`, which has no bytes and so no address of its own at fixtures/reject/src/lib.rs:728:70 -a dangling pointer to `Only`, a value of no bytes made of more than structs and tuples at fixtures/reject/src/lib.rs:737:11 -`Buf::copy_to_bytes` of `Blank`, a value JS copies, which is not supported at fixtures/reject/src/lib.rs:761:2 -unsupported call to ` as std::iter::Iterator>::is_sorted` at fixtures/reject/src/lib.rs:766:15 -comparing pointers to `u32` in an atomic, which JS has no address of at fixtures/reject/src/lib.rs:777:15 -a constant of type `&u32`, a pointer into memory translation can't name at fixtures/reject/src/lib.rs:778:3 -passing `{closure@fixtures/reject/src/lib.rs:784:11: 784:19}`, which drops, to `String::retain`, which is not supported yet at fixtures/reject/src/lib.rs:784:4 -a raw pointer to `(u32, u32)` in `Plain`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:826:10 -a raw pointer to `(u32, u32)` in `Track`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:852:19 -a raw pointer to `(u32, u32)` in `Lane`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:872:19 -a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:908:10 -a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:909:10 -a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:910:58 -a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:922:19 -a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:923:19 -`collect` of `std::collections::BTreeMap, Noisy>`, which sorts by `std::cell::Cell`'s own `Ord`, of entries that drop, which is not supported yet at fixtures/reject/src/lib.rs:955:22 -a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Looped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1110:26 -a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Aliased`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1120:29 -a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Rewritten`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1130:47 -a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Loaded`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1142:29 -a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Mapped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1187:39 -a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Repeated`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1221:18 -a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Onced`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1233:46 -`std::iter::once` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:1235:22 -a raw pointer to `(u16, u16)` in `Pushed`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1248:22 -`Extend` of `(std::vec::Vec, Tens)` by `(u8, u8)`, whose `Tens` of `u8` is not supported yet at fixtures/reject/src/lib.rs:1272:31 -unsupported call to `core::num::::is_ascii_octdigit` at fixtures/reject/src/lib.rs:1277:4 -a reference through which a raw pointer may be made into `InArray` in `[InArray; 2]`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1337:33 -a reference through which a raw pointer may be made into `InTuple` in `(u16, InTuple)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1346:33 -a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1355:34 -a reference through which a raw pointer may be made into `InPayload` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1364:11 -a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1376:33 -a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1389:35 -a reference through which a raw pointer may be made into `InWritten` in `[InWritten; 1]`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1398:35 -a raw pointer to `std::cell::UnsafeCell` in `ByRead`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1455:35 -a raw pointer to `std::cell::UnsafeCell` in `ByWrite`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1468:35 -a raw pointer to `std::cell::UnsafeCell` in `BySwap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1481:35 -a raw pointer to `std::cell::UnsafeCell` in `ByReplace`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1493:35 -a raw pointer to `std::cell::UnsafeCell` in `ByBox`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1504:35 -a raw pointer to `std::cell::UnsafeCell` in `ByClosure`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1519:35 -a raw pointer to `std::cell::UnsafeCell` in `ByObject`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1532:35 -a raw pointer to `std::cell::UnsafeCell` in `ByInstance`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1545:35 -a raw pointer to `std::cell::UnsafeCell` in `BySwapped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1554:76 -a raw pointer to `std::cell::UnsafeCell` in `ByExchanged`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1565:30 -a raw pointer to `ByRefReplace` in `(u16, ByRefReplace)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1597:32 -a raw pointer to `ByRefTake` in `(u16, ByRefTake)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1605:32 -a raw pointer to `ByKeySet` in `(u16, ByKeySet)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1613:51 -a raw pointer to `ByKeyReplace` in `(u16, ByKeyReplace)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1621:55 -a raw pointer to `ByKeyTake` in `(u16, ByKeyTake)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1628:52 -unsupported call to `core::str::::as_bytes_mut` at fixtures/reject/src/lib.rs:1636:13 -`core::str::::get_unchecked_mut` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:1637:13 -`std::str::from_utf8_mut` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:1642:20 -unsupported call to `std::ptr::copy::<[u8; 4]>` at fixtures/reject/src/lib.rs:1710:3 -unsupported call to `std::ptr::copy_nonoverlapping::<[u8; 4]>` at fixtures/reject/src/lib.rs:1711:3 -unsupported call to `std::ptr::addr_eq::<[u8; 4], [u8; 4]>` at fixtures/reject/src/lib.rs:1712:14 -comparing `*mut [u8; 4]` at fixtures/reject/src/lib.rs:1712:41 -a cast from a pointer to `[u8; 4]` to one to `u8`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:1713:17 -a cast from `*const [u8; 4]` to `*const u8`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:1713:33 -unsupported call to `std::ptr::mut_ptr::::add` at fixtures/reject/src/lib.rs:1713:56 -unsupported call to `std::ptr::const_ptr::::offset` at fixtures/reject/src/lib.rs:1713:73 -a coercion of `*const [u8; 4]` to `*const [u8]`, a pointer to a slice at fixtures/reject/src/lib.rs:1714:28 -hashing `*const [u8; 4]` by its address, which JS has no counterpart of at fixtures/reject/src/lib.rs:1716:5 -unsupported call to `std::ptr::const_ptr::::len` at fixtures/reject/src/lib.rs:1717:58 -a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1726:15 -a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1726:18 -a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1726:37 -a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1726:44 -a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1733:26 -a raw pointer to `[u8; 4]` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1733:26 -a raw pointer to `[u8; 4]` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1734:10 -const generic types are not supported: `Block` at fixtures/reject/src/lib.rs:2101:21 -`std::collections::LinkedList::::retain` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:2117:4 -`clone_from` of `std::collections::LinkedList`, whose items' `clone_from` is their own, which is not supported yet at fixtures/reject/src/lib.rs:2118:4 -`std::default::Default::default` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:2119:2 -a mapped guard of `{closure@fixtures/reject/src/lib.rs:2151:38: 2151:50}`, which JS can't write in place at fixtures/reject/src/lib.rs:2152:10 -a slice of one byte's place, which a byte slice can view only in an array of bytes at fixtures/reject/src/lib.rs:2158:2 -a slice or a cell of a mutable reference to `Reused` that names no place, which a whole write would replace only there at fixtures/reject/src/lib.rs:2164:2 -`Clone::clone_from` of `std::vec::Vec`, whose `clone_from` is its own, which is not supported yet at fixtures/reject/src/lib.rs:2169:4 -unsupported call to `std::mem::size_of_val::` at fixtures/reject/src/lib.rs:2174:2 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:2180:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:2188:10 -a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:2196:10 -a slice or a cell of a mutable reference to `std::cell::LazyCell` that names no place, which a whole write would replace only there at fixtures/reject/src/lib.rs:2206:3 -an assignment through a reference to `std::sync::LazyLock` at fixtures/reject/src/lib.rs:2211:2 -a slice or a cell of a mutable reference to `std::thread::LocalKey` that names no place, which a whole write would replace only there at fixtures/reject/src/lib.rs:2217:2 +passing `{closure@fixtures/reject/src/lib.rs:319:13: 319:27}`, which drops, to `str::contains`, which is not supported yet at fixtures/reject/src/lib.rs:319:4 +unsupported call to ` as std::iter::Iterator>::sum::` at fixtures/reject/src/lib.rs:427:17 +unsupported call to ` as std::iter::Iterator>::sum::` at fixtures/reject/src/lib.rs:427:38 +a mutable reference into a `Result`'s payload, passed on or kept at fixtures/reject/src/lib.rs:355:12 +unsupported call to ` as std::cmp::PartialEq>::eq` at fixtures/reject/src/lib.rs:362:2 +`Bytes::from_owner` of `std::sync::Arc<[u8]>`, which would drop with the last clone of what it makes, which is not supported at fixtures/reject/src/lib.rs:367:2 +`BytesMut::capacity`, which reads a capacity that depends on whether the other handles of its storage dropped, which is not supported at fixtures/reject/src/lib.rs:376:6 +`BufMut::put` of `Counted` into a `BytesMut`, which picks the methods it calls by a capacity that depends on whether the other handles of its storage dropped, which is not supported at fixtures/reject/src/lib.rs:382:2 +`BufMut::put` of `Counted` into a `BytesMut`, which advances it by the room left in a capacity that depends on whether the other handles of its storage dropped, which is not supported at fixtures/reject/src/lib.rs:387:2 +unsupported call to `core::str::::parse::` at fixtures/reject/src/lib.rs:432:4 +unsupported type `std::net::Ipv4Addr` from another crate at fixtures/reject/src/lib.rs:431:32 +unsupported type `std::net::AddrParseError` from another crate at fixtures/reject/src/lib.rs:431:32 +a coercion to `std::sync::Weak`, which is not supported yet at fixtures/reject/src/lib.rs:448:40 +`dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet at fixtures/reject/src/lib.rs:457:23 +`dyn Scaled`, a trait object of the generic trait `Scaled`, which is not supported yet at fixtures/reject/src/lib.rs:458:4 +a trait object of `[u8; 4]`, which is not supported yet at fixtures/reject/src/lib.rs:474:26 +a coercion to `&Tail`, which is not supported yet at fixtures/reject/src/lib.rs:484:30 +`Waiting>` is not supported: its field `poll` is `Poll`, typed `rt.Poll`, whose `Pending` would be `rt.OuterPending` as `Poll>` at fixtures/reject/src/lib.rs:495:2 +a copy of a closure that changes what it captured at fixtures/reject/src/lib.rs:507:14 +a copy of a closure that changes what it captured at fixtures/reject/src/lib.rs:508:14 +an upcast from `dyn Keyed` to `dyn std::any::Any`, which is not supported yet at fixtures/reject/src/lib.rs:525:32 +`std::any::Any::type_id` of `dyn std::any::Any`, which is not supported yet at fixtures/reject/src/lib.rs:531:4 +unsupported call to `std::any::TypeId::of::` at fixtures/reject/src/lib.rs:531:17 +unsupported call to `::eq` at fixtures/reject/src/lib.rs:531:2 +a cast from a pointer to `u32` to one to `u8`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:548:27 +a pointer's address, which JS has no counterpart of at fixtures/reject/src/lib.rs:553:17 +unsupported call to `std::alloc::Layout::new::` at fixtures/reject/src/lib.rs:558:15 +unsupported call to `std::alloc::alloc` at fixtures/reject/src/lib.rs:560:11 +unsupported call to `std::alloc::dealloc` at fixtures/reject/src/lib.rs:563:3 +a raw pointer to `std::vec::Vec` behind a reference, which is the object and not where it is kept at fixtures/reject/src/lib.rs:570:10 +union `Bits`, whose fields overlap in `u32` and `f64`, which JS keeps apart at fixtures/reject/src/lib.rs:581:10 +comparing pointers to `u32`, each a place JS makes of its own at fixtures/reject/src/lib.rs:589:2 +comparing pointers to `u32`, each a place JS makes of its own at fixtures/reject/src/lib.rs:2138:2 +a raw pointer to `(u32, u32)` in `Span2`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:601:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:609:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:617:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:626:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:634:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:643:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:651:10 +a reference to `std::cell::UnsafeCell`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1648:18 +a raw pointer to `Target` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1662:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1675:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1690:10 +a reference to `Behind`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1744:22 +a reference to `Unboxed`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1759:16 +a reference to `Deep`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1780:18 +a reference to `Slotted`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1802:21 +a reference to `Shared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1821:20 +a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1838:20 +a reference to `Inside`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1851:26 +a reference to `Wrapped>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1927:21 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Replaced`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1950:20 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Swapped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1968:20 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Taken`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1986:20 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Assigned`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2005:20 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Deeper`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2031:22 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Dynamic`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2055:20 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `Closed`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2071:15 +a reference through which a raw pointer may be made into `std::cell::UnsafeCell` in `[std::cell::UnsafeCell; 2]`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2084:20 +a reference to `Compared`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1866:22 +a reference to `Enclosing`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1883:22 +a reference to `Chosen`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1899:17 +a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1912:19 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:994:26 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1007:22 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1017:12 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1026:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1036:17 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1041:10 +a raw pointer to `(u32, u32)` in `Window`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:662:2 +a raw pointer to `(u32, u32)` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:672:10 +a raw pointer to `(u32, u32)` in `std::cell::UnsafeCell<(u32, u32)>`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:680:15 +a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:689:15 +a raw pointer to `std::cell::UnsafeCell` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:702:15 +a raw pointer to `std::cell::UnsafeCell` in `Hits`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:713:21 +a raw pointer to a place of `()`, which has no address of its own at fixtures/reject/src/lib.rs:721:15 +a raw pointer to a place of `()`, which has no address of its own at fixtures/reject/src/lib.rs:721:29 +comparing pointers to `Fused`, which has no bytes and so no address of its own at fixtures/reject/src/lib.rs:721:70 +a dangling pointer to `Only`, a value of no bytes made of more than structs and tuples at fixtures/reject/src/lib.rs:730:11 +`Buf::copy_to_bytes` of `Blank`, a value JS copies, which is not supported at fixtures/reject/src/lib.rs:754:2 +unsupported call to ` as std::iter::Iterator>::is_sorted` at fixtures/reject/src/lib.rs:759:15 +comparing pointers to `u32` in an atomic, which JS has no address of at fixtures/reject/src/lib.rs:770:15 +a constant of type `&u32`, a pointer into memory translation can't name at fixtures/reject/src/lib.rs:771:3 +passing `{closure@fixtures/reject/src/lib.rs:777:11: 777:19}`, which drops, to `String::retain`, which is not supported yet at fixtures/reject/src/lib.rs:777:4 +a raw pointer to `(u32, u32)` in `Plain`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:819:10 +a raw pointer to `(u32, u32)` in `Track`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:845:19 +a raw pointer to `(u32, u32)` in `Lane`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:865:19 +a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:901:10 +a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:902:10 +a raw pointer to `(u32, u32)` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:903:58 +a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:915:19 +a raw pointer to `std::mem::MaybeUninit<(u32, u32)>` in `Gap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:916:19 +`collect` of `std::collections::BTreeMap, Noisy>`, which sorts by `std::cell::Cell`'s own `Ord`, of entries that drop, which is not supported yet at fixtures/reject/src/lib.rs:948:22 +a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Looped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1103:26 +a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Aliased`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1113:29 +a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Rewritten`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1123:47 +a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Loaded`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1135:29 +a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Mapped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1180:39 +a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Repeated`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1214:18 +a raw pointer to `std::cell::UnsafeCell<(u16, u16)>` in `Onced`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1226:46 +`std::iter::once` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:1228:22 +a raw pointer to `(u16, u16)` in `Pushed`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1241:22 +`Extend` of `(std::vec::Vec, Tens)` by `(u8, u8)`, whose `Tens` of `u8` is not supported yet at fixtures/reject/src/lib.rs:1265:31 +unsupported call to `core::num::::is_ascii_octdigit` at fixtures/reject/src/lib.rs:1270:4 +a reference through which a raw pointer may be made into `InArray` in `[InArray; 2]`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1330:33 +a reference through which a raw pointer may be made into `InTuple` in `(u16, InTuple)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1339:33 +a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1348:34 +a reference through which a raw pointer may be made into `InPayload` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1357:11 +a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1369:33 +a reference through which a raw pointer may be made into `Mid` in `Outer`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1382:35 +a reference through which a raw pointer may be made into `InWritten` in `[InWritten; 1]`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1391:35 +a raw pointer to `std::cell::UnsafeCell` in `ByRead`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1448:35 +a raw pointer to `std::cell::UnsafeCell` in `ByWrite`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1461:35 +a raw pointer to `std::cell::UnsafeCell` in `BySwap`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1474:35 +a raw pointer to `std::cell::UnsafeCell` in `ByReplace`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1486:35 +a raw pointer to `std::cell::UnsafeCell` in `ByBox`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1497:35 +a raw pointer to `std::cell::UnsafeCell` in `ByClosure`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1512:35 +a raw pointer to `std::cell::UnsafeCell` in `ByObject`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1525:35 +a raw pointer to `std::cell::UnsafeCell` in `ByInstance`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1538:35 +a raw pointer to `std::cell::UnsafeCell` in `BySwapped`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1547:76 +a raw pointer to `std::cell::UnsafeCell` in `ByExchanged`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1558:30 +a raw pointer to `ByRefReplace` in `(u16, ByRefReplace)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1590:32 +a raw pointer to `ByRefTake` in `(u16, ByRefTake)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1598:32 +a raw pointer to `ByKeySet` in `(u16, ByKeySet)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1606:51 +a raw pointer to `ByKeyReplace` in `(u16, ByKeyReplace)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1614:55 +a raw pointer to `ByKeyTake` in `(u16, ByKeyTake)`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1621:52 +unsupported call to `core::str::::as_bytes_mut` at fixtures/reject/src/lib.rs:1629:13 +`core::str::::get_unchecked_mut` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:1630:13 +`std::str::from_utf8_mut` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:1635:20 +unsupported call to `std::ptr::copy::<[u8; 4]>` at fixtures/reject/src/lib.rs:1703:3 +unsupported call to `std::ptr::copy_nonoverlapping::<[u8; 4]>` at fixtures/reject/src/lib.rs:1704:3 +unsupported call to `std::ptr::addr_eq::<[u8; 4], [u8; 4]>` at fixtures/reject/src/lib.rs:1705:14 +comparing `*mut [u8; 4]` at fixtures/reject/src/lib.rs:1705:41 +a cast from a pointer to `[u8; 4]` to one to `u8`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:1706:17 +a cast from `*const [u8; 4]` to `*const u8`, which reads the bytes of one type as another at fixtures/reject/src/lib.rs:1706:33 +unsupported call to `std::ptr::mut_ptr::::add` at fixtures/reject/src/lib.rs:1706:56 +unsupported call to `std::ptr::const_ptr::::offset` at fixtures/reject/src/lib.rs:1706:73 +a coercion of `*const [u8; 4]` to `*const [u8]`, a pointer to a slice at fixtures/reject/src/lib.rs:1707:28 +hashing `*const [u8; 4]` by its address, which JS has no counterpart of at fixtures/reject/src/lib.rs:1709:5 +unsupported call to `std::ptr::const_ptr::::len` at fixtures/reject/src/lib.rs:1710:58 +a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1719:15 +a raw pointer to `[u8; 3]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1719:18 +a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1719:37 +a raw pointer to `[u8; 2]` in an element, a payload, or a union field, which is not supported yet at fixtures/reject/src/lib.rs:1719:44 +a reference to `[u8; 4]`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:1726:26 +a raw pointer to `[u8; 4]` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1726:26 +a raw pointer to `[u8; 4]` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:1727:10 +const generic types are not supported: `Block` at fixtures/reject/src/lib.rs:2094:21 +`std::collections::LinkedList::::retain` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:2110:4 +`clone_from` of `std::collections::LinkedList`, whose items' `clone_from` is their own, which is not supported yet at fixtures/reject/src/lib.rs:2111:4 +`std::default::Default::default` with a mutable reference to a value JS copies, which its mapping would copy at fixtures/reject/src/lib.rs:2112:2 +a mapped guard of `{closure@fixtures/reject/src/lib.rs:2144:38: 2144:50}`, which JS can't write in place at fixtures/reject/src/lib.rs:2145:10 +a slice of one byte's place, which a byte slice can view only in an array of bytes at fixtures/reject/src/lib.rs:2151:2 +a slice or a cell of a mutable reference to `Reused` that names no place, which a whole write would replace only there at fixtures/reject/src/lib.rs:2157:2 +`Clone::clone_from` of `std::vec::Vec`, whose `clone_from` is its own, which is not supported yet at fixtures/reject/src/lib.rs:2162:4 +unsupported call to `std::mem::size_of_val::` at fixtures/reject/src/lib.rs:2167:2 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:2173:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:2181:10 +a raw pointer to `(u32, u32)` in a variable assigned again while it may point there at fixtures/reject/src/lib.rs:2189:10 +a slice or a cell of a mutable reference to `std::cell::LazyCell` that names no place, which a whole write would replace only there at fixtures/reject/src/lib.rs:2199:3 +an assignment through a reference to `std::sync::LazyLock` at fixtures/reject/src/lib.rs:2204:2 +a slice or a cell of a mutable reference to `std::thread::LocalKey` that names no place, which a whole write would replace only there at fixtures/reject/src/lib.rs:2210:2 overriding `Iterator::fold`, which std's adaptors call in place of `next` or beside it at fixtures/reject/src/lib.rs:125:2 an iterator of the crate implementing `DoubleEndedIterator`, which is not supported yet at fixtures/reject/src/lib.rs:145:1 overriding `Iterator::size_hint`, which std's adaptors call in place of `next` or beside it at fixtures/reject/src/lib.rs:173:2 an iterator of the crate implementing `FusedIterator`, which is not supported yet at fixtures/reject/src/lib.rs:193:1 `Hasher::write`, which is not supported yet at fixtures/reject/src/lib.rs:261:9 -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:1072: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:1086: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:1176:31 -a raw pointer to `std::cell::UnsafeCell` in `InArray`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1302:9 -a raw pointer to `std::cell::UnsafeCell` in `InTuple`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1306:9 -a raw pointer to `std::cell::UnsafeCell` in `InNested`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1310:9 -a raw pointer to `std::cell::UnsafeCell` in `InPayload`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1314:9 -a raw pointer to `std::cell::UnsafeCell` in `InField`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1318:9 -a raw pointer to `std::cell::UnsafeCell` in `InGeneric`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1322:9 -a raw pointer to `std::cell::UnsafeCell` in `InWritten`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1326:9 -a reference to `std::option::Option>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:2108:13 -a raw pointer to `(u8, u8)` in `([Cloned; 2], (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2225:23 -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:2225: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:2281: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:2225:23 +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:1065: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:1079: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:1169:31 +a raw pointer to `std::cell::UnsafeCell` in `InArray`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1295:9 +a raw pointer to `std::cell::UnsafeCell` in `InTuple`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1299:9 +a raw pointer to `std::cell::UnsafeCell` in `InNested`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1303:9 +a raw pointer to `std::cell::UnsafeCell` in `InPayload`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1307:9 +a raw pointer to `std::cell::UnsafeCell` in `InField`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1311:9 +a raw pointer to `std::cell::UnsafeCell` in `InGeneric`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1315:9 +a raw pointer to `std::cell::UnsafeCell` in `InWritten`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:1319:9 +a reference to `std::option::Option>`, through which a raw pointer may be made, in a variable assigned again while that pointer may point there at fixtures/reject/src/lib.rs:2101:13 +a raw pointer to `(u8, u8)` in `([Cloned; 2], (u8, u8))`, which the crate may put another object in place of at fixtures/reject/src/lib.rs:2218:23 +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:2218: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:2274: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:2218:23 diff --git a/ts/fixtures/reject/src/lib.rs b/ts/fixtures/reject/src/lib.rs index db1816a5a..b532799db 100644 --- a/ts/fixtures/reject/src/lib.rs +++ b/ts/fixtures/reject/src/lib.rs @@ -312,13 +312,6 @@ pub fn batched(v: Vec) -> usize { set.len() } -/// A closure that owns a value that drops, which `or_insert_with` would call but never drop -/// if the key is there. -pub fn called_closure(m: &mut std::collections::HashMap) { - let b = Noisy(2); - m.entry(1).or_insert_with(move || b); -} - /// A closure that owns a value that drops, given as a `Pattern`, which `contains` would /// call but never drop. pub fn pattern_closure(s: &str) -> bool { diff --git a/ts/fixtures/reject/ts.toml b/ts/fixtures/reject/ts.toml index 2ad9c0641..f4b4b4386 100644 --- a/ts/fixtures/reject/ts.toml +++ b/ts/fixtures/reject/ts.toml @@ -41,7 +41,6 @@ roots = [ "cow_made", "lopsided", "batched", - "called_closure", "pattern_closure", "parts_summed", "ok_passed", diff --git a/ts/fixtures/stock/expected/maps.Counted.ts b/ts/fixtures/stock/expected/maps.Counted.ts new file mode 100644 index 000000000..ba51130f9 --- /dev/null +++ b/ts/fixtures/stock/expected/maps.Counted.ts @@ -0,0 +1,25 @@ +// Generated by rust2-ts. Do not edit. + +import * as rt from "./rt.ts"; + +/** + * Counts its drop in the cell it borrows, so a closure that owns one shows whether it + * dropped before it was called, and that it dropped at all. + */ +export class Counted { + _0: rt.Cell; + + constructor(_0: rt.Cell) { + this._0 = _0; + } + + [Symbol.dispose](): void { + drop$ops_Drop(this); + } +} + +export function drop$ops_Drop(self: Counted): void { + rt.cellSet(self._0, rt.u32Add(self._0.v, 1)); +} + +//# sourceMappingURL=maps.Counted.ts.map diff --git a/ts/fixtures/stock/expected/maps.ts b/ts/fixtures/stock/expected/maps.ts index ecaf2902d..e029354d6 100644 --- a/ts/fixtures/stock/expected/maps.ts +++ b/ts/fixtures/stock/expected/maps.ts @@ -4,6 +4,7 @@ import * as rt from "./rt.ts"; import { copy$tuple2_u16_u32, drop$hashlink_LinkedHashMap_u16_u32_hash_RandomState as lib_drop$hashlink_LinkedHashMap_u16_u32_hash_RandomState } from "./lib.ts"; import { unwrapOr$0r2bmpr as option_unwrapOr$0r2bmpr, mapOr$1787w44 as option_mapOr$1787w44, mapOr$0iaogpf as option_mapOr$0iaogpf, mapOr$1vcgixw as option_mapOr$1vcgixw } from "./core/option.ts"; import * as LinkedHashMap from "./hashlink/linked_hash_map.LinkedHashMap.ts"; +import * as Counted from "./maps.Counted.ts"; /** A length, capacity, or value, as four bytes. */ export function put(out: rt.ByteVec, n: rt.usize): void { @@ -137,8 +138,8 @@ export function table(dataData: Uint8Array, dataStart: number, dataLen: number, if (dataLen !== 0) { const kind: rt.u8 = dataData[dataStart]; let t: rt.HashTable<[rt.u16, rt.u32]> = rt.hashNew() as rt.HashTable<[rt.u16, rt.u32]>; - const rehash: (a0: [rt.u16, rt.u32]) => rt.u64 = (e7: [rt.u16, rt.u32]): rt.u64 => { - return hash(kind, e7[0]); + const rehash: (a0: [rt.u16, rt.u32]) => rt.u64 = (e8: [rt.u16, rt.u32]): rt.u64 => { + return hash(kind, e8[0]); }; const n: rt.HashTable = rt.hashWithCapacity(rt.u8Rem(kind, 8) as rt.usize, 234881024) as rt.HashTable; const iter: rt.Iter = rt.byteSliceChunks(new rt.ByteSlice(dataData, dataStart + 1, dataLen - 1), 2); @@ -156,8 +157,8 @@ export function table(dataData: Uint8Array, dataStart: number, dataLen: number, numbers(n, kind, op, key, out); const _38: rt.u8 = rt.u8Rem(op, 9); if (_38 === 0 || _38 === 1) { - const _40: rt.Result, rt.TableEntry<[rt.u16, rt.u32]>> = rt.tableFindEntry(t, h, (e18: [rt.u16, rt.u32]): boolean => { - return e18[0] === key; + const _40: rt.Result, rt.TableEntry<[rt.u16, rt.u32]>> = rt.tableFindEntry(t, h, (e20: [rt.u16, rt.u32]): boolean => { + return e20[0] === key; }); if (_40.ok) { const e: rt.TableEntry<[rt.u16, rt.u32]> = _40.value; @@ -169,8 +170,8 @@ export function table(dataData: Uint8Array, dataStart: number, dataLen: number, put(out, rt.tableInsertUnique(_40.error.t, h, [key, op as rt.u32] as [rt.u16, rt.u32], rehash).v[1] as rt.usize); } } else if (_38 === 2) { - const _65: rt.Result, rt.TableEntry<[rt.u16, rt.u32]>> = rt.tableFindEntry(t, h, (e17: [rt.u16, rt.u32]): boolean => { - return e17[0] === key; + const _65: rt.Result, rt.TableEntry<[rt.u16, rt.u32]>> = rt.tableFindEntry(t, h, (e19: [rt.u16, rt.u32]): boolean => { + return e19[0] === key; }); if (_65.ok) { const _74: [[rt.u16, rt.u32], rt.TableEntry<[rt.u16, rt.u32]>] = rt.tableRemove(_65.value); @@ -183,21 +184,21 @@ export function table(dataData: Uint8Array, dataStart: number, dataLen: number, put(out, 256); } } else if (_38 === 3) { - put(out, option_mapOr$0iaogpf(rt.tableFind(t, h, (e15: [rt.u16, rt.u32]): boolean => { - return e15[0] === key; - }), 256, (e16: [rt.u16, rt.u32]): rt.usize => { - return e16[1] as rt.usize; + put(out, option_mapOr$0iaogpf(rt.tableFind(t, h, (e17: [rt.u16, rt.u32]): boolean => { + return e17[0] === key; + }), 256, (e18: [rt.u16, rt.u32]): rt.usize => { + return e18[1] as rt.usize; })); } else if (_38 === 4) { - const _89: [rt.u16, rt.u32] | undefined = rt.tableFind(t, h, (e14: [rt.u16, rt.u32]): boolean => { - return e14[0] === key; + const _89: [rt.u16, rt.u32] | undefined = rt.tableFind(t, h, (e16: [rt.u16, rt.u32]): boolean => { + return e16[0] === key; }); if (_89 !== undefined) { _89[1] = rt.u32Mul(_89[1], 2); } } else if (_38 === 5) { - const _96: rt.TableEntry<[rt.u16, rt.u32]> = rt.tableEntry(t, h, (e13: [rt.u16, rt.u32]): boolean => { - return e13[0] === key; + const _96: rt.TableEntry<[rt.u16, rt.u32]> = rt.tableEntry(t, h, (e15: [rt.u16, rt.u32]): boolean => { + return e15[0] === key; }, rehash); if (rt.tableOccupied(_96)) { put(out, _96.v[1] as rt.usize); @@ -205,31 +206,46 @@ export function table(dataData: Uint8Array, dataStart: number, dataLen: number, put(out, rt.tableEntryInsert(_96, [key, 1] as [rt.u16, rt.u32]).v[1] as rt.usize); } } else if (_38 === 6) { - put(out, rt.tableOrInsert(rt.tableEntry(t, h, (e12: [rt.u16, rt.u32]): boolean => { - return e12[0] === key; - }, rehash), [key, 3] as [rt.u16, rt.u32]).v[1] as rt.usize); + if (!((arg & 16) === 0)) { + const drops: rt.Cell = new rt.Cell(0); + const captured = new Counted.Counted(drops); + const captured2 = key; + const made: () => [rt.u16, rt.u32] = rt.closure((): [rt.u16, rt.u32] => { + return [captured2, rt.u32Add(3, captured._0.v)] as [rt.u16, rt.u32]; + }, (): void => { + captured[Symbol.dispose](); + }); + put(out, rt.tableOrInsertWith(rt.tableEntry(t, h, (e14: [rt.u16, rt.u32]): boolean => { + return e14[0] === key; + }, rehash), rt.once(made), rt.drop).v[1] as rt.usize); + put(out, drops.v as rt.usize); + } else { + put(out, rt.tableOrInsert(rt.tableEntry(t, h, (e13: [rt.u16, rt.u32]): boolean => { + return e13[0] === key; + }, rehash), [key, 3] as [rt.u16, rt.u32]).v[1] as rt.usize); + } } else if (_38 === 7) { - rt.tableRetain(t, (e11: [rt.u16, rt.u32]): boolean => { - e11[1] = rt.u32Add(e11[1], 1); - return rt.u16Rem(e11[0], 3) !== rt.u8Rem(arg, 3) as rt.u16; + rt.tableRetain(t, (e12: [rt.u16, rt.u32]): boolean => { + e12[1] = rt.u32Add(e12[1], 1); + return rt.u16Rem(e12[0], 3) !== rt.u8Rem(arg, 3) as rt.u16; }); } else { - put(out, rt.iterSum(rt.iterMap(rt.hashValues(t), (e8: [rt.u16, rt.u32]): rt.u32 => { - return rt.u32Add(e8[0] as rt.u32, e8[1]); + put(out, rt.iterSum(rt.iterMap(rt.hashValues(t), (e9: [rt.u16, rt.u32]): rt.u32 => { + return rt.u32Add(e9[0] as rt.u32, e9[1]); }), rt.u32Add, 0) as rt.usize); const copy: rt.HashTable<[rt.u16, rt.u32]> = rt.hashClone(t, undefined, copy$tuple2_u16_u32); const drained: [rt.u16, rt.u32][] = rt.iterToArray(rt.tableDrain(t), "next", 8); rt.sliceSort(drained, rt.cmpLt(rt.cmpTuple<[rt.u16, rt.u32], rt.Ordering | undefined>([rt.cmp, rt.cmp]))); - for (const _142 of drained) { - const k2: rt.u16 = _142[0]; - const v2: rt.u32 = _142[1]; + for (const _162 of drained) { + const k2: rt.u16 = _162[0]; + const v2: rt.u32 = _162[1]; put(out, k2 as rt.usize); put(out, v2 as rt.usize); } - put(out, option_mapOr$0iaogpf(rt.tableFind(copy, h, (e9: [rt.u16, rt.u32]): boolean => { - return e9[0] === key; - }), 256, (e10: [rt.u16, rt.u32]): rt.usize => { - return e10[1] as rt.usize; + put(out, option_mapOr$0iaogpf(rt.tableFind(copy, h, (e10: [rt.u16, rt.u32]): boolean => { + return e10[0] === key; + }), 256, (e11: [rt.u16, rt.u32]): rt.usize => { + return e11[1] as rt.usize; })); put(out, rt.hashLen(copy)); if ((arg & 1) === 1) { @@ -241,9 +257,9 @@ export function table(dataData: Uint8Array, dataStart: number, dataLen: number, } const left: [rt.u16, rt.u32][] = rt.iterToArray(rt.hashValues(t), "next", 8); rt.sliceSort(left, rt.cmpLt(rt.cmpTuple<[rt.u16, rt.u32], rt.Ordering | undefined>([rt.cmp, rt.cmp]))); - for (const _179 of left) { - const k3: rt.u16 = _179[0]; - const v3: rt.u32 = _179[1]; + for (const _199 of left) { + const k3: rt.u16 = _199[0]; + const v3: rt.u32 = _199[1]; put(out, k3 as rt.usize); put(out, v3 as rt.usize); } @@ -265,22 +281,31 @@ export function numbers(n: rt.HashTable, kind: rt.u8, op: rt.u8, key: rt b0: { const _12: rt.u8 = rt.u8Rem(op, 6); if (_12 === 0) { - put(out, rt.tableOrInsert(rt.tableAndModifyMut(rt.tableEntry(n, h, ours, rehash), (e8: rt.Place): undefined => { - e8.v = rt.u32Add(e8.v, 1); - }), (((key as rt.u32)) << 16) >>> 0).v as rt.usize); + const drops: rt.Cell = new rt.Cell(0); + const held: Counted.Counted = new Counted.Counted(drops); + const _18: rt.TableEntry = rt.tableEntry(n, h, ours, rehash); + const captured = held; + const e: rt.TableEntry = rt.tableAndModifyMut(_18, rt.closure((e8: rt.Place): undefined => { + e8.v = rt.u32Add(e8.v, rt.u32Add(1, captured._0.v)); + captured[Symbol.dispose](); + }, (): void => { + captured[Symbol.dispose](); + }), rt.drop); + put(out, drops.v as rt.usize); + put(out, rt.tableOrInsert(e, (((key as rt.u32)) << 16) >>> 0).v as rt.usize); } else if (_12 === 1) { - const _26: rt.Place | undefined = rt.tableFindMut(n, h, ours); - if (_26 === undefined) { + const _34: rt.Place | undefined = rt.tableFindMut(n, h, ours); + if (_34 === undefined) { put(out, rt.tableInsertUnique(n, h, (((key as rt.u32)) << 16) >>> 0, rehash).v as rt.usize); } else { - _26.v = rt.u32Add(_26.v, 2); + _34.v = rt.u32Add(_34.v, 2); } } else if (_12 === 2) { - const _38: rt.Result, rt.TableEntry> = rt.tableFindEntry(n, h, ours); - if (_38.ok) { - const e2: rt.TableEntry = _38.value; - const _41: rt.Place = e2; - _41.v = rt.u32Add(_41.v, 3); + const _46: rt.Result, rt.TableEntry> = rt.tableFindEntry(n, h, ours); + if (_46.ok) { + const e2: rt.TableEntry = _46.value; + const _49: rt.Place = e2; + _49.v = rt.u32Add(_49.v, 3); const e3: rt.Place = e2; e3.v = rt.u32Add(e3.v, 4); } @@ -293,32 +318,32 @@ export function numbers(n: rt.HashTable, kind: rt.u8, op: rt.u8, key: rt if (_12 === 4) { const iter: rt.Iter> = rt.hashValuesMut(n); while (true) { - const _50: rt.Place | rt.Done = iter.next(); - if (_50 === rt.DONE) { + const _58: rt.Place | rt.Done = iter.next(); + if (_58 === rt.DONE) { break; } - _50.v = (_50.v ^ 1) >>> 0; + _58.v = (_58.v ^ 1) >>> 0; } const iter2: rt.Iter> = rt.hashValuesMut(n); while (true) { - const _56: rt.Place | rt.Done = iter2.next(); - if (_56 === rt.DONE) { + const _64: rt.Place | rt.Done = iter2.next(); + if (_64 === rt.DONE) { break b0; } - _56.v = rt.u32Add(_56.v, 1); + _64.v = rt.u32Add(_64.v, 1); } } - const _61: rt.TableEntry = rt.tableEntry(n, h, ours, rehash); - if (rt.tableOccupied(_61)) { - const _64: rt.Place = _61; - _64.v = rt.u32Add(_64.v, 6); + const _69: rt.TableEntry = rt.tableEntry(n, h, ours, rehash); + if (rt.tableOccupied(_69)) { + const _72: rt.Place = _69; + _72.v = rt.u32Add(_72.v, 6); } } } const items: rt.u32[] = rt.iterToArray(rt.hashValues(n), "next", 4); rt.sliceSort(items, rt.lt); - for (const _77 of items) { - put(out, _77 as rt.usize); + for (const _85 of items) { + put(out, _85 as rt.usize); } } diff --git a/ts/fixtures/stock/src/maps.rs b/ts/fixtures/stock/src/maps.rs index 4a16a2914..34ac0f942 100644 --- a/ts/fixtures/stock/src/maps.rs +++ b/ts/fixtures/stock/src/maps.rs @@ -3,6 +3,7 @@ //! iteration order is unspecified, so only what does not depend on it is written, but a //! linked map's order is its own, and written as it is. +use std::cell::Cell; use std::collections::hash_map::RandomState; use std::hash::BuildHasher; @@ -10,6 +11,16 @@ use hashbrown::hash_table::{Entry, HashTable}; use hashbrown::{HashMap, HashSet}; use hashlink::LinkedHashMap; +/// Counts its drop in the cell it borrows, so a closure that owns one shows whether it +/// dropped before it was called, and that it dropped at all. +struct Counted<'a>(&'a Cell); + +impl Drop for Counted<'_> { + fn drop(&mut self) { + self.0.set(self.0.get() + 1); + } +} + /// A length, capacity, or value, as four bytes. fn put(out: &mut Vec, n: usize) { out.extend_from_slice(&(n as u32).to_le_bytes()); @@ -138,10 +149,22 @@ pub fn table(data: &[u8], out: &mut Vec) { Entry::Occupied(e) => put(out, e.into_mut().1 as usize), Entry::Vacant(e) => put(out, e.insert((key, 1)).into_mut().1 as usize), }, - 6 => { + 6 if arg & 16 == 0 => { let e = t.entry(h, |e| e.0 == key, rehash).or_insert((key, 3)); put(out, e.get().1 as usize); } + // By a closure that owns what drops, called if vacant and else dropped uncalled. + 6 => { + let drops = Cell::new(0); + let held = Counted(&drops); + let made = move || { + let held = &held; + (key, 3 + held.0.get()) + }; + let e = t.entry(h, |e| e.0 == key, rehash).or_insert_with(made); + put(out, e.get().1 as usize); + put(out, drops.get() as usize); + } 7 => t.retain(|e| { e.1 += 1; e.0 % 3 != u16::from(arg % 3) @@ -183,7 +206,13 @@ fn numbers(n: &mut HashTable, kind: u8, op: u8, key: u16, out: &mut Vec let rehash = |e: &u32| hash(kind, (*e >> 16) as u16); match op % 6 { 0 => { - let e = n.entry(h, ours, rehash).and_modify(|e| *e += 1); + let drops = Cell::new(0); + let held = Counted(&drops); + let e = n.entry(h, ours, rehash).and_modify(move |e| { + let held = &held; + *e += 1 + held.0.get(); + }); + put(out, drops.get() as usize); put(out, *e.or_insert(u32::from(key) << 16).get() as usize); } 1 => match n.find_mut(h, ours) { diff --git a/ts/fixtures/task/expected/drops.ts b/ts/fixtures/task/expected/drops.ts index 3b9b5e76b..767bedf38 100644 --- a/ts/fixtures/task/expected/drops.ts +++ b/ts/fixtures/task/expected/drops.ts @@ -12,6 +12,7 @@ import { looped, collected, drained, extended, compared as iters_compared } from import { run as lists_run } from "./drops/lists.ts"; import { boxed as objects_boxed, shared, anys, fns } from "./drops/objects.ts"; import { run as once_run } from "./drops/once.ts"; +import { released as released_released } from "./drops/released.ts"; import * as Held from "./drops.Held.ts"; import * as Key from "./drops.Key.ts"; import * as Named from "./drops.Named.ts"; @@ -1289,6 +1290,14 @@ export function inside(log: Log.Log, id: rt.u32, arg: rt.u8): void { inside_inside(log, id, arg); } +/** + * Run scenario `arg % 7` of where std drops a closure given to a consumer or an entry. + * The last panics in a fold. + */ +export function released(log: Log.Log, id: rt.u32, arg: rt.u8): void { + released_released(log, id, arg); +} + /** Run scenario `arg % 9` of what std's comparisons of iterators drop. */ export function compared(log: Log.Log, id: rt.u32, arg: rt.u8): void { iters_compared(log, id, arg); diff --git a/ts/fixtures/task/expected/drops/closures.ts b/ts/fixtures/task/expected/drops/closures.ts index e0e53ec42..9c92c1ca9 100644 --- a/ts/fixtures/task/expected/drops/closures.ts +++ b/ts/fixtures/task/expected/drops/closures.ts @@ -647,12 +647,11 @@ export function iterated(log: Log.Log, id: rt.u32): void { return guard(rt.u32Add(36, _225)); }); const captured21 = r; - const _441: (a0: Guard.Guard) => rt.u32 = rt.closure((g17: Guard.Guard): rt.u32 => { + const part9 = option_map$1raha9y(rt.iterMaxByKey(_435, rt.closure((g17: Guard.Guard): rt.u32 => { return rt.u32Add(rt.u32Rem(Guard.id(g17), 2), Guard.id(captured21)); }, (): void => { captured21[Symbol.dispose](); - }); - const part9 = option_map$1raha9y(rt.dropAfter(_441, () => rt.iterMaxByKey(_435, _441, rt.lt, undefined, rt.drop)), (g18: Guard.Guard): rt.u32 => { + }), rt.lt, undefined, rt.drop, true), (g18: Guard.Guard): rt.u32 => { const _028: rt.u32 = Guard.id(g18); g18[Symbol.dispose](); return _028; diff --git a/ts/fixtures/task/expected/drops/folds.ts b/ts/fixtures/task/expected/drops/folds.ts index 143c50552..a6c371e2b 100644 --- a/ts/fixtures/task/expected/drops/folds.ts +++ b/ts/fixtures/task/expected/drops/folds.ts @@ -1409,12 +1409,11 @@ export function reducers(log: Log.Log, id: rt.u32): void { const e: Guard.Guard = _69[1]; const _77: rt.Iter = rt.iterSlice(held); const captured3 = e; - const _80: (a0: Guard.Guard, a1: Guard.Guard) => rt.Ordering = rt.closure((a5: Guard.Guard, b5: Guard.Guard): rt.Ordering => { + const part = option_map$0lq7mno(rt.iterMinBy(_77, rt.closure((a5: Guard.Guard, b5: Guard.Guard): rt.Ordering => { return rt.cmp(rt.u32Add(Guard.id(a5), Guard.id(captured3)), rt.u32Add(Guard.id(b5), Guard.id(captured3))); }, (): void => { captured3[Symbol.dispose](); - }); - const part = option_map$0lq7mno(rt.dropAfter(_80, () => rt.iterMinBy(_77, _80)), Guard.id); + }), undefined, undefined, true), Guard.id); const args4: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part, f, rt.u32Debug)]; Log.note(log, rt.fmtFormat(["first ", args4[0]])); rt.dropAll(held); diff --git a/ts/fixtures/task/expected/drops/released.ts b/ts/fixtures/task/expected/drops/released.ts new file mode 100644 index 000000000..37592c8d2 --- /dev/null +++ b/ts/fixtures/task/expected/drops/released.ts @@ -0,0 +1,451 @@ +// Generated by rust2-ts. Do not edit. + +import * as rt from "../rt.ts"; +import { map$1raha9y as option_map$1raha9y } from "../core/option.ts"; +import * as Log from "../log.Log.ts"; +import * as Guard from "../model.Guard.ts"; + +/** The guards of `ids`, in order. */ +export function guards(log: Log.Log, id: rt.u32, ids: rt.Range): Guard.Guard[] { + return rt.iterToArray(rt.iterMap(ids, (n: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(id, n), Log.clone$Clone(log)); + }), undefined, 8, true); +} + +/** + * Run scenario `arg % 7`. The last panics in a fold, which aborts before anything else + * drops. + */ +export function released(log: Log.Log, id: rt.u32, arg: rt.u8): void { + let f!: Guard.Guard; + let _430!: rt.u32; + let _564!: rt.u32; + const guard: (a0: rt.u32) => Guard.Guard = (n: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(id, n), Log.clone$Clone(log)); + }; + const _6: rt.u8 = rt.u8Rem(arg, 7); + if (_6 === 0) { + const a: Guard.Guard = guard(10); + const _12: rt.Iter = rt.iterTake(rt.iterSlice(guards(log, id, new rt.Range(1, 5)), rt.drop), 3, rt.drop); + const captured26 = a; + const part28 = option_map$1raha9y(rt.iterReduce(_12, rt.closure((x4: Guard.Guard, y4: Guard.Guard): Guard.Guard => { + let _029!: Guard.Guard; + let _262: boolean = false; + let _252: boolean = false; + _262 = true; + _252 = true; + const part27 = Guard.id(captured26); + const args64: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part27, f)]; + const _626: string = rt.fmtFormat(["reduce ", args64[0]]); + Guard.note(y4, _626); + if (!(Guard.id(x4) < Guard.id(y4))) { + _262 = false; + _029 = x4; + } else { + _252 = false; + _029 = y4; + } + if (_252) { + y4[Symbol.dispose](); + } + if (_262) { + x4[Symbol.dispose](); + return _029; + } + return _029; + }, (): void => { + captured26[Symbol.dispose](); + }), true, true), (g18: Guard.Guard): rt.u32 => { + const _030: rt.u32 = Guard.id(g18); + g18[Symbol.dispose](); + return _030; + }); + const args2: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part28, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["reduced ", args2[0]])); + const b: Guard.Guard = guard(11); + const _32: rt.Iter = rt.iterTake(rt.iterSlice(guards(log, id, new rt.Range(5, 7)), rt.drop), 0, rt.drop); + const captured27 = b; + const none: Guard.Guard | undefined = rt.iterReduce(_32, rt.closure((x5: Guard.Guard, _339: Guard.Guard): Guard.Guard => { + Guard.note(captured27, "never"); + _339[Symbol.dispose](); + return x5; + }, (): void => { + captured27[Symbol.dispose](); + }), true, true); + const part29 = none === undefined; + const args4: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtBool(part29, f)]; + Log.note(log, rt.fmtFormat(["none ", args4[0]])); + const c: Guard.Guard = guard(12); + const _53: rt.Iter = rt.iterMap(new rt.Range(13, 16), guard); + const captured28 = c; + const part30 = option_map$1raha9y(rt.iterReduce(_53, rt.closure((x6: Guard.Guard, y5: Guard.Guard): Guard.Guard => { + let _032!: Guard.Guard; + let _1211: boolean = false; + let _1116: boolean = false; + _1211 = true; + _1116 = true; + if (!(Guard.id(y5) === rt.u32Add(Guard.id(captured28), 2))) { + _1211 = false; + _032 = x6; + } else { + _1116 = false; + _032 = y5; + } + if (_1116) { + y5[Symbol.dispose](); + } + if (_1211) { + x6[Symbol.dispose](); + return _032; + } + return _032; + }, (): void => { + captured28[Symbol.dispose](); + }), undefined, true), (g19: Guard.Guard): rt.u32 => { + const _033: rt.u32 = Guard.id(g19); + g19[Symbol.dispose](); + return _033; + }); + const args6: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part30, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["made ", args6[0]])); + const captured29 = guard(16); + const first: (a0: Guard.Guard, a1: Guard.Guard) => Guard.Guard = rt.closure((x7: Guard.Guard, _340: Guard.Guard): Guard.Guard => { + Guard.note(captured29, "first"); + _340[Symbol.dispose](); + return x7; + }, (): void => { + captured29[Symbol.dispose](); + }); + const part31 = option_map$1raha9y(rt.iterReduce(rt.iterSlice(guards(log, id, new rt.Range(17, 20)), rt.drop), first, true), (g20: Guard.Guard): rt.u32 => { + const _035: rt.u32 = Guard.id(g20); + g20[Symbol.dispose](); + return _035; + }); + const args8: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part31, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["lent ", args8[0]])); + rt.drop(first); + rt.drop(none); + } else if (_6 === 1) { + const a2: Guard.Guard = guard(10); + const _93: rt.Iter = rt.iterTake(rt.iterSlice(guards(log, id, new rt.Range(1, 5)), rt.drop), 3, rt.drop); + const captured23 = a2; + const part24 = option_map$1raha9y(rt.iterMaxBy(_93, rt.closure((x: Guard.Guard, y: Guard.Guard): rt.Ordering => { + return rt.cmp(rt.u32Add(rt.u32Div(Guard.id(x), 2), Guard.id(captured23)), rt.u32Add(rt.u32Div(Guard.id(y), 2), Guard.id(captured23))); + }, (): void => { + captured23[Symbol.dispose](); + }), true, rt.drop, true), (g16: Guard.Guard): rt.u32 => { + const _025: rt.u32 = Guard.id(g16); + g16[Symbol.dispose](); + return _025; + }); + const args10: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part24, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["max ", args10[0]])); + const b2: Guard.Guard = guard(11); + const _113: rt.Iter = rt.iterSlice(guards(log, id, new rt.Range(5, 8)), rt.drop); + const captured24 = b2; + const part25 = option_map$1raha9y(rt.iterMinBy(_113, rt.closure((x2: Guard.Guard, y2: Guard.Guard): rt.Ordering => { + return rt.cmp(rt.u32Add(rt.u32Div(Guard.id(x2), 2), Guard.id(captured24)), rt.u32Add(rt.u32Div(Guard.id(y2), 2), Guard.id(captured24))); + }, (): void => { + captured24[Symbol.dispose](); + }), true, rt.drop, true), (g17: Guard.Guard): rt.u32 => { + const _027: rt.u32 = Guard.id(g17); + g17[Symbol.dispose](); + return _027; + }); + const args12: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part25, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["min ", args12[0]])); + const c2: Guard.Guard = guard(12); + const _132: rt.Iter = rt.iterTake(rt.iterSlice(guards(log, id, new rt.Range(13, 15)), rt.drop), 0, rt.drop); + const captured25 = c2; + const none2: Guard.Guard | undefined = rt.iterMaxBy(_132, rt.closure((x3: Guard.Guard, y3: Guard.Guard): rt.Ordering => { + return rt.cmp(Guard.id(x3), rt.u32Add(Guard.id(y3), Guard.id(captured25))); + }, (): void => { + captured25[Symbol.dispose](); + }), true, rt.drop, true); + const part26 = none2 === undefined; + const args14: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtBool(part26, f)]; + Log.note(log, rt.fmtFormat(["none ", args14[0]])); + rt.drop(none2); + } else if (_6 === 2) { + const a3: Guard.Guard = guard(10); + const _153: rt.Iter = rt.iterTake(rt.iterSlice(guards(log, id, new rt.Range(1, 5)), rt.drop), 3, rt.drop); + const captured19 = a3; + const part20 = option_map$1raha9y(rt.iterMaxByKey(_153, rt.closure((g9: Guard.Guard): rt.u32 => { + return rt.u32Add(rt.u32Div(Guard.id(g9), 2), Guard.id(captured19)); + }, (): void => { + captured19[Symbol.dispose](); + }), rt.lt, true, rt.drop, true), (g10: Guard.Guard): rt.u32 => { + const _018: rt.u32 = Guard.id(g10); + g10[Symbol.dispose](); + return _018; + }); + const args16: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part20, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["max ", args16[0]])); + const b3: Guard.Guard = guard(11); + const _173: rt.Iter = rt.iterSlice(guards(log, id, new rt.Range(5, 8)), rt.drop); + const captured20 = b3; + const part21 = option_map$1raha9y(rt.iterMinByKey(_173, rt.closure((g11: Guard.Guard): rt.u32 => { + return rt.u32Add(rt.u32Div(Guard.id(g11), 2), Guard.id(captured20)); + }, (): void => { + captured20[Symbol.dispose](); + }), rt.lt, true, rt.drop, true), (g12: Guard.Guard): rt.u32 => { + const _020: rt.u32 = Guard.id(g12); + g12[Symbol.dispose](); + return _020; + }); + const args18: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part21, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["min ", args18[0]])); + const c3: Guard.Guard = guard(12); + const _192: rt.Iter = rt.iterTake(rt.iterSlice(guards(log, id, new rt.Range(13, 15)), rt.drop), 0, rt.drop); + const captured21 = c3; + const none3: Guard.Guard | undefined = rt.iterMinByKey(_192, rt.closure((g13: Guard.Guard): rt.u32 => { + return rt.u32Add(Guard.id(g13), Guard.id(captured21)); + }, (): void => { + captured21[Symbol.dispose](); + }), rt.lt, true, rt.drop, true); + const part22 = none3 === undefined; + const args20: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtBool(part22, f)]; + Log.note(log, rt.fmtFormat(["none ", args20[0]])); + const captured22 = guard(15); + const key: (a0: Guard.Guard) => rt.u32 = rt.closure((g14: Guard.Guard): rt.u32 => { + return rt.u32Add(Guard.id(g14), Guard.id(captured22)); + }, (): void => { + captured22[Symbol.dispose](); + }); + const part23 = option_map$1raha9y(rt.iterMaxByKey(rt.iterSlice(guards(log, id, new rt.Range(16, 18)), rt.drop), key, rt.lt, true, rt.drop), (g15: Guard.Guard): rt.u32 => { + const _023: rt.u32 = Guard.id(g15); + g15[Symbol.dispose](); + return _023; + }); + const args22: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtOption(part23, f, rt.u32Debug)]; + Log.note(log, rt.fmtFormat(["lent ", args22[0]])); + rt.drop(key); + rt.drop(none3); + } else if (_6 === 3) { + const a4: Guard.Guard = guard(10); + const _235: rt.Iter = rt.iterSlice(guards(log, id, new rt.Range(1, 4)), rt.drop); + const captured15 = a4; + const part16 = rt.iterIsSortedBy(rt.iterMap(_235, rt.closure((g6: Guard.Guard): rt.u32 => { + const part15 = Guard.id(captured15); + const args62: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part15, f)]; + const _517: string = rt.fmtFormat(["key ", args62[0]]); + Guard.note(g6, _517); + const _013: rt.u32 = Guard.id(g6); + g6[Symbol.dispose](); + return _013; + }, (): void => { + captured15[Symbol.dispose](); + })), rt.le, true); + const args24: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtBool(part16, f)]; + Log.note(log, rt.fmtFormat(["sorted ", args24[0]])); + const b4: Guard.Guard = guard(11); + const _253: rt.Iter = rt.iterSlice(guards(log, id, new rt.Range(4, 8)), rt.drop); + const captured16 = b4; + const part17 = rt.iterIsSortedBy(rt.iterMap(_253, rt.closure((g7: Guard.Guard): rt.u32 => { + const _014: rt.u32 = rt.u32Rem(rt.u32Add(Guard.id(g7), Guard.id(captured16)), 3); + g7[Symbol.dispose](); + return _014; + }, (): void => { + captured16[Symbol.dispose](); + })), rt.le, true); + const args26: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtBool(part17, f)]; + Log.note(log, rt.fmtFormat(["unsorted ", args26[0]])); + const c4: Guard.Guard = guard(12); + const _271: rt.Iter = rt.iterTake(rt.iterSlice(guards(log, id, new rt.Range(13, 15)), rt.drop), 0, rt.drop); + const captured17 = c4; + const part18 = rt.iterIsSortedBy(rt.iterMap(_271, rt.closure((g8: Guard.Guard): rt.u32 => { + const _015: rt.u32 = rt.u32Add(Guard.id(g8), Guard.id(captured17)); + g8[Symbol.dispose](); + return _015; + }, (): void => { + captured17[Symbol.dispose](); + })), rt.le, true); + const args28: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtBool(part18, f)]; + Log.note(log, rt.fmtFormat(["empty ", args28[0]])); + const d3: Guard.Guard = guard(15); + const _290: rt.Iter = rt.iterSlice([3, 1]); + const captured18 = d3; + const part19 = rt.iterIsSortedBy(rt.iterMap(_290, rt.closure((_24: rt.u32): rt.u32 => { + return rt.u32Add(_24, Guard.id(captured18)); + }, (): void => { + captured18[Symbol.dispose](); + })), rt.le, true); + const args30: rt.Fmt[] = [(f: rt.Formatter) => rt.fmtBool(part19, f)]; + Log.note(log, rt.fmtFormat(["plain ", args30[0]])); + } else if (_6 === 4) { + const id2: rt.u32 = id; + const guard2: (a0: rt.u32) => Guard.Guard = (n3: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(id2, n3), Log.clone$Clone(log)); + }; + const map: rt.HashMap = rt.hashNew() as rt.HashMap; + const _312: Guard.Guard = guard2(1); + rt.drop(rt.hashInsert(map, 1, _312)); + const _317: [Guard.Guard, Guard.Guard] = [guard2(2), guard2(3)]; + const a5: Guard.Guard = _317[0]; + const b5: Guard.Guard = _317[1]; + const _333: rt.Entry = rt.entry(map, 1); + const captured9 = a5; + const part8 = Guard.id(rt.entryOrInsertWith(_333, rt.closure((): Guard.Guard => { + return captured9; + }, (): void => { + captured9[Symbol.dispose](); + }), rt.drop)); + const args32: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part8, f)]; + Log.note(log, rt.fmtFormat(["hash occupied ", args32[0]])); + const _349: rt.Entry = rt.entry(map, 2); + const captured10 = b5; + const part9 = Guard.id(rt.entryOrInsertWith(_349, rt.closure((): Guard.Guard => { + return captured10; + }, (): void => { + captured10[Symbol.dispose](); + }), rt.drop)); + const args34: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part9, f)]; + Log.note(log, rt.fmtFormat(["hash vacant ", args34[0]])); + const captured11 = guard2(4); + const made2: () => Guard.Guard = rt.closure((): Guard.Guard => { + return Guard.new(rt.u32Add(Guard.id(captured11), 10), Log.clone$Clone(log)); + }, (): void => { + captured11[Symbol.dispose](); + }); + const part10 = Guard.id(rt.entryOrInsertWith(rt.entry(map, 3), rt.once(made2), rt.drop)); + const args36: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part10, f)]; + Log.note(log, rt.fmtFormat(["hash made ", args36[0]])); + const captured12 = guard2(5); + const keyed: (a0: rt.u32) => Guard.Guard = rt.closure((k4: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(Guard.id(captured12), k4), Log.clone$Clone(log)); + }, (): void => { + captured12[Symbol.dispose](); + }); + const part11 = Guard.id(rt.entryOrInsertWith(rt.entry(map, 4), rt.once(keyed), rt.drop)); + const args38: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part11, f)]; + Log.note(log, rt.fmtFormat(["hash keyed ", args38[0]])); + const _396: [Guard.Guard, Guard.Guard] = [guard2(6), guard2(7)]; + const e: Guard.Guard = _396[0]; + f = _396[1]; + const _404: rt.Entry = rt.entry(map, 1); + const captured13 = e; + rt.entryAndModify(_404, rt.closure((g4: Guard.Guard): undefined => { + const part12 = Guard.id(captured13); + const args58: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part12, f)]; + Guard.note(g4, rt.fmtFormat(["modified ", args58[0]])); + captured13[Symbol.dispose](); + }, (): void => { + captured13[Symbol.dispose](); + }), rt.drop); + const _409: rt.Entry = rt.entry(map, 5); + const captured14 = f; + const part14 = Guard.id(rt.entryOrInsert(rt.entryAndModify(_409, rt.closure((g5: Guard.Guard): undefined => { + const part13 = Guard.id(captured14); + const args60: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part13, f)]; + Guard.note(g5, rt.fmtFormat([args60[0]])); + captured14[Symbol.dispose](); + }, (): void => { + captured14[Symbol.dispose](); + }), rt.drop), guard2(8), rt.drop)); + const args40: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part14, f)]; + Log.note(log, rt.fmtFormat(["hash added ", args40[0]])); + let iterStart: rt.u32 = 1; + const iterEnd: rt.u32 = 6; + while ((_430 = iterStart++) < iterEnd) { + rt.drop(rt.hashRemove(map, _430)); + } + rt.hashDrop(map, undefined, rt.drop); + } else if (_6 === 5) { + const id3: rt.u32 = id; + const guard3: (a0: rt.u32) => Guard.Guard = (n2: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(id3, n2), Log.clone$Clone(log)); + }; + const map2: rt.BTreeMap = rt.btreeNew(rt.cmp) as rt.BTreeMap; + const _446: Guard.Guard = guard3(1); + rt.drop(rt.btreeInsert(map2, 1, _446)); + const _451: [Guard.Guard, Guard.Guard] = [guard3(2), guard3(3)]; + const a6: Guard.Guard = _451[0]; + const b6: Guard.Guard = _451[1]; + const _467: rt.Entry = rt.entry(map2, 1); + const captured3 = a6; + const part = Guard.id(rt.entryOrInsertWith(_467, rt.closure((): Guard.Guard => { + return captured3; + }, (): void => { + captured3[Symbol.dispose](); + }), rt.drop)); + const args42: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part, f)]; + Log.note(log, rt.fmtFormat(["btree occupied ", args42[0]])); + const _483: rt.Entry = rt.entry(map2, 2); + const captured4 = b6; + const part2 = Guard.id(rt.entryOrInsertWith(_483, rt.closure((): Guard.Guard => { + return captured4; + }, (): void => { + captured4[Symbol.dispose](); + }), rt.drop)); + const args44: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part2, f)]; + Log.note(log, rt.fmtFormat(["btree vacant ", args44[0]])); + const captured5 = guard3(4); + const made3: () => Guard.Guard = rt.closure((): Guard.Guard => { + return Guard.new(rt.u32Add(Guard.id(captured5), 10), Log.clone$Clone(log)); + }, (): void => { + captured5[Symbol.dispose](); + }); + const part3 = Guard.id(rt.entryOrInsertWith(rt.entry(map2, 3), rt.once(made3), rt.drop)); + const args46: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part3, f)]; + Log.note(log, rt.fmtFormat(["btree made ", args46[0]])); + const captured6 = guard3(5); + const keyed2: (a0: rt.u32) => Guard.Guard = rt.closure((k3: rt.u32): Guard.Guard => { + return Guard.new(rt.u32Add(Guard.id(captured6), k3), Log.clone$Clone(log)); + }, (): void => { + captured6[Symbol.dispose](); + }); + const part4 = Guard.id(rt.entryOrInsertWith(rt.entry(map2, 4), rt.once(keyed2), rt.drop)); + const args48: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part4, f)]; + Log.note(log, rt.fmtFormat(["btree keyed ", args48[0]])); + const _530: [Guard.Guard, Guard.Guard] = [guard3(6), guard3(7)]; + const e2: Guard.Guard = _530[0]; + const f2: Guard.Guard = _530[1]; + const _538: rt.Entry = rt.entry(map2, 1); + const captured7 = e2; + rt.entryAndModify(_538, rt.closure((g2: Guard.Guard): undefined => { + const part5 = Guard.id(captured7); + const args54: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part5, f)]; + Guard.note(g2, rt.fmtFormat(["modified ", args54[0]])); + captured7[Symbol.dispose](); + }, (): void => { + captured7[Symbol.dispose](); + }), rt.drop); + const _543: rt.Entry = rt.entry(map2, 5); + const captured8 = f2; + const part7 = Guard.id(rt.entryOrInsert(rt.entryAndModify(_543, rt.closure((g3: Guard.Guard): undefined => { + const part6 = Guard.id(captured8); + const args56: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part6, f)]; + Guard.note(g3, rt.fmtFormat([args56[0]])); + captured8[Symbol.dispose](); + }, (): void => { + captured8[Symbol.dispose](); + }), rt.drop), guard3(8), rt.drop)); + const args50: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(part7, f)]; + Log.note(log, rt.fmtFormat(["btree added ", args50[0]])); + let iterStart2: rt.u32 = 1; + const iterEnd2: rt.u32 = 6; + while ((_564 = iterStart2++) < iterEnd2) { + rt.drop(rt.btreeRemove(map2, _564)); + } + rt.btreeDrop(map2, undefined, rt.drop); + } else { + const a7: Guard.Guard = guard(10); + const _576: rt.Iter = rt.iterSlice(guards(log, id, new rt.Range(1, 4)), rt.drop); + const captured = id; + const captured2 = a7; + rt.drop(rt.iterMaxByKey(_576, rt.closure((g: Guard.Guard): rt.u32 => { + if (!(Guard.id(g) !== rt.u32Add(captured, 2))) { + const _122: rt.u32 = Guard.id(g); + const _142: rt.u32 = Guard.id(captured2); + const args52: rt.Fmt[] = [(f: rt.Formatter) => rt.u32Display(_122, f), (f: rt.Formatter) => rt.u32Display(_142, f)]; + rt.panicFmt(["key of g", args52[0], " with g", args52[1]]); + } else { + return Guard.id(g); + } + }, (): void => { + captured2[Symbol.dispose](); + }), rt.lt, true, rt.drop, true)); + } +} + +//# sourceMappingURL=released.ts.map diff --git a/ts/fixtures/task/src/drops.rs b/ts/fixtures/task/src/drops.rs index 8a1446796..972886355 100644 --- a/ts/fixtures/task/src/drops.rs +++ b/ts/fixtures/task/src/drops.rs @@ -29,6 +29,7 @@ mod iters; mod lists; mod objects; mod once; +mod released; /// A value of a type that drops, with no `[Symbol.dispose]` of its own. pub enum Held { @@ -734,6 +735,12 @@ pub fn inside(log: &Log, id: u32, arg: u8) { inside::inside(log, id, arg); } +/// Run scenario `arg % 7` of where std drops a closure given to a consumer or an entry. +/// The last panics in a fold. +pub fn released(log: &Log, id: u32, arg: u8) { + released::released(log, id, arg); +} + /// Run scenario `arg % 9` of what std's comparisons of iterators drop. pub fn compared(log: &Log, id: u32, arg: u8) { iters::compared(log, id, arg); diff --git a/ts/fixtures/task/src/drops/released.rs b/ts/fixtures/task/src/drops/released.rs new file mode 100644 index 000000000..226e36fc6 --- /dev/null +++ b/ts/fixtures/task/src/drops/released.rs @@ -0,0 +1,177 @@ +//! Where std drops a closure that owns a guard given to a consumer that takes the iterator +//! by value, or to a map's entry: as the fold ends, before the iterator and what it still +//! holds, or as it finds the iterator empty, and uncalled where the entry has no use for it. + +use std::collections::{BTreeMap, HashMap}; + +use crate::log::Log; +use crate::model::Guard; + +/// The guards of `ids`, in order. +fn guards(log: &Log, id: u32, ids: std::ops::Range) -> Vec { + ids.map(|n| Guard::new(id + n, log.clone())).collect() +} + +/// Each of a map's entries given a closure that owns a guard: `or_insert_with` of an +/// occupied key and of a vacant one, by a closure that moves its guard in and by one that +/// `Fn` calls, which the call drops after; `or_insert_with_key`; and `and_modify` of each. +macro_rules! entries { + ($log:expr, $id:expr, $map:expr, $kind:literal) => {{ + let (log, id) = ($log, $id); + let guard = |n: u32| Guard::new(id + n, log.clone()); + let mut map = $map; + map.insert(1u32, guard(1)); + let (a, b) = (guard(2), guard(3)); + log.note(format!( + "{} occupied {}", + $kind, + map.entry(1).or_insert_with(move || a).id() + )); + log.note(format!( + "{} vacant {}", + $kind, + map.entry(2).or_insert_with(move || b).id() + )); + let c = guard(4); + let made = move || Guard::new(c.id() + 10, log.clone()); + log.note(format!("{} made {}", $kind, map.entry(3).or_insert_with(made).id())); + let d = guard(5); + let keyed = move |k: &u32| Guard::new(d.id() + k, log.clone()); + log.note(format!( + "{} keyed {}", + $kind, + map.entry(4).or_insert_with_key(keyed).id() + )); + let (e, f) = (guard(6), guard(7)); + map.entry(1) + .and_modify(move |g| g.note(&format!("modified {}", e.id()))); + let added = map + .entry(5) + .and_modify(move |g| g.note(&format!("{}", f.id()))) + .or_insert(guard(8)); + log.note(format!("{} added {}", $kind, added.id())); + // Out one at a time, so a hash map's order of its own leaves nothing to differ in. + for k in 1..6 { + drop(map.remove(&k)); + } + }}; +} + +/// Run scenario `arg % 7`. The last panics in a fold, which aborts before anything else +/// drops. +pub(super) fn released(log: &Log, id: u32, arg: u8) { + let guard = |n: u32| Guard::new(id + n, log.clone()); + match arg % 7 { + 0 => { + // The closure drops as the fold ends, before what a `take` holds back. + let a = guard(10); + let best = guards(log, id, 1..5).into_iter().take(3).reduce(move |x, y| { + y.note(&format!("reduce {}", a.id())); + if x.id() < y.id() { y } else { x } + }); + log.note(format!("reduced {:?}", best.map(|g| g.id()))); + // Empty: it drops before the iterator. + let b = guard(11); + let none = guards(log, id, 5..7).into_iter().take(0).reduce(move |x, _| { + b.note("never"); + x + }); + log.note(format!("none {}", none.is_none())); + // Over an iterator that drops nothing of its own, and lent, which its owner drops. + let c = guard(12); + let made = (13..16) + .map(guard) + .reduce(move |x, y| if y.id() == c.id() + 2 { y } else { x }); + log.note(format!("made {:?}", made.map(|g| g.id()))); + let d = guard(16); + let mut first = move |x: Guard, _: Guard| { + d.note("first"); + x + }; + let kept = guards(log, id, 17..20).into_iter().reduce(&mut first); + log.note(format!("lent {:?}", kept.map(|g| g.id()))); + drop(first); + } + 1 => { + // Each loser drops as it loses; the comparator as the fold ends, or before an empty + // iterator. + let a = guard(10); + let max = guards(log, id, 1..5) + .into_iter() + .take(3) + .max_by(move |x, y| (x.id() / 2 + a.id()).cmp(&(y.id() / 2 + a.id()))); + log.note(format!("max {:?}", max.map(|g| g.id()))); + let b = guard(11); + let min = guards(log, id, 5..8) + .into_iter() + .min_by(move |x, y| (x.id() / 2 + b.id()).cmp(&(y.id() / 2 + b.id()))); + log.note(format!("min {:?}", min.map(|g| g.id()))); + let c = guard(12); + let none = guards(log, id, 13..15) + .into_iter() + .take(0) + .max_by(move |x, y| x.id().cmp(&(y.id() + c.id()))); + log.note(format!("none {}", none.is_none())); + } + 2 => { + // std maps the iterator by the key's closure, which drops as the fold ends, but after + // an empty iterator. + let a = guard(10); + let max = guards(log, id, 1..5) + .into_iter() + .take(3) + .max_by_key(move |g| g.id() / 2 + a.id()); + log.note(format!("max {:?}", max.map(|g| g.id()))); + let b = guard(11); + let min = guards(log, id, 5..8) + .into_iter() + .min_by_key(move |g| g.id() / 2 + b.id()); + log.note(format!("min {:?}", min.map(|g| g.id()))); + let c = guard(12); + let none = guards(log, id, 13..15) + .into_iter() + .take(0) + .min_by_key(move |g| g.id() + c.id()); + log.note(format!("none {}", none.is_none())); + let d = guard(15); + let mut key = move |g: &Guard| g.id() + d.id(); + let lent = guards(log, id, 16..18).into_iter().max_by_key(&mut key); + log.note(format!("lent {:?}", lent.map(|g| g.id()))); + drop(key); + } + 3 => { + // std maps the iterator by the closure, which drops after it, and after the last + // item read. + let a = guard(10); + let sorted = guards(log, id, 1..4).into_iter().is_sorted_by_key(move |g| { + g.note(&format!("key {}", a.id())); + g.id() + }); + log.note(format!("sorted {sorted}")); + let b = guard(11); + let unsorted = guards(log, id, 4..8) + .into_iter() + .is_sorted_by_key(move |g| (g.id() + b.id()) % 3); + log.note(format!("unsorted {unsorted}")); + let c = guard(12); + let empty = guards(log, id, 13..15) + .into_iter() + .take(0) + .is_sorted_by_key(move |g| g.id() + c.id()); + log.note(format!("empty {empty}")); + let d = guard(15); + let plain = [3u32, 1].iter().is_sorted_by_key(move |&n| n + d.id()); + log.note(format!("plain {plain}")); + } + 4 => entries!(log, id, HashMap::new(), "hash"), + 5 => entries!(log, id, BTreeMap::new(), "btree"), + _ => { + // A key's closure that panics on the second item. + let a = guard(10); + guards(log, id, 1..4).into_iter().max_by_key(move |g| { + assert!(g.id() != id + 2, "key of g{} with g{}", g.id(), a.id()); + g.id() + }); + } + } +} diff --git a/ts/fixtures/task/src/harness.rs b/ts/fixtures/task/src/harness.rs index cf1c279cc..68775a5cc 100644 --- a/ts/fixtures/task/src/harness.rs +++ b/ts/fixtures/task/src/harness.rs @@ -147,6 +147,9 @@ fn steps() -> Vec<(&'static str, Step)> { ("inside", |log, exec, _, arg| { drops::inside(log, 1000 * exec.len() as u32, arg) }), + ("released", |log, exec, _, arg| { + drops::released(log, 1000 * exec.len() as u32, arg) + }), ("compared", |log, exec, _, arg| { drops::compared(log, 1000 * exec.len() as u32, arg) }), diff --git a/ts/fixtures/task/ts.toml b/ts/fixtures/task/ts.toml index 69ad0ae2e..8be9b9011 100644 --- a/ts/fixtures/task/ts.toml +++ b/ts/fixtures/task/ts.toml @@ -18,6 +18,7 @@ roots = [ "drops::folded", "drops::rfolded", "drops::inside", + "drops::released", "drops::compared", "drops::lists", "futures::helpers", diff --git a/ts/runtime/rt/collections.ts b/ts/runtime/rt/collections.ts index cc891e3d0..67d870f70 100644 --- a/ts/runtime/rt/collections.ts +++ b/ts/runtime/rt/collections.ts @@ -1191,20 +1191,24 @@ export function tableOrInsert(e: TableEntry, item: T, f?: (item: T) => voi return e; } -/** `Entry::or_insert_with`: `e`, holding `make()`'s item if it was vacant. */ -export function tableOrInsertWith(e: TableEntry, make: () => T): TableEntry { - return e.o ? e : e.fill(make()); +/** `Entry::or_insert_with`: `e`, holding `make()`'s item if it was vacant, or else `make` drops by `dropF` uncalled. */ +export function tableOrInsertWith(e: TableEntry, make: () => T, dropF?: (f: () => T) => void): TableEntry { + if (!e.o) return e.fill(make()); + dropF?.(make); + return e; } -/** `Entry::and_modify`: `f` of its item, if occupied. */ -export function tableAndModify(e: TableEntry, f: (item: T) => void): TableEntry { +/** `Entry::and_modify`: `f` of its item, if occupied, or else `f` drops by `dropF` uncalled. */ +export function tableAndModify(e: TableEntry, f: (item: T) => void, dropF?: (f: (item: T) => void) => void): TableEntry { if (e.o) f(e.v); + else dropF?.(f); return e; } -/** `Entry::and_modify` of items JS copies: `f` of its item's place, if occupied. */ -export function tableAndModifyMut(e: TableEntry, f: (item: Place) => void): TableEntry { +/** `Entry::and_modify` of items JS copies: `f` of its item's place, if occupied, as `tableAndModify`. */ +export function tableAndModifyMut(e: TableEntry, f: (item: Place) => void, dropF?: (f: (item: Place) => void) => void): TableEntry { if (e.o) f(e); + else dropF?.(f); return e; } @@ -2466,9 +2470,13 @@ function isHash(m: HashMap | BTreeMap): m is HashMap { return "p" in m; } -/** `Entry::or_insert_with`: the value there, or else `f()`'s, inserted. */ -export function entryOrInsertWith(e: Entry, f: (key: K) => V): V { - if (e.o) return entryGet(e); +/** `Entry::or_insert_with`: the value there, and `f` drops by `dropF` uncalled, or else `f()`'s, inserted. */ +export function entryOrInsertWith(e: Entry, f: (key: K) => V, dropF?: (f: (key: K) => V) => void): V { + if (e.o) { + const value = entryGet(e); + dropF?.(f); + return value; + } const value = f(e.k); fill(e, value); return value; @@ -2489,15 +2497,17 @@ export function entryOccupied(e: Entry): boolean { return e.o; } -/** `Entry::and_modify` of a value JS copies: `f` of its place, if any. */ -export function entryAndModifyMut(e: Entry, f: (value: Place) => void): Entry { +/** `Entry::and_modify` of a value JS copies: `f` of its place, if any, as `entryAndModify`. */ +export function entryAndModifyMut(e: Entry, f: (value: Place) => void, dropF?: (f: (value: Place) => void) => void): Entry { if (e.o) f(entryGetMut(e)); + else dropF?.(f); return e; } -/** `Entry::and_modify`: `f` of the value there, if any. */ -export function entryAndModify(e: Entry, f: (value: V) => void): Entry { +/** `Entry::and_modify`: `f` of the value there, if any, or else `f` drops by `dropF` uncalled. */ +export function entryAndModify(e: Entry, f: (value: V) => void, dropF?: (f: (value: V) => void) => void): Entry { if (e.o) f(entryGet(e)); + else dropF?.(f); return e; } @@ -2522,10 +2532,14 @@ export function entryGetMut(e: Entry): Place { /** * `Entry::or_insert_with` and `or_insert_with_key` of a value JS copies, and - * `or_default`: its place, after inserting `f`'s value if the map lacks the key. + * `or_default`: its place, after inserting `f`'s value if the map lacks the key, as + * `entryOrInsertWith`. */ -export function entryOrInsertWithMut(e: Entry, f: (key: K) => V): Place { - return e.o ? entryGetMut(e) : fill(e, f(e.k)); +export function entryOrInsertWithMut(e: Entry, f: (key: K) => V, dropF?: (f: (key: K) => V) => void): Place { + if (!e.o) return fill(e, f(e.k)); + const place = entryGetMut(e); + dropF?.(f); + return place; } /** `Entry::or_insert` and `VacantEntry::insert` of a value JS copies: its place, and `value` drops if one was there. */ diff --git a/ts/runtime/rt/iter.ts b/ts/runtime/rt/iter.ts index 6f1c6437e..4cd135baa 100644 --- a/ts/runtime/rt/iter.ts +++ b/ts/runtime/rt/iter.ts @@ -932,12 +932,16 @@ export function iterPosition(it: Iter, f: (item: T) => boolean): number | return undefined; } -/** `Iterator::reduce`: the first item by `next`, folded with the rest by `f`. */ -export function iterReduce(it: Iter, f: (acc: T, item: T) => T, drops?: boolean): T | undefined; -export function iterReduce(it: Iter, f: (acc: T, item: T) => T, drops: boolean | undefined, none: None): T | None; -export function iterReduce(it: Iter, f: (acc: T, item: T) => T, drops = false, none?: None): T | undefined | None { +/** + * `Iterator::reduce`: the first item by `next`, folded with the rest by `f`. If it `owns` + * `f`, `f` drops as `iterFold`'s does, or before `it` if `it` is empty. + */ +export function iterReduce(it: Iter, f: (acc: T, item: T) => T, drops?: boolean, owns?: boolean): T | undefined; +export function iterReduce(it: Iter, f: (acc: T, item: T) => T, drops: boolean | undefined, owns: boolean | undefined, none: None): T | None; +export function iterReduce(it: Iter, f: (acc: T, item: T) => T, drops = false, owns = false, none?: None): T | undefined | None { const first = it.next(); - if (first !== DONE) return iterFold(it, first, f, drops); + if (first !== DONE) return iterFold(it, first, f, drops, owns); + if (owns) dispose(f); if (drops) dispose(it); return none; } @@ -992,32 +996,41 @@ export function iterMin(it: Iter, lt: Lt, drops = false, drop?: Drop return iterToOption(best(it, (item: T) => item, lt, true, drops, drop), none); } -/** `max_by_key`, by `lt` of the keys, as `iterMax`, each item's key taken once. */ -export function iterMaxByKey(it: Iter, f: (item: T) => K, lt: Lt, drops?: boolean, drop?: Drop): T | undefined; -export function iterMaxByKey(it: Iter, f: (item: T) => K, lt: Lt, drops: boolean | undefined, drop: Drop | undefined, none: None): T | None; -export function iterMaxByKey(it: Iter, f: (item: T) => K, lt: Lt, drops = false, drop?: Drop, none?: None): T | undefined | None { - return iterToOption(best(it, f, lt, false, drops, drop), none); +/** + * `max_by_key`, by `lt` of the keys, as `iterMax`, each item's key taken once. If it + * `owns` `f`, `f` drops as std's `map` of the iterator by it does: as the fold ends, or + * after `it` if `it` is empty. + */ +export function iterMaxByKey(it: Iter, f: (item: T) => K, lt: Lt, drops?: boolean, drop?: Drop, owns?: boolean): T | undefined; +export function iterMaxByKey(it: Iter, f: (item: T) => K, lt: Lt, drops: boolean | undefined, drop: Drop | undefined, owns: boolean | undefined, none: None): T | None; +export function iterMaxByKey(it: Iter, f: (item: T) => K, lt: Lt, drops = false, drop?: Drop, owns = false, none?: None): T | undefined | None { + return iterToOption(best(it, f, lt, false, drops, drop, owns ? () => dispose(f) : undefined, true), none); } -/** `min_by_key`, by `lt` of the keys, as `iterMin`, each item's key taken once. */ -export function iterMinByKey(it: Iter, f: (item: T) => K, lt: Lt, drops?: boolean, drop?: Drop): T | undefined; -export function iterMinByKey(it: Iter, f: (item: T) => K, lt: Lt, drops: boolean | undefined, drop: Drop | undefined, none: None): T | None; -export function iterMinByKey(it: Iter, f: (item: T) => K, lt: Lt, drops = false, drop?: Drop, none?: None): T | undefined | None { - return iterToOption(best(it, f, lt, true, drops, drop), none); +/** `min_by_key`, by `lt` of the keys, as `iterMaxByKey`. */ +export function iterMinByKey(it: Iter, f: (item: T) => K, lt: Lt, drops?: boolean, drop?: Drop, owns?: boolean): T | undefined; +export function iterMinByKey(it: Iter, f: (item: T) => K, lt: Lt, drops: boolean | undefined, drop: Drop | undefined, owns: boolean | undefined, none: None): T | None; +export function iterMinByKey(it: Iter, f: (item: T) => K, lt: Lt, drops = false, drop?: Drop, owns = false, none?: None): T | undefined | None { + return iterToOption(best(it, f, lt, true, drops, drop, owns ? () => dispose(f) : undefined, true), none); } -/** `max_by`, by `compare`, as `iterMax`: the last of the greatest. */ -export function iterMaxBy(it: Iter, compare: Compare, drops?: boolean, drop?: Drop): T | undefined; -export function iterMaxBy(it: Iter, compare: Compare, drops: boolean | undefined, drop: Drop | undefined, none: None): T | None; -export function iterMaxBy(it: Iter, compare: Compare, drops = false, drop?: Drop, none?: None): T | undefined | None { - return iterToOption(best(it, (item: T) => item, byCompare(compare), false, drops, drop), none); +/** + * `max_by`, by `compare`, as `iterMax`: the last of the greatest. If it `owns` `compare`, `compare` + * drops as `iterReduce`'s `f` does. + */ +export function iterMaxBy(it: Iter, compare: Compare, drops?: boolean, drop?: Drop, owns?: boolean): T | undefined; +export function iterMaxBy(it: Iter, compare: Compare, drops: boolean | undefined, drop: Drop | undefined, owns: boolean | undefined, none: None): T | None; +export function iterMaxBy(it: Iter, compare: Compare, drops = false, drop?: Drop, owns = false, none?: None): T | undefined | None { + const release = owns ? () => dispose(compare) : undefined; + return iterToOption(best(it, (item: T) => item, byCompare(compare), false, drops, drop, release), none); } -/** `min_by`, by `compare`, as `iterMin`: the first of the least. */ -export function iterMinBy(it: Iter, compare: Compare, drops?: boolean, drop?: Drop): T | undefined; -export function iterMinBy(it: Iter, compare: Compare, drops: boolean | undefined, drop: Drop | undefined, none: None): T | None; -export function iterMinBy(it: Iter, compare: Compare, drops = false, drop?: Drop, none?: None): T | undefined | None { - return iterToOption(best(it, (item: T) => item, byCompare(compare), true, drops, drop), none); +/** `min_by`, by `compare`, as `iterMin`: the first of the least, and as `iterMaxBy`. */ +export function iterMinBy(it: Iter, compare: Compare, drops?: boolean, drop?: Drop, owns?: boolean): T | undefined; +export function iterMinBy(it: Iter, compare: Compare, drops: boolean | undefined, drop: Drop | undefined, owns: boolean | undefined, none: None): T | None; +export function iterMinBy(it: Iter, compare: Compare, drops = false, drop?: Drop, owns = false, none?: None): T | undefined | None { + const release = owns ? () => dispose(compare) : undefined; + return iterToOption(best(it, (item: T) => item, byCompare(compare), true, drops, drop, release), none); } /** A `PartialOrd::lt`. */ @@ -1037,31 +1050,50 @@ function byCompare(compare: Compare): Lt { /** * The item of the greatest key, the last of equal ones, or of the least if `least`, the * first, as std's `reduce` by `Ord::max` or `min` keeps it: the first by `next`, and the - * rest by `fold`, each tested for `lt` the best's and dropped as it loses. + * rest by `fold`, each tested for `lt` the best's and dropped as it loses. `release` drops + * the closure std's reduces by as the fold ends, or if `it` is empty, before `it`, or + * after it if `keyed`, as the `map` std's `_by_key` forms reduce drops its function. */ -function best(it: Iter, f: (item: T) => K, lt: Lt, least: boolean, drops: boolean, drop?: Drop): T | Done { +function best( + it: Iter, + f: (item: T) => K, + lt: Lt, + least: boolean, + drops: boolean, + drop?: Drop, + release?: () => void, + keyed = false, +): T | Done { if (!drops && drop === undefined) { let best = it.next(); - if (best === DONE) return DONE; - let key = f(best); - const folded = it.folded(true); - for (let item = folded.next(); item !== DONE; item = folded.next()) { - const k = f(item); - if (least ? lt(k, key) : !lt(k, key)) [best, key] = [item, k]; + if (best !== DONE) { + let key = f(best); + const folded = it.folded(true); + for (let item = folded.next(); item !== DONE; item = folded.next()) { + const k = f(item); + if (least ? lt(k, key) : !lt(k, key)) [best, key] = [item, k]; + } } + release?.(); return best; } const first = it.next(); if (first === DONE) { + if (!keyed) release?.(); dispose(it); + if (keyed) release?.(); return DONE; } - const [, item] = it.fold<[K, T]>([f(first), first], (best, item) => { - const k = f(item); - const wins = least ? lt(k, best[0]) : !lt(k, best[0]); - drop?.(wins ? best[1] : item); - return wins ? [k, item] : best; - }); + const [, item] = it.fold<[K, T]>( + [f(first), first], + (best, item) => { + const k = f(item); + const wins = least ? lt(k, best[0]) : !lt(k, best[0]); + drop?.(wins ? best[1] : item); + return wins ? [k, item] : best; + }, + release, + ); return item; } diff --git a/ts/src/lower/collections.rs b/ts/src/lower/collections.rs index 75dbfc627..6c72cc638 100644 --- a/ts/src/lower/collections.rs +++ b/ts/src/lower/collections.rs @@ -210,13 +210,13 @@ pub fn call<'tcx>( let e = match std { Std::HashMap | Std::HashSet => hash(b, coll, call, owner, name, args, out), Std::HashTable => table(b, coll, call, owner, name, args, out), - Std::TableEntry => table_entry(b, coll, name, args, call.span), + Std::TableEntry => table_entry(b, coll, call, name, args), Std::BTreeMap | Std::BTreeSet => btree(b, coll, call, owner, name, args), Std::VecDeque => deque(b, coll, call, owner, name, args), Std::LinkedList => list(b, coll, call, owner, name, args), Std::BinaryHeap => heap(b, coll, call, owner, name, args), Std::PeekMut if name == "pop" => Some(Expr::rt("peekMutPop", args)), - Std::Entry => entry(b, coll, name, args, span), + Std::Entry => entry(b, coll, call, name, args), Std::Ordering => ordering(name, args), Std::Hasher if matches!(name, "new" | "default") => Some(Expr::rt("hasher", vec![])), Std::RandomState => Some(random_state(b, call, coll, name, args)), @@ -718,10 +718,11 @@ fn table<'tcx>( fn table_entry<'tcx>( b: &mut Body<'_, '_, 'tcx>, coll: Ty<'tcx>, + call: &Call<'tcx>, name: &str, args: Vec, - span: Span, ) -> Option { + let span = call.span; let item = arg(coll, 0); let mut values = args; let e = match name { @@ -736,9 +737,21 @@ fn table_entry<'tcx>( values, ) } - "or_insert_with" => Expr::rt("tableOrInsertWith", values), - "and_modify" if b.t.needs_place(item) => Expr::rt("tableAndModifyMut", values), - "and_modify" => Expr::rt("tableAndModify", values), + "or_insert_with" => { + values.extend(uncalled(b, call)?); + Expr::rt("tableOrInsertWith", values) + } + "and_modify" => { + values.extend(uncalled(b, call)?); + Expr::rt( + if b.t.needs_place(item) { + "tableAndModifyMut" + } else { + "tableAndModify" + }, + values, + ) + } // The entry is its item's place. "get_mut" | "into_mut" if b.t.needs_place(item) => values.pop()?, "get" | "get_mut" | "into_mut" => values.pop()?.member("v"), @@ -1933,7 +1946,14 @@ fn default<'tcx>(b: &mut Body<'_, '_, 'tcx>, coll: Ty<'tcx>, span: Span) -> Opti } /// A method of an `Entry`, `OccupiedEntry`, or `VacantEntry`. -fn entry<'tcx>(b: &mut Body<'_, '_, 'tcx>, coll: Ty<'tcx>, name: &str, args: Vec, span: Span) -> Option { +fn entry<'tcx>( + b: &mut Body<'_, '_, 'tcx>, + coll: Ty<'tcx>, + call: &Call<'tcx>, + name: &str, + args: Vec, +) -> Option { + let span = call.span; let value = arg(coll, 1); let mut values = args; // What these return a `&mut` to is a place where JS would copy it. @@ -1947,14 +1967,20 @@ fn entry<'tcx>(b: &mut Body<'_, '_, 'tcx>, coll: Ty<'tcx>, name: &str, args: Vec // A vacant entry's. "insert" if is_vacant(b, coll) => Expr::rt(mutable("entryOrInsert"), values), "insert" => Expr::rt("entryInsert", values), - "or_insert_with" | "or_insert_with_key" => Expr::rt(mutable("entryOrInsertWith"), values), + "or_insert_with" | "or_insert_with_key" => { + values.extend(uncalled(b, call)?); + Expr::rt(mutable("entryOrInsertWith"), values) + } "or_default" => { let tcx = b.t.tcx; let default = trait_fn(tcx, "Default", "default"); values.push(b.fn_value(default, tcx.mk_args(&[value.into()]), span)); Expr::rt(mutable("entryOrInsertWith"), values) } - "and_modify" => Expr::rt(mutable("entryAndModify"), values), + "and_modify" => { + values.extend(uncalled(b, call)?); + Expr::rt(mutable("entryAndModify"), values) + } "key" => Expr::rt("entryKey", values), "into_key" => values.pop()?.member("k"), "get" => Expr::rt("entryGet", values), @@ -1966,6 +1992,12 @@ fn entry<'tcx>(b: &mut Body<'_, '_, 'tcx>, coll: Ty<'tcx>, name: &str, args: Vec Some(e) } +/// What drops the closure an entry's `or_insert_with`, `or_insert_with_key`, or `and_modify` +/// takes last, which std's drops uncalled unless the entry is vacant or occupied as it needs. +fn uncalled<'tcx>(b: &mut Body<'_, '_, 'tcx>, call: &Call<'tcx>) -> Option> { + b.t.droppers(call.args.types().last(), call.span) +} + /// Whether `entry`, an `Entry` of a map or, as `std` says, of a `HashTable`, is its variant /// `index`: `Occupied` while the map holds its key. Each variant's entry is the `Entry` itself. pub fn entry_test(std: Std, adt: ty::AdtDef<'_>, index: rustc_abi::VariantIdx, entry: Expr) -> Expr { diff --git a/ts/src/lower/iter.rs b/ts/src/lower/iter.rs index 73205ac10..5c3db736b 100644 --- a/ts/src/lower/iter.rs +++ b/ts/src/lower/iter.rs @@ -504,10 +504,7 @@ pub fn call<'tcx>( // Each owns a closure it is given by value, which drops as its fold ends. "for_each" | "fold" => { let drops = iter_drops(b, self_ty, span); - let owns = match b.t.drops(targ(gargs.types().count() - 1)?) { - true => Expr::lit("true"), - false => Expr::undefined(), - }; + let owns = flag(b.t.drops(targ(gargs.types().count() - 1)?)); method(&camel, tail(rest, vec![drops, owns])) } // std's `Sum` and `Product` are of the type or a reference to it: another is the crate's. @@ -570,14 +567,16 @@ pub fn call<'tcx>( // By the comparator, which `best` calls with the best so far and then the next, as // std's `cmp::max_by` and `min_by` do. "max_by" | "min_by" => { - let droppers = [iter_drops(b, self_ty, span), b.t.dropper(item, span)] + let owns = flag(b.t.drops(targ(1)?)); + let droppers = [iter_drops(b, self_ty, span), b.t.dropper(item, span), owns] .into_iter() .chain(none); method(&camel, tail(rest, droppers.collect())) } "reduce" => { + let owns = flag(b.t.drops(targ(1)?)); let drops = iter_drops(b, self_ty, span); - method(name, tail(rest, [drops].into_iter().chain(none).collect())) + method(name, tail(rest, [drops, owns].into_iter().chain(none).collect())) } // By the items' `Ord::max` or `min`, or the keys', which test `<` of the next and the // best. Not of places, which the runtime would compare as the objects they are. @@ -617,8 +616,13 @@ pub fn call<'tcx>( )); } let lt = super::collections::test_fn(b, key, "lt", span); + let owns = match by_key { + true => Some(flag(b.t.drops(targ(2)?))), + false => None, + }; let droppers = [iter_drops(b, self_ty, span), b.t.dropper(item, span)] .into_iter() + .chain(owns) .chain(none); method(&camel, tail([rest, vec![lt]].concat(), droppers.collect())) } @@ -626,24 +630,32 @@ pub fn call<'tcx>( // or by `le` of the keys a function makes, as std's maps to them. Not of places, as // `max` is not. "is_sorted" | "is_sorted_by" | "is_sorted_by_key" => { - let (items, compare, each) = match name { - "is_sorted_by" => (recv.clone(), rest.into_iter().next()?, item), + let drops = drops_iter(b, self_ty, span); + let (items, compare, each, drops) = match name { + "is_sorted_by" => (recv.clone(), rest.into_iter().next()?, item, drops), _ if b.t.has_place(item) => return None, - "is_sorted" => (recv.clone(), super::collections::test_fn(b, item, "le", span), item), + "is_sorted" => ( + recv.clone(), + super::collections::test_fn(b, item, "le", span), + item, + drops, + ), _ => { let key = targ(2)?; let le = super::collections::test_fn(b, key, "le", span); - // The map drops its function as the iterator drops, so one through a reference - // or box is lent, as one owned that drops is refused with such an iterator. + // std's maps the iterator by its function, which drops after it: one it is lent, + // through a box or not, drops with its owner. let (mut f, f_ty) = (rest.into_iter().next()?, targ(1)?); - let owned = matches!(f_ty.kind(), ty::Closure(..) | ty::FnDef(..) | ty::FnPtr(..)); - if !owned && drops_iter(b, self_ty, span) { + let (_, lent, _) = library::called_through(b.t, f_ty, None); + if lent && drops { f = Expr::rt("lent", vec![f]); } - (Expr::rt("iterMap", vec![recv.clone(), f]), le, key) + let drops = drops || b.t.drops(f_ty); + (Expr::rt("iterMap", vec![recv.clone(), f]), le, key, drops) } }; - let mut droppers = vec![iter_drops(b, self_ty, span), b.t.dropper(each, span)]; + let drops = flag(drops); + let mut droppers = vec![drops, b.t.dropper(each, span)]; if name == "is_sorted_by" { droppers.push(b.t.dropper(targ(1)?, span)); } @@ -868,15 +880,6 @@ fn nth_zips(tcx: ty::TyCtxt<'_>, ty: Ty<'_>) -> bool { } } -/// Whether std's `owner::name` takes a closure by value that it drops as its fold ends, -/// before the iterators, which its mapping drops there too. -pub(super) fn releases(owner: &str, name: &str) -> bool { - matches!( - (owner, name), - ("Iterator", "for_each" | "fold" | "eq_by" | "cmp_by" | "partial_cmp_by") - ) -} - /// The function or `Iterator` method named for `ty`, one of std's iterators of zero-sized /// fields, as `from_fn` makes a `FromFn` and `map` a `Map`, and its generic arguments: what /// MIR reads as a constant, rather than from that call, makes it of its fields in order. @@ -1367,7 +1370,12 @@ pub(super) fn text_items<'tcx>(t: &Translator<'_, 'tcx>, item: Ty<'tcx>) -> Opti /// holds, which its `rt.Iter` drops as std's does: `true`, or `undefined` for one that /// drops nothing. pub(super) fn iter_drops<'tcx>(b: &mut Body<'_, '_, 'tcx>, ty: Ty<'tcx>, span: Span) -> Expr { - match drops_iter(b, ty, span) { + flag(drops_iter(b, ty, span)) +} + +/// A runtime function's optional flag: `true`, or `undefined` for its default. +fn flag(on: bool) -> Expr { + match on { true => Expr::lit("true"), false => Expr::undefined(), } diff --git a/ts/src/lower/library.rs b/ts/src/lower/library.rs index 7bb8a1e28..11d0177a8 100644 --- a/ts/src/lower/library.rs +++ b/ts/src/lower/library.rs @@ -928,6 +928,29 @@ fn discards(owner: &str, name: &str) -> Option<&'static [usize]> { }) } +/// Whether the mapping of `owner::name` drops each closure it takes by value where std's +/// does: a consumer's as its fold ends, before the iterator, or as it finds the iterator +/// empty, and an entry's if it never calls it. +fn releases(owner: &str, name: &str) -> bool { + matches!( + (owner, name), + ( + "Iterator", + "for_each" + | "fold" + | "reduce" + | "max_by" + | "min_by" + | "max_by_key" + | "min_by_key" + | "is_sorted_by_key" + | "eq_by" + | "cmp_by" + | "partial_cmp_by" + ) | ("Entry", "or_insert_with" | "or_insert_with_key" | "and_modify") + ) +} + /// Whether `owner::name` is a guard's map, filtered, tried, or split, to parts of what it lends. pub fn maps_guard(owner: &str, name: &str) -> bool { matches!( @@ -1087,7 +1110,7 @@ pub fn called_through<'tcx>( /// The closures `call` calls that own a value that drops, by what its mapping does with /// each: kept by the iterator it returns, if `iter::holds_closure`; dropped by the mapping, -/// if `released`, as `iter::releases` says; dropped as it returns, if `Fn` or `FnMut` call +/// if `released`, as `releases` says; dropped as it returns, if `Fn` or `FnMut` call /// it and nothing else it takes by value drops, or the mapping discards none of it, as then /// nothing it drops is ordered against it; dropped where `discarded` says, by the type's /// index among the call's type arguments; or else leaked. A closure that `Fn` or `FnMut` @@ -1142,15 +1165,15 @@ fn called_closures<'tcx>( } continue; } - // Its owner drops a borrowed closure, and the mapping a released one. - if lent || released { + // Its owner drops a borrowed closure. + if lent { continue; } let index = call.args[..param.index as usize] .iter() .filter(|a| a.as_type().is_some()) .count(); - let discards = discarded.is_some_and(|d| d.contains(&index)); + let discards = released || discarded.is_some_and(|d| d.contains(&index)); let kept = inputs.iter().enumerate().any(|(j, &t)| j != i && mentions(t)); if bound != ty::ClosureKind::FnOnce && !kept && !discards && i < args.len() { let dropping = match discarded { @@ -1258,7 +1281,7 @@ pub fn call<'tcx>(b: &mut Body<'_, '_, 'tcx>, call: &Call<'tcx>, args: Vec } let discarded = discards(&owner, &name); let mut args = args; - let released = super::iter::releases(&owner, &name); + let released = releases(&owner, &name); let closures = called_closures(b, call, discarded, released, &mut args); // What std lends of the `[u8; N]`s it holds, its closures are given and it returns as // slices of them. diff --git a/ts/tests/task.ts b/ts/tests/task.ts index 78ba2e729..6959edb1a 100644 --- a/ts/tests/task.ts +++ b/ts/tests/task.ts @@ -58,6 +58,7 @@ export interface Fixture { folded(log: Log, id: number, arg: number): void; rfolded(log: Log, id: number, arg: number): void; inside(log: Log, id: number, arg: number): void; + released(log: Log, id: number, arg: number): void; compared(log: Log, id: number, arg: number): void; lists(log: Log, id: number, arg: number): void; }; @@ -322,6 +323,7 @@ export const steps: [string, (r: Run, arg: number) => void][] = [ }, ], ["inside", (r, arg) => r.f.drops.inside(r.log, 1000 * r.exec.tasks.length, arg)], + ["released", (r, arg) => r.f.drops.released(r.log, 1000 * r.exec.tasks.length, arg)], ["compared", (r, arg) => r.f.drops.compared(r.log, 1000 * r.exec.tasks.length, arg)], [ "wakers", @@ -426,6 +428,8 @@ export const cases: Uint8Array[] = [ ...Array.from({ length: 9 }, (_, 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. + ...Array.from({ length: 7 }, (_, arg) => script(["released", arg])), // What std's comparisons of iterators drop. ...Array.from({ length: 9 }, (_, arg) => script(["compared", arg])), // What a `LinkedList` drops, and when. From 801687910199acfbac90efb6b731b3bf14cc5c06 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Mon, 2 Nov 2026 05:28:16 -0800 Subject: [PATCH 3/3] chore(quest): leave back folds to #436's quest, and the B-tree collect to the sort port Co-Authored-By: Claude Opus 5.5 --- quest/m3/README.md | 2 +- quest/m3/ts-closure-calls.md | 4 +++- quest/m3/ts-drop-order.md | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/quest/m3/README.md b/quest/m3/README.md index ad0ee525a..801647f8b 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -22,7 +22,7 @@ generic std gap is planned here even when moq never calls it. - [Waiting: type-check in process with tsrs](/quest/m3/ts-tsrs.md) - rust2-ts checks bindings through tsrs instead of `tsc` once it is a stable library - [Drop order in std's folds and iterators](/quest/m3/ts-drop-order.md) - the values that drop still refused in std's consumers, flattens, and collects drop as std's do - [A slice of one value behind any &mut](/quest/m3/ts-slice-of-one.md) - `slice::from_mut` and `array::from_mut` of a `&mut u8`, or of an object no place names, translate -- [std's calls of a closure that have no mapping](/quest/m3/ts-closure-calls.md) - `rfold`, `try_fold`, `partition`, `repeat_with`, `sort_by_cached_key`, and `LazyCell::new` translate, dropping what their closures own as std's do +- [std's calls of a closure that have no mapping](/quest/m3/ts-closure-calls.md) - `try_fold`, `partition`, `repeat_with`, `sort_by_cached_key`, and `LazyCell::new` translate, dropping what their closures own as std's do - [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 - [A slice's searches by a closure](/quest/m3/ts-binary-search-by.md) - `binary_search_by`, `binary_search_by_key`, and `partition_point` translate, probing as std's do - [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 diff --git a/quest/m3/ts-closure-calls.md b/quest/m3/ts-closure-calls.md index aca513fb3..79b61e832 100644 --- a/quest/m3/ts-closure-calls.md +++ b/quest/m3/ts-closure-calls.md @@ -12,7 +12,9 @@ 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: -- `DoubleEndedIterator::rfold`, and `Iterator::try_fold`, `try_for_each`, and `partition`. +- `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). - `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-drop-order.md b/quest/m3/ts-drop-order.md index ccf8b0ebf..45c36679c 100644 --- a/quest/m3/ts-drop-order.md +++ b/quest/m3/ts-drop-order.md @@ -38,7 +38,7 @@ Each left is refused with a span where std's order is one JS's can't follow yet: impls, as `v.into_iter().collect::>()` of an `O` whose `Ord`, `PartialOrd`, or `PartialEq` is its own: one that panics or disagrees with itself leaves equal keys in the order [std's sort](/quest/m3/ts-sort-order.md) does, which decides which of them - drop. + drop. It follows that port of std's sorts, whose plan names it. Each `rt.Iter` has a `fold` and `rfold` that drop what it holds where std's do, and the by-value consumers std folds go through it: build on those rather than `rt.drop`.