Non-destructuring default parameters

This commit is contained in:
Fábio Santos 2015-11-22 17:40:05 +00:00 committed by Burak Can
parent 6c87242d63
commit 166f1138bc
2 changed files with 17 additions and 4 deletions

View File

@ -425,8 +425,13 @@ var AST_ArrowParametersOrSeq = DEFNODE("ArrowParametersOrSeq", "expressions", {
default: default_seen_above,
names: ex.elements.map(to_fun_args)
});
} else if (ex instanceof AST_Assign) {
return to_fun_args(ex.left, undefined, undefined, ex.right);
} 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 {
croak("Invalid function parameter", ex.start.line, ex.start.col);
}
@ -1037,8 +1042,16 @@ var AST_SymbolConst = DEFNODE("SymbolConst", null, {
$documentation: "A constant declaration"
}, AST_SymbolDeclaration);
var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, {
var AST_SymbolFunarg = DEFNODE("SymbolFunarg", "default", {
$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);
var AST_SymbolDefun = DEFNODE("SymbolDefun", null, {

View File

@ -1292,7 +1292,7 @@ function OutputStream(options) {
DEFPRINT(AST_Symbol, function (self, output) {
self._do_print(output);
});
DEFPRINT(AST_SymbolDeclaration, function(self, output){
DEFPRINT(AST_SymbolFunarg, function(self, output){
self._do_print(output);
if (self.default) {
output.space();