Non-destructuring default parameters
This commit is contained in:
committed by
Richard van Velzen
parent
7f3dbb6df7
commit
084437bc6d
17
lib/ast.js
17
lib/ast.js
@@ -422,6 +422,13 @@ var AST_ArrowParametersOrSeq = DEFNODE("ArrowParametersOrSeq", "expressions", {
|
|||||||
is_array: true,
|
is_array: true,
|
||||||
names: ex.elements.map(to_fun_args)
|
names: ex.elements.map(to_fun_args)
|
||||||
});
|
});
|
||||||
|
} else if (ex instanceof AST_Assign && ex.left instanceof AST_Symbol) {
|
||||||
|
return new AST_SymbolFunarg({
|
||||||
|
name: ex.left.name,
|
||||||
|
default: ex.right,
|
||||||
|
start: ex.start,
|
||||||
|
end: ex.end
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
croak("Invalid function parameter", ex.start.line, ex.start.col);
|
croak("Invalid function parameter", ex.start.line, ex.start.col);
|
||||||
}
|
}
|
||||||
@@ -1026,8 +1033,16 @@ var AST_SymbolConst = DEFNODE("SymbolConst", null, {
|
|||||||
$documentation: "A constant declaration"
|
$documentation: "A constant declaration"
|
||||||
}, AST_SymbolDeclaration);
|
}, AST_SymbolDeclaration);
|
||||||
|
|
||||||
var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, {
|
var AST_SymbolFunarg = DEFNODE("SymbolFunarg", "default", {
|
||||||
$documentation: "Symbol naming a function argument",
|
$documentation: "Symbol naming a function argument",
|
||||||
|
$propdoc: {
|
||||||
|
default: "[AST_Expression] The default for this parameter. For example, `= 6`"
|
||||||
|
},
|
||||||
|
_walk: function (visitor) {
|
||||||
|
return visitor._visit(this, function() {
|
||||||
|
if (this.default) this.default._walk(visitor);
|
||||||
|
});
|
||||||
|
}
|
||||||
}, AST_SymbolVar);
|
}, AST_SymbolVar);
|
||||||
|
|
||||||
var AST_SymbolDefun = DEFNODE("SymbolDefun", null, {
|
var AST_SymbolDefun = DEFNODE("SymbolDefun", null, {
|
||||||
|
|||||||
@@ -1275,9 +1275,21 @@ function OutputStream(options) {
|
|||||||
output.space();
|
output.space();
|
||||||
self.value.print(output);
|
self.value.print(output);
|
||||||
});
|
});
|
||||||
DEFPRINT(AST_Symbol, function(self, output){
|
AST_Symbol.DEFMETHOD("_do_print", function(output){
|
||||||
var def = self.definition();
|
var def = this.definition();
|
||||||
output.print_name(def ? def.mangled_name || def.name : self.name);
|
output.print_name(def ? def.mangled_name || def.name : this.name);
|
||||||
|
});
|
||||||
|
DEFPRINT(AST_Symbol, function (self, output) {
|
||||||
|
self._do_print(output);
|
||||||
|
});
|
||||||
|
DEFPRINT(AST_SymbolFunarg, function(self, output){
|
||||||
|
self._do_print(output);
|
||||||
|
if (self.default) {
|
||||||
|
output.space();
|
||||||
|
output.print('=');
|
||||||
|
output.space();
|
||||||
|
self.default.print(output)
|
||||||
|
}
|
||||||
});
|
});
|
||||||
DEFPRINT(AST_ObjectSymbol, function(self, output){
|
DEFPRINT(AST_ObjectSymbol, function(self, output){
|
||||||
var name = self.mangled_key || self.symbol.name;
|
var name = self.mangled_key || self.symbol.name;
|
||||||
|
|||||||
@@ -132,6 +132,14 @@ destructuring_arguments: {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default_arguments: {
|
||||||
|
input: {
|
||||||
|
function x(a = 6) { }
|
||||||
|
function x(a = (6 + 5)) { }
|
||||||
|
}
|
||||||
|
expect_exact: "function x(a=6){}function x(a=6+5){}"
|
||||||
|
}
|
||||||
|
|
||||||
concise_methods: {
|
concise_methods: {
|
||||||
input: {
|
input: {
|
||||||
x = {
|
x = {
|
||||||
|
|||||||
Reference in New Issue
Block a user