tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);