Builtin prototype parity: URLSearchParams/DisposableStack default prototype, custom new.target on fetch handle types
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 8/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- javascript, rust, typescript
- Domain
- compilers
Research direction
The failing cases are listed in test-files/test_gap_qsctor_builtins.ts, and the fix is an object-owned prototype representation rather than a side table, so the design belongs to maintainers. Start by reading the object model decisions 142–148 and how HANDLE_TAG registry handles store prototypes. Done means the listed Reflect.construct and prototype-identity cases match node 26.5.1, which requires changes to the runtime's object layout and rooting.
Written by the indexing model from the issue text.
Description
Found while verifying #12628. These cases already behave differently from node on main; #12628 does not change them.
| Case | perry (main) | node 26.5.1 |
|---|---|---|
Object.getPrototypeOf(new URLSearchParams()) === URLSearchParams.prototype |
false | true |
Object.getPrototypeOf(new DisposableStack()) === DisposableStack.prototype |
false | true |
Reflect.construct(Headers, [], NT) prototype is NT.prototype |
false | true |
| same for Request | false | true |
| same for Response | false | true |
| same for Blob | false | true |
| same for File | false | true |
Fetch objects (Headers/Request/Response/Blob/File) are HANDLE_TAG registry handles, so setting a heap-object prototype for a custom new.target doesn't reach them. Per the object model (decisions 142–148), the fix is an object-owned prototype representation (and its rooting), not a prototype side table.
Repro: test-files/test_gap_qsctor_builtins.ts (rows marked as pre-existing in the #12628 report).
- Dominant language
- Rust
- Stars
- 4.9k
- Forks
- 166
- Avg merge
- 3h 23m
- Merged PRs (30d)
- 911
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from PerryTS/perry
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 67/100
Maintainers usually reply within 1 day
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 48/100
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 76/100
Maintainers usually reply within 1 day
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
Maintainers usually reply within 3 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
-
Zellij doesn't validate hex colors correctly and crashesPossibly taken @ymcx claimed this today. Opensuspected bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
zellij-org/zellij#5732 ·
Maintainers usually reply within 1 day
-
bug(api): E_DOSE_ATTR_NONFINITE for a modeled D/R still says the value "never reaches you as a NaN"Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 63/100