Repository navigation
Description
Release blocker
main is red on 4 gap tests that are expected to pass (none is listed in test-parity/gap_snapshot.json). This blocks the v0.5.1519 release: any candidate refreshed from current main inherits these failures.
test_gap_iterator_helpers_2874test_gap_language_types_object_part_atest_gap_object_string_wrapperstest_gap_5592_class_expr_rebind_computed_accessor
Attribution — single-commit bisect, verified good endpoint
| test | a722b4cca2 (parent) |
89cde4ff14 (#9169) |
|---|---|---|
test_gap_iterator_helpers_2874 |
PASS | FAIL |
test_gap_language_types_object_part_a |
PASS | FAIL |
test_gap_object_string_wrappers |
PASS | FAIL |
test_gap_5592_class_expr_rebind_computed_accessor |
PASS | FAIL |
The good endpoint was run before being used as a baseline: all four pass at a722b4cca2.
Also verified these are NOT caused by PR #9242 (which CI blamed): with #9242's codegen change fully reverted on top of 89cde4ff14, all four still fail. #9242's only effect on this set is turning test_issue_945_scalar_method_guards from FAIL to PASS.
Why it reached main
gap-suite-build on #9169 did not complete (The operation was canceled), so every dependent gap shard was skipped. Nothing evaluated these tests before the merge.
Reproduction
cargo build --profile perry-dev -p perry -p perry-runtime-static -p perry-stdlib-static
PERRY_SKIP_BUILD=1 PERRY_BIN="$PWD/target/perry-dev/perry" \
PERRY_RUNTIME_DIR="$PWD/target/perry-dev" PERRY_NO_AUTO_OPTIMIZE=1 \
./run_parity_tests.sh --filter test_gap_iterator_helpers_2874Observed for test_gap_iterator_helpers_2874 — Perry stops after the third line:
function
function
[ 1, 2, 3 ]
TypeError: undefined is not iterable
Node continues with [ 2, 4, 6 ], [ 2, 3 ], … The failing expression is [...gen().map((x) => x * 2)]: an iterator-helper method on a generator's prototype chain returns undefined.
Suspected surface
#9169 changed exactly the dispatch surfaces these tests exercise:
object/iterator_prototypes.rs—attach_iterator_prototype/chain_toswitched offobject_set_static_prototypesoOBJECT_META_FLAG_PROTO_OVERRIDEis no longer set on array/Map/Set/String iterator prototypesobject/field_get_set/prototype_override.rs(new),get_field_by_name_tail.rsobject/native_call_method.rs,object/class_registry.rs
The gen().map(...) failure is consistent with a built-in iterator prototype no longer being reachable by the lookup path that resolves helper methods.
Acceptance criteria
- All four tests pass, and A prototype method replaced after class registration is not seen by newly constructed instances #9239's own regression (
issue_9131_prototype_method_replacement) still passes. gap-suiteshards actually RUN and are green before merge — a cancelledgap-suite-buildmust not be read as a pass.
Activity
docs(changelog): record the #9244 prototype-override fix
fix(runtime): a prototype-override receiver must not lose synthesized…
fix(#10827): an explicitly ended prototype chain ends the READ too