Set correct async/generator in IIFE for params (#11346)
* Set correct async/generator in IIFE for params * Reject in async params * Skip async test on node 6 (it doesn't support async fns)
This commit is contained in:
parent
71e7a7b1e0
commit
c8a8be7221
@ -181,6 +181,13 @@ export default function convertFunctionParams(path, loose) {
|
|||||||
const bodyPath = path.get("body.body");
|
const bodyPath = path.get("body.body");
|
||||||
const arrowPath = bodyPath[bodyPath.length - 1].get("argument.callee");
|
const arrowPath = bodyPath[bodyPath.length - 1].get("argument.callee");
|
||||||
arrowPath.arrowFunctionToExpression();
|
arrowPath.arrowFunctionToExpression();
|
||||||
|
|
||||||
|
arrowPath.node.generator = path.node.generator;
|
||||||
|
arrowPath.node.async = path.node.async;
|
||||||
|
|
||||||
|
// We don't reset "async" because if the default value of a parameter
|
||||||
|
// throws, it must reject asynchronously.
|
||||||
|
path.node.generator = false;
|
||||||
} else {
|
} else {
|
||||||
path.get("body").unshiftContainer("body", body);
|
path.get("body").unshiftContainer("body", body);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,13 @@
|
|||||||
|
const err = new Error();
|
||||||
|
|
||||||
|
async function f(a = (() => { throw err })()) {
|
||||||
|
throw 1;
|
||||||
|
var a = await a;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (async () => {
|
||||||
|
let p;
|
||||||
|
expect(() => { p = f() }).not.toThrow();
|
||||||
|
await expect(p).rejects.toThrow(err);
|
||||||
|
})();
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"transform-parameters"
|
||||||
|
],
|
||||||
|
"parserOpts": {
|
||||||
|
"allowReturnOutsideFunction": true
|
||||||
|
},
|
||||||
|
"minNodeVersion": "8.0.0"
|
||||||
|
}
|
||||||
14
packages/babel-plugin-transform-parameters/test/fixtures/regression/scope-gen-async/input.js
vendored
Normal file
14
packages/babel-plugin-transform-parameters/test/fixtures/regression/scope-gen-async/input.js
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
function* f(a = 1) {
|
||||||
|
var a = yield a;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function g(a = 1) {
|
||||||
|
var a = await a;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function* h(a = 1) {
|
||||||
|
var a = await (yield a);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"transform-parameters"
|
||||||
|
]
|
||||||
|
}
|
||||||
23
packages/babel-plugin-transform-parameters/test/fixtures/regression/scope-gen-async/output.js
vendored
Normal file
23
packages/babel-plugin-transform-parameters/test/fixtures/regression/scope-gen-async/output.js
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
function f() {
|
||||||
|
let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
||||||
|
return function* (a) {
|
||||||
|
var a = yield a;
|
||||||
|
return a;
|
||||||
|
}(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function g() {
|
||||||
|
let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
||||||
|
return async function (a) {
|
||||||
|
var a = await a;
|
||||||
|
return a;
|
||||||
|
}(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function h() {
|
||||||
|
let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
||||||
|
return async function* (a) {
|
||||||
|
var a = await (yield a);
|
||||||
|
return a;
|
||||||
|
}(a);
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user