Skip to content

release blocker: #9169 regresses 4 gap tests (built-in iterator/prototype dispatch) #9244

Description

@proggeramlug

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_2874
  • test_gap_language_types_object_part_a
  • test_gap_object_string_wrappers
  • test_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_2874

Observed 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.rsattach_iterator_prototype/chain_to switched off object_set_static_prototype so OBJECT_META_FLAG_PROTO_OVERRIDE is no longer set on array/Map/Set/String iterator prototypes
  • object/field_get_set/prototype_override.rs (new), get_field_by_name_tail.rs
  • object/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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions