improve parse errors for destructuring spread elements
This commit is contained in:
parent
6f52e39ad3
commit
38e33407df
|
|
@ -1522,7 +1522,7 @@ function parse($TEXT, options) {
|
|||
}
|
||||
if (is_expand) {
|
||||
if (!is("punc", "]")) {
|
||||
unexpected(); // Must be last element
|
||||
token_error(S.token, "Rest element must be last element");
|
||||
}
|
||||
elements[elements.length - 1] = new AST_Expansion({
|
||||
start: expand_token,
|
||||
|
|
@ -1606,7 +1606,7 @@ function parse($TEXT, options) {
|
|||
}
|
||||
if (is_expand) {
|
||||
if (!is("punc", "}")) {
|
||||
unexpected(); // Must be last element
|
||||
token_error(S.token, "Rest element must be last element");
|
||||
}
|
||||
}
|
||||
else if (is("operator", "=")) {
|
||||
|
|
|
|||
|
|
@ -253,13 +253,19 @@ describe("Left-hand side expressions", function () {
|
|||
// Multiple spreads are not allowed in destructuring array
|
||||
expect("[...a, ...b] = [1, 2, 3, 4]", "Spread must the be last element in destructuring array");
|
||||
|
||||
// Array spread must be last in destructuring declaration
|
||||
expect("let [ ...x, a ] = o;", "Rest element must be last element");
|
||||
|
||||
// Only one spread per destructuring array declaration
|
||||
expect("let [ a, ...x, ...y ] = o;", "Rest element must be last element");
|
||||
|
||||
// Spread in block should not be allowed
|
||||
expect("{...a} = foo", "Unexpected token: expand (...)");
|
||||
|
||||
// Object spread must be last in destructuring declaration
|
||||
expect("let { ...x, a } = o;", "Unexpected token: punc (,)");
|
||||
expect("let { ...x, a } = o;", "Rest element must be last element");
|
||||
|
||||
// Only one spread per destructuring declaration
|
||||
expect("let { a, ...x, ...y } = o;", "Unexpected token: punc (,)");
|
||||
expect("let { a, ...x, ...y } = o;", "Rest element must be last element");
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user