Fixing issue #1492: Consecutive semicolons in compiled output in some situations

This commit is contained in:
Breckin Loggins 2011-07-16 09:34:46 -05:00
parent 8fe59ed888
commit 8a4a28bd33
3 changed files with 16 additions and 2 deletions

View File

@ -254,7 +254,9 @@
node = _ref2[_i];
node = node.unwrapAll();
node = node.unfoldSoak(o) || node;
if (top) {
if (node instanceof Block) {
codes.push(node.compileNode(o));
} else if (top) {
node.front = true;
code = node.compile(o);
codes.push(node.isStatement(o) ? code : this.tab + code + ';');

View File

@ -214,7 +214,12 @@ exports.Block = class Block extends Base
for node in @expressions
node = node.unwrapAll()
node = (node.unfoldSoak(o) or node)
if top
if node instanceof Block
# This is a nested block. We don't do anything special here like enclose
# it in a new scope; we just compile the statements in this block along with
# our own
codes.push node.compileNode o
else if top
node.front = true
code = node.compile o
codes.push if node.isStatement o then code else @tab + code + ';'

View File

@ -116,3 +116,10 @@ test "indented heredoc", ->
abc
""")
eq "abc", result
# Nested blocks caused by paren unwrapping
test "#1492: Nested blocks don't cause double semicolons", ->
js = CoffeeScript.compile """
(0;0)
"""
eq -1, js.indexOf ';;'