Merge pull request #2213 from geraldalewis/2211-destructed-splats

Issue #2211 -- splats in destructured parameters
This commit is contained in:
Jeremy Ashkenas 2012-04-23 09:00:22 -07:00
commit 0fada5109a
3 changed files with 12 additions and 0 deletions

View File

@ -1868,6 +1868,8 @@
obj = _ref2[_i];
if (obj instanceof Assign) {
names.push(obj.variable.base.value);
} else if (obj instanceof Splat) {
names.push(obj.name.unwrap().value);
} else if (obj.isArray() || obj.isObject()) {
names.push.apply(names, this.names(obj.base));
} else if (obj["this"]) {

View File

@ -1279,6 +1279,9 @@ exports.Param = class Param extends Base
# * assignments within destructured parameters `{foo:bar}`
if obj instanceof Assign
names.push obj.variable.base.value
# * splats within destructured parameters `[xs...]`
else if obj instanceof Splat
names.push obj.name.unwrap().value
# * destructured parameters within destructured parameters `[{a}]`
else if obj.isArray() or obj.isObject()
names.push @names(obj.base)...

View File

@ -350,3 +350,10 @@ test "#1838: Regression with variable assignment", ->
'dave'
eq name, 'dave'
test '#2211: splats in destructured parameters', ->
doesNotThrow -> CoffeeScript.compile '([a...]) ->'
doesNotThrow -> CoffeeScript.compile '([a...],b) ->'
doesNotThrow -> CoffeeScript.compile '([a...],[b...]) ->'
throws -> CoffeeScript.compile '([a...,[a...]]) ->'
doesNotThrow -> CoffeeScript.compile '([a...,[b...]]) ->'