Support v12 CMT files in analysis#8477
Merged
Merged
Conversation
Contributor
Author
|
TODO:
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #8477 +/- ##
=======================================
Coverage 74.42% 74.42%
=======================================
Files 451 451
Lines 61459 61459
=======================================
Hits 45743 45743
Misses 15716 15716
🚀 New features to boost your workflow:
|
rescript
@rescript/darwin-arm64
@rescript/darwin-x64
@rescript/linux-arm64
@rescript/linux-x64
@rescript/runtime
@rescript/win32-x64
commit: |
Keep new for...of typedtree and parsetree constructors at the end of their variants so existing marshalled constructor tags remain stable for v12 artifacts. Allow CMT readers to accept explicitly supported older magic numbers while still writing a new magic for current artifacts.
15a9fec to
afe469c
Compare
Contributor
Author
|
Ready for review!! |
Contributor
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
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.
Summary
This fixes an analysis/LSP crash when a v13 analysis binary reads v12
.cmt/.cmtifiles.It moves the new
for...oftypedtree and parsetree constructors to the end of their variants so v12 marshalled constructor tags remain stable.Root Cause
Editor analysis reads compiled
.cmtfiles directly. Those files are OCamlMarshalpayloads containing typedtree data, so variant constructors are decoded by their runtime constructor tag/index, not by constructor name.The
for...ofimplementation added new constructors in the middle of existing variants:Texp_for_ofTexp_for_await_ofPexp_for_ofPexp_for_await_ofThat shifted the numeric tags for existing constructors after
Texp_for/Pexp_for. When v13 analysis accepted or tried to read v12 CMT files, an old constructor such asTexp_sendcould be decoded asTexp_for_of. The payload layout is different, soTast_iteratorcould then read invalid values and segfault instead of raising a catchable OCaml exception.Why This Fix Works
Appending the new constructors preserves the tags and payload layout for every constructor that already existed in v12. That means v13 can safely read v12 CMTs for old syntax, while v13-generated artifacts can still use the new
for...ofconstructors.Close #8475