tor-browser

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

arrow-rest.js (2144B)


      1 // The parser should throw SyntaxError immediately if it finds "..." in a
      2 // context where it's not allowed.
      3 
      4 function testThrow(code, column) {
      5  var caught = false;
      6  try {
      7    eval(code);
      8  } catch (e) {
      9    caught = true;
     10    assertEq(e.columnNumber, column);
     11  }
     12  assertEq(caught, true,
     13           "failed to throw evaluating <" + code + ">");
     14 }
     15 
     16 // expression statement
     17 
     18 testThrow(`
     19 ...a)=>
     20 `, 1);
     21 
     22 // default parameter
     23 
     24 testThrow(`
     25 function f(x=...a) =>
     26 `, 14);
     27 
     28 // rest parameter
     29 
     30 testThrow(`
     31 function f(... ...a) =>
     32 `, 16);
     33 
     34 // destructuring parameter
     35 
     36 testThrow(`
     37 ([... ...a)=>
     38 `, 7);
     39 
     40 testThrow(`
     41 ({...a)=>
     42 `, 7);
     43 
     44 testThrow(`
     45 function f([... ...a)=>
     46 `, 17);
     47 
     48 testThrow(`
     49 function f({...a)=>
     50 `, 17);
     51 
     52 // arrow
     53 
     54 testThrow(`
     55 x => ...a)=>
     56 `, 6);
     57 
     58 // template literal
     59 
     60 testThrow("`${ ...a)=>}`", 5);
     61 
     62 // destructing assignment
     63 
     64 testThrow(`
     65 var [... ...a)=>
     66 `, 10);
     67 
     68 testThrow(`
     69 var {...a)=>
     70 `, 10);
     71 
     72 // initializer
     73 
     74 testThrow(`
     75 var [a] = ...a)=>
     76 `, 11);
     77 
     78 testThrow(`
     79 var {a:a} = ...a)=>
     80 `, 13);
     81 
     82 testThrow(`
     83 var a = ...a)=>
     84 `, 9);
     85 
     86 // if statement
     87 
     88 testThrow(`
     89 if (...a) =>
     90 `, 5);
     91 
     92 // for statement
     93 
     94 testThrow(`
     95 for (...a)=>
     96 `, 6);
     97 
     98 testThrow(`
     99 for (let a in ...a)=>
    100 `, 15);
    101 
    102 testThrow(`
    103 for (let a of ...a)=>
    104 `, 15);
    105 
    106 testThrow(`
    107 for (; ...a)=>
    108 `, 8);
    109 
    110 testThrow(`
    111 for (;; ...a)=>
    112 `, 9);
    113 
    114 // case
    115 
    116 testThrow(`
    117 switch (x) { case ...a)=>
    118 `, 19);
    119 
    120 // return statement
    121 
    122 testThrow(`
    123 function f(x) { return ...a)=>
    124 `, 24);
    125 
    126 // yield expression
    127 
    128 testThrow(`
    129 function* f(x) { yield ...a)=>
    130 `, 24);
    131 
    132 // throw statement
    133 
    134 testThrow(`
    135 throw ...a) =>
    136 `, 7);
    137 
    138 // class
    139 
    140 testThrow(`
    141 class A extends ...a) =>
    142 `, 17);
    143 
    144 // conditional expression
    145 
    146 testThrow(`
    147 1 ? ...a) =>
    148 `, 5);
    149 
    150 testThrow(`
    151 1 ? 2 : ...a) =>
    152 `, 9);
    153 
    154 // unary operators
    155 
    156 testThrow(`
    157 void ...a) =>
    158 `, 6);
    159 
    160 testThrow(`
    161 typeof ...a) =>
    162 `, 8);
    163 
    164 testThrow(`
    165 ++ ...a) =>
    166 `, 4);
    167 
    168 testThrow(`
    169 delete ...a) =>
    170 `, 8);
    171 
    172 // new
    173 
    174 testThrow(`
    175 new ...a) =>
    176 `, 5);
    177 
    178 // member expression
    179 
    180 testThrow(`
    181 x[...a) =>
    182 `, 3);
    183 
    184 // array literal
    185 
    186 testThrow(`
    187 [... ...a) =>
    188 `, 6);
    189 
    190 // object literal
    191 
    192 testThrow(`
    193 ({[...a) =>
    194 `, 4);
    195 
    196 testThrow(`
    197 ({x: ...a) =>
    198 `, 6);
    199 
    200 // assignment
    201 
    202 testThrow(`
    203 x = ...a) =>
    204 `, 5);