diff --git a/lib/parse.js b/lib/parse.js index 072e7fb4..0a6072af 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -1032,7 +1032,12 @@ function parse($TEXT, options) { var arrow_function = function(args) { 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", "{") ? _function_body(true) : @@ -1789,6 +1794,12 @@ function parse($TEXT, options) { var maybe_assign = function(no_in) { var start = S.token; + if (start.value == "(" && peek().value == ")") { + next(); + next(); + return arrow_function([]); + } + var left = maybe_conditional(no_in); var val = S.token.value; @@ -1805,6 +1816,14 @@ function parse($TEXT, options) { } 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; }; diff --git a/test/compress/harmony.js b/test/compress/harmony.js index c3f48b42..622e00a0 100644 --- a/test/compress/harmony.js +++ b/test/compress/harmony.js @@ -36,6 +36,17 @@ regression_arrow_functions_and_hoist: { expect_exact: "a=>b;" } +regression_assign_arrow_functions: { + input: { + oninstall = e => false; + oninstall = () => false; + } + expect: { + oninstall=e=>false; + oninstall=()=>false; + } +} + computed_property_names: { input: { obj({ ["x" + "x"]: 6 });