syntax-arrow.js (4822B)
1 var BUGNUMBER = 1185106; 2 var summary = "async arrow function syntax"; 3 4 print(BUGNUMBER + ": " + summary); 5 6 if (typeof Reflect !== "undefined" && Reflect.parse) { 7 // Parameters. 8 Reflect.parse("async () => 1"); 9 Reflect.parse("async a => 1"); 10 Reflect.parse("async (a) => 1"); 11 Reflect.parse("async async => 1"); 12 Reflect.parse("async (async) => 1"); 13 Reflect.parse("async ([a]) => 1"); 14 Reflect.parse("async ([a, b]) => 1"); 15 Reflect.parse("async ({a}) => 1"); 16 Reflect.parse("async ({a, b}) => 1"); 17 18 assertThrowsInstanceOf(() => Reflect.parse("async await => 1"), SyntaxError); 19 assertThrowsInstanceOf(() => Reflect.parse("async (await) => 1"), SyntaxError); 20 assertThrowsInstanceOf(() => Reflect.parse("async ([await]) => 1"), SyntaxError); 21 assertThrowsInstanceOf(() => Reflect.parse("async ({await}) => 1"), SyntaxError); 22 23 assertThrowsInstanceOf(() => Reflect.parse("async (a=await) => 1"), SyntaxError); 24 assertThrowsInstanceOf(() => Reflect.parse("async ([a=await]) => 1"), SyntaxError); 25 assertThrowsInstanceOf(() => Reflect.parse("async ({a=await}) => 1"), SyntaxError); 26 27 assertThrowsInstanceOf(() => Reflect.parse("async (a=await 1) => 1"), SyntaxError); 28 assertThrowsInstanceOf(() => Reflect.parse("async ([a=await 1]) => 1"), SyntaxError); 29 assertThrowsInstanceOf(() => Reflect.parse("async ({a=await 1}) => 1"), SyntaxError); 30 31 assertThrowsInstanceOf(() => Reflect.parse("async [a] => 1"), SyntaxError); 32 assertThrowsInstanceOf(() => Reflect.parse("async [a, b] => 1"), SyntaxError); 33 assertThrowsInstanceOf(() => Reflect.parse("async {a} => 1"), SyntaxError); 34 assertThrowsInstanceOf(() => Reflect.parse("async {a: b} => 1"), SyntaxError); 35 36 // Expression body. 37 Reflect.parse("async a => a == b"); 38 39 // Expression body with nested async function. 40 Reflect.parse("async a => async"); 41 Reflect.parse("async a => async b => c"); 42 Reflect.parse("async a => async function() {}"); 43 Reflect.parse("async a => async function b() {}"); 44 45 assertThrowsInstanceOf(() => Reflect.parse("async a => async b"), SyntaxError); 46 assertThrowsInstanceOf(() => Reflect.parse("async a => async function"), SyntaxError); 47 assertThrowsInstanceOf(() => Reflect.parse("async a => async function()"), SyntaxError); 48 49 // Expression body with `await`. 50 Reflect.parse("async a => await 1"); 51 Reflect.parse("async a => await await 1"); 52 Reflect.parse("async a => await await await 1"); 53 54 assertThrowsInstanceOf(() => Reflect.parse("async a => await"), SyntaxError); 55 assertThrowsInstanceOf(() => Reflect.parse("async a => await await"), SyntaxError); 56 57 // `await` is Unary Expression and it cannot have `async` function as an 58 // operand. 59 assertThrowsInstanceOf(() => Reflect.parse("async a => await async X => Y"), SyntaxError); 60 Reflect.parse("async a => await (async X => Y)"); 61 // But it can have `async` identifier as an operand. 62 Reflect.parse("async async => await async"); 63 64 // Block body. 65 Reflect.parse("async X => {yield}"); 66 67 // `yield` handling. 68 Reflect.parse("async X => yield"); 69 Reflect.parse("async yield => X"); 70 Reflect.parse("async yield => yield"); 71 Reflect.parse("async X => {yield}"); 72 73 Reflect.parse("async X => {yield}"); 74 Reflect.parse("async yield => {X}"); 75 Reflect.parse("async yield => {yield}"); 76 Reflect.parse("function* g() { async X => yield }"); 77 78 assertThrowsInstanceOf(() => Reflect.parse("'use strict'; async yield => X"), SyntaxError); 79 assertThrowsInstanceOf(() => Reflect.parse("'use strict'; async (yield) => X"), SyntaxError); 80 assertThrowsInstanceOf(() => Reflect.parse("'use strict'; async X => yield"), SyntaxError); 81 assertThrowsInstanceOf(() => Reflect.parse("'use strict'; async X => {yield}"), SyntaxError); 82 83 assertThrowsInstanceOf(() => Reflect.parse("function* g() { async yield => X }"), SyntaxError); 84 assertThrowsInstanceOf(() => Reflect.parse("function* g() { async (yield) => X }"), SyntaxError); 85 assertThrowsInstanceOf(() => Reflect.parse("function* g() { async ([yield]) => X }"), SyntaxError); 86 assertThrowsInstanceOf(() => Reflect.parse("function* g() { async ({yield}) => X }"), SyntaxError); 87 88 // Not async functions. 89 Reflect.parse("async ()"); 90 Reflect.parse("async (a)"); 91 Reflect.parse("async (async)"); 92 Reflect.parse("async ([a])"); 93 Reflect.parse("async ([a, b])"); 94 Reflect.parse("async ({a})"); 95 Reflect.parse("async ({a, b})"); 96 97 // Async arrow function is assignment expression. 98 Reflect.parse("a ? async () => {1} : b"); 99 Reflect.parse("a ? b : async () => {1}"); 100 assertThrowsInstanceOf(() => Reflect.parse("async () => {1} ? a : b"), SyntaxError); 101 } 102 103 if (typeof reportCompare === "function") 104 reportCompare(true, true);