Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: test/mjsunit/harmony/arrow-functions-parsing.js

Issue 160073006: Implement handling of arrow functions in the parser (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Extra parens in parameter lists now recognized, no longer segfaults on "()" Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 returnsArrowFun2 = (x, y) => (u, v) => x*u + y*v;
28 var objectLiteralResult = ({ value: 42 });
marja 2014/05/26 12:46:06 Pls test that these yield the expected results, to
29
30 var yIsUndefined = x => x, y;
31 assertEquals(y, undefined);
32
33 // This is a valid arrow function literal which is invoked right away
34 assertEquals((x => x + 1)(1), 2);
35
36 // Parsing arrow functions introduces a return in ParseAssignmentExpression
37 // when a closing parenthesis is found. This tests that errors are still
38 // raised when closing them incorrectly.
39 assertThrows(");", SyntaxError);
marja 2014/05/26 12:46:06 You can move these "parsing should fail" cases to
40 assertThrows(") => 0;", SyntaxError);
41
42 assertThrows("=> 0;", SyntaxError); // Empty param list n ot optional
43 assertThrows("var f = =>;", SyntaxError); // No arguments or bo dy
44 assertThrows("var f = () =>;", SyntaxError); // No body
45 assertThrows("var f = => {};", SyntaxError); // No argument list o r single argument
46 assertThrows("var f = ) => {};", SyntaxError); // No opening paren i n parameter list
47 assertThrows("var f = , => {};", SyntaxError); // Comma without open ing parens
48 assertThrows("var f = (,) => {};", SyntaxError); // Just one comma in parameter list
49 assertThrows("var f = x, y => {};", SyntaxError); // Multiple args with out parens
50 assertThrows("var f = return => {};", SyntaxError); // Argument name is r eserved
51 assertThrows("var f = (a,if) => {};", SyntaxError); // Argument name in l ist is reserved
52 assertThrows("var f = (a * b) => {};", SyntaxError); // Comma must be the binop in between parameters
53 assertThrows("var f = () => {'value': 42};", SyntaxError); // Object literal mus t be parenthesized
54
55 // Parameter lists with extra parens should be recognized as errors.
56 assertThrows("(()) => 0;", SyntaxError);
57 assertThrows("((x)) => 0;", SyntaxError);
58 assertThrows("((x, y)) => 0;", SyntaxError);
59 assertThrows("(x, (y)) => 0;", SyntaxError);
marja 2014/05/26 12:46:06 You should add tests for different (legal and ille
OLDNEW
« src/preparser.h ('K') | « src/v8natives.js ('k') | tools/generate-runtime-tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698