Fix #931: Create arrow functions in maybe_assign so that they can be used in assignments

This commit is contained in:
Fábio Santos
2016-02-09 00:02:23 +00:00
parent 2827fa8699
commit d7ec2ecc12
2 changed files with 31 additions and 1 deletions

View File

@@ -1032,7 +1032,12 @@ function parse($TEXT, options) {
var arrow_function = function(args) { var arrow_function = function(args) {
expect_token("arrow", "=>"); expect_token("arrow", "=>");
var argnames = args.as_params(croak); var argnames;
if (typeof args.length === 'number') {
argnames = args;
} else {
argnames = args.as_params(croak);
}
var body = is("punc", "{") ? var body = is("punc", "{") ?
_function_body(true) : _function_body(true) :
@@ -1789,6 +1794,12 @@ function parse($TEXT, options) {
var maybe_assign = function(no_in) { var maybe_assign = function(no_in) {
var start = S.token; var start = S.token;
if (start.value == "(" && peek().value == ")") {
next();
next();
return arrow_function([]);
}
var left = maybe_conditional(no_in); var left = maybe_conditional(no_in);
var val = S.token.value; var val = S.token.value;
@@ -1805,6 +1816,14 @@ function parse($TEXT, options) {
} }
croak("Invalid assignment"); croak("Invalid assignment");
} }
if (is("arrow")) {
left = new AST_SymbolFunarg({
name: left.name,
start: left.start,
end: left.end,
});
return arrow_function([left])
}
return left; return left;
}; };

View File

@@ -36,6 +36,17 @@ regression_arrow_functions_and_hoist: {
expect_exact: "a=>b;" expect_exact: "a=>b;"
} }
regression_assign_arrow_functions: {
input: {
oninstall = e => false;
oninstall = () => false;
}
expect: {
oninstall=e=>false;
oninstall=()=>false;
}
}
computed_property_names: { computed_property_names: {
input: { input: {
obj({ ["x" + "x"]: 6 }); obj({ ["x" + "x"]: 6 });