| function testSyntax(script) { |
| try { |
| eval(script); |
| } catch (error) { |
| if (error instanceof SyntaxError) |
| throw new Error("Bad error: " + String(error)); |
| } |
| } |
| |
| function testSyntaxError(script, message) { |
| var error = null; |
| try { |
| eval(script); |
| } catch (e) { |
| error = e; |
| } |
| if (!error) |
| throw new Error("Expected syntax error not thrown"); |
| |
| if (String(error) !== message) |
| throw new Error("Bad error: " + String(error)); |
| } |
| |
| { |
| let tokens = [ |
| '-', |
| '+', |
| '~', |
| '!', |
| 'typeof', |
| 'void', |
| 'delete', |
| ]; |
| |
| for (let token of tokens) { |
| testSyntaxError(` |
| function pow(a, b) |
| { |
| return ${token} a ** b; |
| } |
| `, `SyntaxError: Unexpected token '**'. Ambiguous unary expression in the left hand side of the exponentiation expression; parentheses must be used to disambiguate the expression.`); |
| } |
| } |
| |
| { |
| let tokens = [ |
| '-', |
| '+', |
| '~', |
| '!', |
| 'typeof', |
| 'void', |
| 'delete', |
| ]; |
| |
| for (let token of tokens) { |
| testSyntax(` |
| function pow(a, b) |
| { |
| return (${token} a) ** b; |
| } |
| `); |
| } |
| } |
| |
| { |
| let tokens = [ |
| '++', |
| '--', |
| ]; |
| |
| for (let token of tokens) { |
| testSyntax(` |
| function pow(a, b) |
| { |
| return ${token} a ** b; |
| } |
| `); |
| } |
| } |
| |
| { |
| let tokens = [ |
| '++', |
| '--', |
| ]; |
| |
| for (let token of tokens) { |
| testSyntax(` |
| function pow(a, b) |
| { |
| return a ${token} ** b; |
| } |
| `); |
| } |
| } |