diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8c4cfeec5fa..da5df9f2efe 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8131,6 +8131,21 @@ module ts { } function checkLabeledStatement(node: LabeledStatement) { + // ensure that label is unique + // Grammar checking + var current = node.parent; + while (current) { + if (isAnyFunction(current)) { + break; + } + if (current.kind === SyntaxKind.LabeledStatement && (current).label.text === node.label.text) { + var sourceFile = getSourceFileOfNode(node); + grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceFile.text, node.label)); + break; + } + current = current.parent; + } + checkSourceElement(node.statement); } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 7fb859f750a..ebd8cc88505 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4651,7 +4651,7 @@ module ts { case SyntaxKind.GetAccessor: return checkGetAccessor(node); //case SyntaxKind.HeritageClause: return checkHeritageClause(node); //case SyntaxKind.InterfaceDeclaration: return checkInterfaceDeclaration(node); - case SyntaxKind.LabeledStatement: return checkLabeledStatement(node); + //case SyntaxKind.LabeledStatement: return checkLabeledStatement(node); case SyntaxKind.PropertyAssignment: return checkPropertyAssignment(node); case SyntaxKind.MethodDeclaration: case SyntaxKind.MethodSignature: