[ES6] support async arrow functions (#2153)

fixes #2102
This commit is contained in:
Alex Lam S.L
2017-06-24 05:26:35 +08:00
committed by GitHub
parent 137e4c4753
commit 7b95b63ca1
6 changed files with 73 additions and 58 deletions

View File

@@ -202,3 +202,11 @@ arrow_unused_toplevel: {
expect_stdout: [ "0", "1", "2", "9" ]
node_version: ">=6"
}
no_leading_parentheses: {
input: {
(x,y) => x(y);
async (x,y) => await x(y);
}
expect_exact: "(x,y)=>x(y);async(x,y)=>await x(y);"
}

View File

@@ -230,16 +230,26 @@ async_shorthand_property: {
node_version: ">=4"
}
/* FIXME: add test when supported by parser
async_arrow: {
input: {
let a1 = async x => await foo(x);
let a2 = async () => await bar();
let a3 = async (x) => await baz(x);
let a4 = async (x, y) => { await far(x, y); }
let a5 = async ({x = [1], y: z = 2}) => { await wow(x, y); }
let a5 = async ({x = [1], y: z = 2}) => { await wow(x, z); }
}
expect: {
let a1 = async x => await foo(x);
let a2 = async () => await bar();
let a3 = async (x) => await baz(x);
let a4 = async (x, y) => { await far(x, y); }
let a5 = async ({x = [1], y: z = 2}) => { await wow(x, z); }
}
}
*/
async_arrow_wait: {
input: {
var a = async (x, y) => await x(y);
}
expect_exact: "var a=async(x,y)=>await x(y);"
}

View File

@@ -16,9 +16,12 @@ typeof_arrow_functions: {
evaluate: true
}
input: {
var foo = typeof (x) => null;
var foo = typeof (x => null);
console.log(foo);
}
expect_exact: "var foo=\"function\";"
expect_exact: "var foo=\"function\";console.log(foo);"
expect_stdout: "function"
node_version: ">=4"
}
classes: {

View File

@@ -62,23 +62,20 @@ describe("Arrow functions", function() {
}
});
it("Should not accept arrow functions in the middle or end of an expression", function() {
var tests = [
[
"0 + x => 0",
"0 + async x => 0",
"typeof x => 0",
"0 + x => 0"
];
var test = function(code) {
return function() {
"typeof async x => 0",
"typeof (x) => null",
"typeof async (x) => null",
].forEach(function(code) {
assert.throws(function() {
uglify.parse(code);
}
}
var error = function(e) {
return e instanceof uglify.JS_Parse_Error &&
e.message === "Unexpected token: arrow (=>)";
}
for (var i = 0; i < tests.length; i++) {
assert.throws(test(tests[i]), error);
}
}, function(e) {
return e instanceof uglify.JS_Parse_Error && /^Unexpected /.test(e.message);
}, code);
});
});
it("Should parse a function containing default assignment correctly", function() {