Do not allow arrow functions in the middle of an expression
This commit is contained in:
committed by
Richard van Velzen
parent
c2112d5886
commit
0aa526e72c
18
lib/parse.js
18
lib/parse.js
@@ -2477,6 +2477,16 @@ function parse($TEXT, options) {
|
|||||||
return arrow_function([]);
|
return arrow_function([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is("name") && is_token(peek(), "arrow")) {
|
||||||
|
var param = new AST_SymbolFunarg({
|
||||||
|
name: start.value,
|
||||||
|
start: start,
|
||||||
|
end: start,
|
||||||
|
});
|
||||||
|
next();
|
||||||
|
return arrow_function([param])
|
||||||
|
}
|
||||||
|
|
||||||
var left = maybe_conditional(no_in);
|
var left = maybe_conditional(no_in);
|
||||||
var val = S.token.value;
|
var val = S.token.value;
|
||||||
|
|
||||||
@@ -2493,14 +2503,6 @@ function parse($TEXT, options) {
|
|||||||
}
|
}
|
||||||
croak("SyntaxError: Invalid assignment");
|
croak("SyntaxError: 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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,25 @@ describe("Arrow functions", function() {
|
|||||||
e.message === "SyntaxError: Unexpected newline before arrow (=>)";
|
e.message === "SyntaxError: Unexpected newline before arrow (=>)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < tests.length; i++) {
|
||||||
|
assert.throws(test(tests[i]), error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("Should not accept arrow functions in the middle or end of an expression", function() {
|
||||||
|
var tests = [
|
||||||
|
"typeof x => 0",
|
||||||
|
"0 + x => 0"
|
||||||
|
];
|
||||||
|
var test = function(code) {
|
||||||
|
return function() {
|
||||||
|
uglify.parse(code, {fromString: true});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var error = function(e) {
|
||||||
|
return e instanceof uglify.JS_Parse_Error &&
|
||||||
|
e.message === "SyntaxError: Unexpected token: arrow (=>)";
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0; i < tests.length; i++) {
|
for (var i = 0; i < tests.length; i++) {
|
||||||
assert.throws(test(tests[i]), error);
|
assert.throws(test(tests[i]), error);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user