OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 // Flags: --harmony_arrow_functions |
| 6 |
| 7 |
| 8 // Test basic arrow functions syntax. |
| 9 |
| 10 // Bracketed block body. |
| 11 var bracketedEmptyBody = () => {}; |
| 12 var bracketedNoArgs = () => { return 42; }; |
| 13 var bracketedIdent = x => { return x; }; |
| 14 var bracketedIdentParens = (x) => { return x; }; |
| 15 var bracketedAddTwo = (x, y) => { return x + y; }; |
| 16 var bracketedAddThree = (x, y, z) => { return x + y + z; }; |
| 17 |
| 18 // Single expression body. |
| 19 var noArgs = () => 24; |
| 20 var ident = x => x; |
| 21 var square = x => x * x; |
| 22 var addTwo = (x, y) => x + y; |
| 23 var addThree = (x, y, z) => x + y + z; |
| 24 var mutateObject = (x, y) => x.a = y; |
| 25 var objectLiteral = () => ({"value": 42}); |
| 26 var returnsArrowFun = x => y => x + y; |
| 27 var returnsArrowFun = (x, y) => (u, v) => x*u + y*v; |
| 28 |
| 29 var yIsUndefined = x => x, y |
| 30 assertEquals(y, undefined); |
| 31 |
| 32 // Parsing arrow functions introduces a return in ParseAssignmentExpression |
| 33 // when a closing parenthesis is found. This tests that errors are still |
| 34 // raised when closing them incorrectly. |
| 35 assertThrows(");", SyntaxError); |
| 36 assertThrows(") => 0;", SyntaxError); |
| 37 |
| 38 assertThrows("=> 0;", SyntaxError); // Empty param list n
ot optional |
| 39 assertThrows("var f = =>;", SyntaxError); // No arguments or bo
dy |
| 40 assertThrows("var f = () =>;", SyntaxError); // No body |
| 41 assertThrows("var f = => {};", SyntaxError); // No argument list o
r single argument |
| 42 assertThrows("var f = ) => {};", SyntaxError); // No opening paren i
n parameter list |
| 43 assertThrows("var f = x, y => {};", SyntaxError); // Multiple args with
out parens |
| 44 assertThrows("var f = return => {};", SyntaxError); // Argument name is r
eserved |
| 45 assertThrows("var f = (a,if) => {};", SyntaxError); // Argument name in l
ist is reserved |
| 46 assertThrows("var f = () => {'value': 42};", SyntaxError); // Object literal mus
t be parenthesized |
| 47 |
| 48 // TODO(aperez): Those cases do not pass because for now it is not possible |
| 49 // to know whether expressions have multiple parenthesis nesting levels from |
| 50 // the AST. |
| 51 //assertThrows("(()) => 0;", SyntaxError); // Double-paren not
allowed |
| 52 //assertThrows("((x)) => 0;", SyntaxError); // Double-paren not
allowed |
| 53 //assertThrows("((x, y)) => 0;", SyntaxError); // Double-paren not
allowed |
OLD | NEW |