Default values inside destructurings
This commit is contained in:
committed by
Richard van Velzen
parent
7a8cffd631
commit
028ff64e9a
24
lib/parse.js
24
lib/parse.js
@@ -1255,8 +1255,12 @@ function parse($TEXT, options) {
|
||||
}));
|
||||
next();
|
||||
} else if (is("name")) {
|
||||
children.push(_make_symbol(sym_type));
|
||||
next();
|
||||
children.push(new (sym_type)({
|
||||
name : String(S.token.value),
|
||||
start : S.token,
|
||||
default: (next(), is("operator", "=")) ? (next(), expression(false)) : undefined,
|
||||
end : S.token
|
||||
}));
|
||||
} else {
|
||||
children.push(expression());
|
||||
}
|
||||
@@ -1483,7 +1487,21 @@ function parse($TEXT, options) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!is("punc", ":")) {
|
||||
if (is("operator", "=")) {
|
||||
next();
|
||||
a.push(new AST_Assign({
|
||||
start: start,
|
||||
// Symbol class doesn't matter. This is only meant to carry the symbol name into .as_params() since this is not normally valid.
|
||||
left: new AST_SymbolRef({
|
||||
start: start,
|
||||
end: start,
|
||||
name: name
|
||||
}),
|
||||
operator: "=",
|
||||
right: expression(false),
|
||||
end: prev()
|
||||
}));
|
||||
} else if (!is("punc", ":")) {
|
||||
// It's one of those object destructurings, the value is its own name
|
||||
a.push(new AST_ObjectSymbol({
|
||||
start: start,
|
||||
|
||||
@@ -141,6 +141,16 @@ default_arguments: {
|
||||
expect_exact: "function x(a=6){}function x(a=6+5){}function x({foo}={},[bar]=[1]){}"
|
||||
}
|
||||
|
||||
default_values_in_destructurings: {
|
||||
input: {
|
||||
function x({a=(4), b}) {}
|
||||
function x([b, c=(12)]) {}
|
||||
var { x = (6), y } = x;
|
||||
var [ x, y = (6) ] = x;
|
||||
}
|
||||
expect_exact: "function x({a=4,b}){}function x([b,c=12]){}var{x=6,y}=x;var[x,y=6]=x;"
|
||||
}
|
||||
|
||||
concise_methods: {
|
||||
input: {
|
||||
x = {
|
||||
|
||||
Reference in New Issue
Block a user