Default values inside destructurings

This commit is contained in:
Fábio Santos
2015-11-22 19:04:42 +00:00
committed by Richard van Velzen
parent 7a8cffd631
commit 028ff64e9a
2 changed files with 31 additions and 3 deletions

View File

@@ -1255,8 +1255,12 @@ function parse($TEXT, options) {
})); }));
next(); next();
} else if (is("name")) { } else if (is("name")) {
children.push(_make_symbol(sym_type)); children.push(new (sym_type)({
next(); name : String(S.token.value),
start : S.token,
default: (next(), is("operator", "=")) ? (next(), expression(false)) : undefined,
end : S.token
}));
} else { } else {
children.push(expression()); children.push(expression());
} }
@@ -1483,7 +1487,21 @@ function parse($TEXT, options) {
continue; 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 // It's one of those object destructurings, the value is its own name
a.push(new AST_ObjectSymbol({ a.push(new AST_ObjectSymbol({
start: start, start: start,

View File

@@ -141,6 +141,16 @@ default_arguments: {
expect_exact: "function x(a=6){}function x(a=6+5){}function x({foo}={},[bar]=[1]){}" 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: { concise_methods: {
input: { input: {
x = { x = {