diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f61d4403eece6..cfd234753263b 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1353,10 +1353,21 @@ module ts { emitToken(SyntaxKind.CloseBraceToken, node.clauses.end); } - function isOnSameLine(node1: Node, node2: Node) { + function isOnSameLine(node1: Node, node2: Node): boolean { return getLineOfLocalPosition(skipTrivia(currentSourceFile.text, node1.pos)) === getLineOfLocalPosition(skipTrivia(currentSourceFile.text, node2.pos)); } + function isCaseFallThru(node: CaseOrDefaultClause): boolean { + var isBreakExists: boolean = false ; + isBreakExists = forEach(node.statements, node => { + if (node.kind === SyntaxKind.BreakStatement) { + return true; + } + }); + + return ( node.statements.length === 0 || !isBreakExists ); + } + function emitCaseOrDefaultClause(node: CaseOrDefaultClause) { if (node.kind === SyntaxKind.CaseClause) { write("case "); @@ -1376,6 +1387,13 @@ module ts { emitLines(node.statements); decreaseIndent(); } + + if ( isCaseFallThru(node) ) + { + writeLine(); + write(" /* falls through */ "); + writeLine(); + } } function emitThrowStatement(node: ThrowStatement) {