-
-
Notifications
You must be signed in to change notification settings - Fork 488
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(semantic)!: ensure program outlives semantic #8455
Conversation
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. |
CodSpeed Performance ReportMerging #8455 will not alter performanceComparing Summary
|
|
I've written up my thoughts on this problem in #8437 (comment) and #8461. Personally, I quite like the idea of parser returning So I suggest we go one step at a time - fix #8437 first, then discuss API changes after. I have some other thoughts about API, and if we're going to make breaking changes, it'd be preferable to do that only once. Or have I misunderstood? Is parser returning |
Changing parser return type is not necessary. But we would still need to update all usages of semantic to first copy the program into the allocator and then use the new reference. let program = alloc.alloc(parserReturn.program);
let semanticReturn = SemanticBuilder::new().build(program); |
@overlookmotel I've updated the PR to just fix semantic. |
1684b92
to
d0358eb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks very much for doing this, and thanks for reverting the changes to ParserReturn
.
Unfortunately this does make the API harder to use, but that's necessary to make it correct. SemanticBuilderReturn
does borrow the Program
for the duration of its existence, so we need to make sure it does actually work that way.
I've pushed 1 extra commit to remove unreachable_unchecked
. The purpose of that part of the coverage runner is to make sure that Semantic
contains what it should do, so it's best not to make unsafe assertions about the very thing we're trying to check.
Apart from that, great!
This is a breaking change, so before we merge this we should make sure it doesn't break downstream consumers in a terrible way. I'll try it out with Rolldown now, and will report back.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not causing major problems in Rolldown. Given that's a large codebase which makes heavy use of Oxc, likely it's not going to cause too many problems in other downstream projects either.
fixes: #8437
In semantic builder make sure
Program
reference has a lifetime of the Arena.