From f0d490d6b51c23e51d7fbc3fd63d2cbd234a4e79 Mon Sep 17 00:00:00 2001 From: Zdenko Vujasinovic Date: Sat, 1 Jul 2017 14:27:07 +0200 Subject: [PATCH] fix #4577; renamed destructured parameters with same default value --- lib/coffeescript/nodes.js | 4 +++- src/nodes.coffee | 4 +++- test/functions.coffee | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/coffeescript/nodes.js b/lib/coffeescript/nodes.js index c1e9b1d2e8..d44320e5f7 100644 --- a/lib/coffeescript/nodes.js +++ b/lib/coffeescript/nodes.js @@ -3282,9 +3282,11 @@ } if (obj instanceof Assign) { if (obj.value instanceof Assign) { + obj = obj.value.variable; + } else { obj = obj.value; } - this.eachName(iterator, obj.value.unwrap()); + this.eachName(iterator, obj.unwrap()); } else if (obj instanceof Splat) { node = obj.name.unwrap(); iterator(node.value, node, this); diff --git a/src/nodes.coffee b/src/nodes.coffee index ccc23906b4..24fd16ebf0 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -2492,8 +2492,10 @@ exports.Param = class Param extends Base if obj instanceof Assign # ... possibly with a default value if obj.value instanceof Assign + obj = obj.value.variable + else obj = obj.value - @eachName iterator, obj.value.unwrap() + @eachName iterator, obj.unwrap() # * splats within destructured parameters `[xs...]` else if obj instanceof Splat node = obj.name.unwrap() diff --git a/test/functions.coffee b/test/functions.coffee index 2b8f526a1e..c42ca922cb 100644 --- a/test/functions.coffee +++ b/test/functions.coffee @@ -245,6 +245,12 @@ test "rest element destructuring in function definition", -> deepEqual [1, {b:2}], f() deepEqual [2, {}], f {a:2} deepEqual [3, {c:5}], f {a:3, c:5} + + f = ({ a: aa = 0, b: bb = 0 }) -> [aa, bb] + deepEqual [0, 0], f {} + deepEqual [0, 42], f {b:42} + deepEqual [42, 0], f {a:42} + deepEqual [42, 43], f {a:42, b:43} test "#4005: `([a = {}]..., b) ->` weirdness", -> fn = ([a = {}]..., b) -> [a, b]