[TS] Track object-literal property presence for in (#425) - #458
Open
CaelmBleidd wants to merge 11 commits into
Open
CaelmBleidd wants to merge 11 commits into
CaelmBleidd wants to merge 11 commits into
Conversation
CaelmBleidd
force-pushed
the
caelmbleidd/ts-425-in-operator
branch
from
October 2, 2026 22:49
ad924e9 to
15babc4
Compare
in (#425)
CaelmBleidd
changed the base branch from
main
to
caelmbleidd/ts-426-delete-property
October 2, 2026 22:50
CaelmBleidd
force-pushed
the
caelmbleidd/ts-425-in-operator
branch
2 times, most recently
from
October 3, 2026 00:02
7d41c41 to
f28d30c
Compare
CaelmBleidd
force-pushed
the
caelmbleidd/ts-426-delete-property
branch
from
October 3, 2026 05:28
8add94d to
3a06f16
Compare
CaelmBleidd
force-pushed
the
caelmbleidd/ts-425-in-operator
branch
from
October 3, 2026 05:28
afd2c12 to
a69dc98
Compare
CaelmBleidd
force-pushed
the
caelmbleidd/ts-425-in-operator
branch
from
October 3, 2026 05:54
a69dc98 to
a7cf800
Compare
CaelmBleidd
marked this pull request as ready for review
October 3, 2026 06:43
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Current stacked revision
9ae8975e710240c77127234441291fe11e5717d0([TS] Track deletion of allocated object properties #461). Head:a7cf800e3641fcf1144fd1954dd2f35eb9c6244e. This range contains no merge commits. The patch-id outside the Node replay helper is unchanged across the linear rebase.assertNodeReplay, preserving source assembly and replay assertions. Manual CI run 37101463123 passed all six jobs on this exact heada7cf800e; pinned core correctness and AI code hygiene my-review passes found no actionable defects. Older results below are historical.Summary
infor concrete EtsIR object literals from own fields and methods, including an explicitly declaredconstructormethod and fields whose value isundefined.const obj = {}; obj.x = value; if ("x" in obj) return obj.xeven though the write and presence check succeeded.undefinedwhen a fresh concrete object literal lacks an own field and no later write added it. Reads requiring modeled prototype lookup remain explicit unsupported paths.%dfltthrough the shared field-assignment path. This records new own properties and clears deletion markers for those writes.__proto__initialization or assignment as explicit unsupported paths through the normalanalyzeWithOutcomeAPI. The prototype-key set is shared with [TS] Delete object properties across all value sorts #426, whosedeleteguard stops a path before a deleted own prototype-key field can be misread.Verification
afd2c12ab1b7e9d806c61768a77935773a7c7f2d, CI run 37088724732 passed all six jobs, including TS tests and lint. The preceding production head53d4bc95passed the full local:usvm-ts:testsuite: 1120 tests, 143 skipped, 0 failures/errors;detektMainanddetektTestpassed.write → in → readfailed before the fix because analysis produced no successful state, and passed after the fix. It checksEXHAUSTED, no unsupported paths, successful return values, and Node.js replay of generated numeric inputs.let obj, writesobj.x, computes"x" in objduring module initialization, and exposes the result through a method. At the prior head, USVM returned0while Node returned7; ate1698e58, symbolic analysis and Node replay both return7.inresult. Ate1698e58, the structural assertion terminated the valid path; Node returned1. At6dea3f8e, symbolic analysis and Node replay both return1with no unsupported path.replayInOperatorScript; the current test-only commit delegates process management to sharedassertNodeReplay. Seven focused tests anddetektTestpassed on the current head, andgit diff --checkis clean. Independent pinnedmy-reviewcore and hygiene passes found no actionable defects on the historical headafd2c12a.:usvm-ts:detekttask reported 216 repository-wide findings. Its onlyReadField.ktfinding was on unchanged line 28; the configureddetektMainanddetektTesttasks passed at the previous headafd2c12a.Scope and dependencies
This PR targets the object-literal part of #425 and is based on #461, which supplies the deletion marker; #461 is based on #455, which supplies explicit unsupported outcomes. Symbolic input objects, array holes, and prototype-chain membership remain outside this supported domain. This PR is ready for review as a stacked change; merge after #461 and #455.
The installed pre-commit hook calls a nonexistent
checkLicenseGradle task. After the tests and configured Detekt tasks passed, the final commit bypassed that hook for one command.