fix(transformer): preserve for-await statement bodies#22361
Conversation
Merging this PR will not alter performance
Comparing Footnotes
|
There was a problem hiding this comment.
Pull request overview
Fixes the ES2018 async-generator for await...of transform so that non-block loop bodies (single-statement bodies) are preserved in the generated for loop body, aligning behavior with Babel fixtures and improving semantic conformance.
Changes:
- Preserve
for awaitbodies that are not block statements by always splicing the original body statement (except empty blocks) into the generated loop body. - Add a new conformance fixture covering
for await (...) await chunk();(single-statement body). - Update conformance/coverage snapshots to reflect the added fixture and improved pass counts.
Reviewed changes
Copilot reviewed 4 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| crates/oxc_transformer/src/es2018/async_generator_functions/for_await.rs | Adjusts body handling so non-block for await statement bodies are preserved during transformation. |
| tasks/transform_conformance/tests/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/single-statement-body/input.js | Adds a fixture input for a for await loop with a single-statement body. |
| tasks/transform_conformance/tests/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/single-statement-body/output.js | Adds the expected transformed output for the new single-statement-body fixture. |
| tasks/transform_conformance/snapshots/oxc.snap.md | Updates transform conformance snapshot totals/passed counts after adding the fixture. |
| tasks/coverage/snapshots/semantic_test262.snap | Updates semantic Test262 coverage snapshot (improved “Positive Passed” and removed resolved errors). |
Merge activity
|
70a34de to
1914f84
Compare
1914f84 to
8e79de8
Compare
### 🚀 Features - bc91a17 codegen: Expose `Codegen::with_source_type` method (#22432) (camc314) ### 🐛 Bug Fixes - 5ac7e79 minifier: Drop unused-var-init pure IIFEs and preserve annotation for downstream (#22349) (Dunqing) - 4ab57eb allocator: Fixed-size allocators use `VirtualAlloc` on Windows (#22124) (overlookmotel) - 66d77eb allocator: Fix segfault on Linux MUSL with fixed-size allocators (#22388) (overlookmotel) - b8fbc1f transformer/object-rest-spread: Correct scope id when moving bindings (#22419) (camc314) - 18edc2c codegen: Keep `Object.defineProperty` property name as plain string in minify (#22400) (Dunqing) - dda33de transformer/explicit-resource-management: Align lexical binding scopes (#22320) (camc314) - 8e79de8 transformer: Preserve for-await statement bodies (#22361) (camc314) - 0cba210 transformer/class: Replace `new.target` in static blocks (#22360) (camc314) - 67ab1c9 transformer/es2018/for-await: Hoist for-await generated bindings (#22355) (camc314) - c3ceb4a transformer/object-rest-spread: Use hoisted scope for `for-of` temp refs (#22347) (camc314) ### ⚡ Performance - 73a9043 allocator/bitset: Avoid temp heap `String` allocation (#22403) (camc314) - 8b2f4f9 transformer/object-rest-spread: Collect `Vec<SymbolId` over `Vec<BindingIdentifier>` (#22418) (camc314) - 83679ea parser: Split TriviaBuilder::handle_token hot/cold paths (#22415) (Boshen) - 2c7d781 codegen: Inline identifier-name accessors (#22411) (Boshen) - 618bc76 diagnostics: Inline `OxcDiagnosticInner` to avoid heap allocation (#22406) (Boshen) - 0b4e158 parser: Reserve cap `2` for sequence expressions vec (#22374) (camc314) - 5f3bdd0 codegen: Add `#[inline]` to `code`, `code_len` (#22373) (camc314) Co-authored-by: overlookmotel <557937+overlookmotel@users.noreply.github.com>
No description provided.