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();