You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: dev/modules/list_moreutils.md
+44-10Lines changed: 44 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -187,18 +187,52 @@ All 4492 subtests must pass. Rerun `make` to ensure no unit-test regressions.
187
187
## Progress tracking
188
188
189
189
### Current status
190
-
Planning complete. Starting Step 1.
190
+
191
+
`./jcpan -t List::MoreUtils` goes from 7 failing subtests (8 test files) on master down to **1 failing subtest (`indexes.t` test 18) in 1 test file**, and that remaining failure is deferred to the parallel weaken branch (see RC6 below).
-`RuntimeScalar.arrayDeref()` / `hashDeref()` now throw `Can't use string ("N") as an ARRAY|HASH ref while "strict refs" in use` for `INTEGER` / `DOUBLE`.
197
+
-`RuntimeScalarReadOnly` gains the same behavior for read-only scalars holding numeric values, while keeping `1->[0]` / `1->{a}` silent via new `arrayDerefGet` / `hashDerefGet` overrides.
-`StatementResolver.parseStatement` for `for` / `foreach` / `while` / `until` now detects `my DECL = RHS for LIST` / `my DECL = RHS while COND` and emits a bare `my DECL;` in the enclosing scope, wrapping the loop body in a BlockNode for `while`/`until` so the inner `my` shadows the outer on each iteration (matching perl: the outer variable stays empty/undef).
204
+
- Fixes: compile-time `Global symbol @long_list …` error in `part.t`.
205
+
-[x]**RC4** — split with zero-width vs consuming alternation (2026-04-20) — commit `c9b8e05dd`
206
+
-`Operator.split` now probes each zero-width match via `Matcher.matches()` on progressively larger regions. When a consuming alternative also matches at the same offset, an extra empty field is emitted between the two separators and the consumed characters are skipped, matching perl's `REG_NOTEMPTY_ATSTART` retry loop.
-`RuntimeArray.get` / `RuntimeHash.get` now emit `Use of uninitialized value in array|hash element` (category `uninitialized`) when called with an `UNDEF` index. This was exposed after RC2 unblocked the later leak-free tests in `part.t`.
210
+
- Fixes: `part.t` tests 12 and 13.
211
+
212
+
### Deferred
213
+
214
+
-**RC6 — `Scalar::Util::weaken` on a reference to a temporary** (`indexes.t` test 18). The test does
215
+
```perl
216
+
my$ref = \(indexes(sub { 1 }, 123));
217
+
Scalar::Util::weaken($ref);
218
+
is($ref, undef, "weakened away");
219
+
```
220
+
In real perl the temporary returned by `indexes(...)` has a refcount of 1 held by `$ref`; weakening that ref drops the refcount to 0 and the temporary is freed, so `$ref` becomes undef. PerlOnJava's cooperative-refcount overlay (see `dev/architecture/weaken-destroy.md`) only tracks objects blessed into a class with `DESTROY`. For an unblessed numeric scalar like this one, weaken transitions it to `WEAKLY_TRACKED` but does not clear the weak ref at scope exit because we can't distinguish "last strong ref was this one" from "symbol table still holds a ref" without full refcounting. This is a known architectural limitation being addressed on a separate branch; this PR does not touch it.
221
+
222
+
### Final summary
223
+
224
+
-`binsert.t` ok
225
+
-`bremove.t` ok
226
+
-`mesh.t` ok
227
+
-`zip6.t` ok
228
+
-`minmaxstr.t` ok
229
+
-`mode.t` ok
230
+
-`part.t` ok
231
+
-`indexes.t` — 1 subtest still fails (RC6, deferred to weaken branch)
232
+
233
+
Run `./jcpan -t List::MoreUtils` and observe: `Files=61, Tests=4533. Failed 1/61 test programs. 1/4533 subtests failed.` (was 8 / 7 before this branch).
201
234
202
235
### Open questions
203
-
- RC3: do we need `POSIX::localeconv` to return locale-sensitive values, or is the stub enough for the Perl distribution tests we care about? Starting with the stub.
204
-
- RC4: is the split bug specific to alternations containing `\b`, or does it also affect `\s` alone at odd positions? Will be answered by the harness.
0 commit comments