diff --git a/crates/swc/tests/fixture/issues-7xxx/7622/input/.swcrc b/crates/swc/tests/fixture/issues-7xxx/7622/input/.swcrc new file mode 100644 index 000000000000..887e89d7affc --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7622/input/.swcrc @@ -0,0 +1,19 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript", + "tsx": false + }, + "target": "es5", + "loose": false, + "minify": { + "compress": false, + "mangle": false + } + }, + "module": { + "type": "es6" + }, + "minify": false, + "isModule": true +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-7xxx/7622/input/1.js b/crates/swc/tests/fixture/issues-7xxx/7622/input/1.js new file mode 100644 index 000000000000..64a31c98928c --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7622/input/1.js @@ -0,0 +1,11 @@ +async function asyncWhile() { + while (true) { + return {}; + } +} + +function* generatorWhile() { + while (true) { + return {}; + } +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-7xxx/7622/output/1.js b/crates/swc/tests/fixture/issues-7xxx/7622/output/1.js new file mode 100644 index 000000000000..a56974431398 --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7622/output/1.js @@ -0,0 +1,34 @@ +import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator"; +import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator"; +function asyncWhile() { + return _asyncWhile.apply(this, arguments); +} +function _asyncWhile() { + _asyncWhile = _async_to_generator(function() { + return _ts_generator(this, function(_state) { + while(true){ + return [ + 2, + {} + ]; + } + return [ + 2 + ]; + }); + }); + return _asyncWhile.apply(this, arguments); +} +function generatorWhile() { + return _ts_generator(this, function(_state) { + while(true){ + return [ + 2, + {} + ]; + } + return [ + 2 + ]; + }); +} diff --git a/crates/swc_ecma_transforms_compat/src/es2015/generator.rs b/crates/swc_ecma_transforms_compat/src/es2015/generator.rs index fa64fdc7721b..a6da0916a0ed 100644 --- a/crates/swc_ecma_transforms_compat/src/es2015/generator.rs +++ b/crates/swc_ecma_transforms_compat/src/es2015/generator.rs @@ -1646,6 +1646,8 @@ impl Generator { self.emit_break(loop_label, None); self.end_loop_block(); } else { + node.visit_mut_children_with(self); + self.emit_stmt(Stmt::While(node)); } }