Skip to content

Commit 16f782b

Browse files
author
Zdenko Vujasinovic
committed
Add test based on jashkenas#1349
1 parent a302e53 commit 16f782b

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

lib/coffee-script/nodes.js

Lines changed: 11 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/nodes.coffee

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1827,7 +1827,15 @@ exports.Splat = class Splat extends Base
18271827
if not (@name instanceof Value) or
18281828
(not (@name.base instanceof Parens) and @propHasSoak())
18291829
@name = new Value new Parens @name
1830-
@name.compileToFragments o
1830+
# We need to replace `void 0` with `[]` in compiled fragments.
1831+
# Example: [a?.b...]
1832+
# slice.call((typeof a !== "undefined" && a !== null ? a.b : []));
1833+
fragments = @name.compileToFragments o
1834+
for fragment, ix in fragments
1835+
fragments[ix].code = "[]" if fragment.code == "void 0" and fragment.type == "If"
1836+
fragments
1837+
else
1838+
@name.compileToFragments o
18311839

18321840
unwrap: -> @name
18331841

test/arrays.coffee

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ test "#4260: splat after existential operator soak", ->
7272
arrayEq [a?.b...], [3]
7373
arrayEq [c?.b...], []
7474

75+
test "#1349: trailing if after splat", ->
76+
a = [3]
77+
b = yes
78+
c = null
79+
arrayEq [a if b...], [3]
80+
arrayEq [a if c...], []
81+
7582
test "#1274: `[] = a()` compiles to `false` instead of `a()`", ->
7683
a = false
7784
fn = -> a = true

0 commit comments

Comments
 (0)