From 166f1138bcd2bf1e857039cf970f52544ed47cc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Santos?= Date: Sun, 22 Nov 2015 17:40:05 +0000 Subject: [PATCH] Non-destructuring default parameters --- lib/ast.js | 19 ++++++++++++++++--- lib/output.js | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/ast.js b/lib/ast.js index 5f34dc5b..ae10abdf 100644 --- a/lib/ast.js +++ b/lib/ast.js @@ -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, { diff --git a/lib/output.js b/lib/output.js index 0cb387ce..066c1432 100644 --- a/lib/output.js +++ b/lib/output.js @@ -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();