diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 27a9f163d5b..8e59408f151 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -5,6 +5,8 @@ module ts { [index: string]: T; } + export interface StringSet extends Map { } + export function forEach(array: T[], callback: (element: T) => U): U { var result: U; if (array) { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index ada08165029..763968e763e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -55,6 +55,10 @@ module ts { return skipTrivia(getSourceFileOfNode(node).text, node.pos); } + export function getSourceTextOfNodeFromSourceText(sourceText: string, node: Node): string { + return sourceText.substring(skipTrivia(sourceText, node.pos), node.end); + } + export function getSourceTextOfNode(node: Node): string { var text = getSourceFileOfNode(node).text; return text.substring(skipTrivia(text, node.pos), node.end); @@ -400,18 +404,98 @@ module ts { var labelledStatementInfo = (() => { // TODO(jfreeman): Implement a data structure for tracking labels - var functionBoundarySentinel = {}; - var currentLabelSet: Identifier[]; - var labelSetStack: Identifier[][]; + var functionBoundarySentinel: StringSet = {}; + var currentLabelSet: StringSet; + var labelSetStack: StringSet[]; var isIterationStack: boolean[]; + function addLabel(label: Identifier): void { + if (!currentLabelSet) { + currentLabelSet = {}; + } + currentLabelSet[label.text] = true; + } + + function pushCurrentLabelSet(isIterationStatement: boolean): void { + if (!labelSetStack && !isIterationStack) { + labelSetStack = []; + isIterationStack = []; + } + Debug.assert(currentLabelSet !== undefined); + labelSetStack.push(currentLabelSet); + isIterationStack.push(isIterationStatement); + currentLabelSet = undefined; + } + + function pushFunctionBoundary(): void { + if (!labelSetStack && !isIterationStack) { + labelSetStack = []; + isIterationStack = []; + } + Debug.assert(currentLabelSet === undefined); + labelSetStack.push(functionBoundarySentinel); + + // It does not matter what we push here, since we will never ask if a function boundary + // is an iteration statement + isIterationStack.push(false); + } + + function pop(): void { + // Assert that we are in a "pushed" state + Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined); + labelSetStack.pop(); + isIterationStack.pop(); + } + + function nodeIsNestedInLabel(label: Identifier, requireIterationStatement: boolean, stopAtFunctionBoundary: boolean): ControlBlockContext { + if (!requireIterationStatement && currentLabelSet && hasProperty(currentLabelSet, label.text)) { + return ControlBlockContext.Nested; + } + + if (!labelSetStack) { + return ControlBlockContext.NotNested; + } + + // We want to start searching for the label at the lowest point in the tree, + // and climb up from there. So we start at the end of the labelSetStack array. + var crossedFunctionBoundary = false; + for (var i = labelSetStack.length - 1; i >= 0; i--) { + var labelSet = labelSetStack[i]; + // Not allowed to cross function boundaries, so stop if we encounter one + if (labelSet === functionBoundarySentinel) { + if (stopAtFunctionBoundary) { + break; + } + else { + crossedFunctionBoundary = true; + continue; + } + } + + // If we require an iteration statement, only search in the current + // statement if it is an iteration statement + if (requireIterationStatement && isIterationStack[i] === false) { + continue; + } + + if (hasProperty(labelSet, label.text)) { + return crossedFunctionBoundary ? ControlBlockContext.CrossingFunctionBoundary : ControlBlockContext.Nested; + } + } + + // This is a bit of a misnomer. If the caller passed true for stopAtFunctionBoundary, + // there actually may be an enclosing label across a function boundary, but we will + // just return NotNested + return ControlBlockContext.NotNested; + } + // TODO(jfreeman): Fill in these stubs return { - addLabel: (label: Identifier) => { }, - pushCurrentLabelSet: (isIterationStatement: boolean) => { }, - pushFunctionBoundary: () => { }, - pop: () => { }, - labelExists: (label: Identifier, requireIterationStatement: boolean): boolean => false, + addLabel: addLabel, + pushCurrentLabelSet: pushCurrentLabelSet, + pushFunctionBoundary: pushFunctionBoundary, + pop: pop, + nodeIsNestedInLabel: nodeIsNestedInLabel, }; })(); @@ -2083,40 +2167,39 @@ module ts { parseExpected(kind === SyntaxKind.BreakStatement ? SyntaxKind.BreakKeyword : SyntaxKind.ContinueKeyword); if (!isSemicolon()) node.label = parseIdentifier(); parseSemicolon(); + finishNode(node); // In an ambient context, we will already give an error for having a statement. if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) { if (node.label) { - checkBreakOrContinueStatementWithLabel(node.label, kind); + checkBreakOrContinueStatementWithLabel(node); } else { - checkAnonymousBreakOrContinueStatement(kind, keywordStart, keywordLength); + checkAnonymousBreakOrContinueStatement(node); } } - return finishNode(node); + return node; } - function checkAnonymousBreakOrContinueStatement(kind: SyntaxKind, errorStart: number, errorLength: number): void { - if (kind === SyntaxKind.BreakStatement) { + function checkAnonymousBreakOrContinueStatement(node: BreakOrContinueStatement): void { + if (node.kind === SyntaxKind.BreakStatement) { if (inIterationStatement === ControlBlockContext.Nested || inSwitchStatement === ControlBlockContext.Nested) { return; } else if (inIterationStatement === ControlBlockContext.NotNested && inSwitchStatement === ControlBlockContext.NotNested) { - grammarErrorAtPos(errorStart, errorLength, - Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); + grammarErrorOnNode(node, Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); return; } // Fall through } - else if (kind === SyntaxKind.ContinueStatement) { + else if (node.kind === SyntaxKind.ContinueStatement) { if (inIterationStatement === ControlBlockContext.Nested) { return; } else if (inIterationStatement === ControlBlockContext.NotNested) { - grammarErrorAtPos(errorStart, errorLength, - Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); + grammarErrorOnNode(node, Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); return; } // Fall through @@ -2127,19 +2210,31 @@ module ts { Debug.assert(inIterationStatement === ControlBlockContext.CrossingFunctionBoundary || inSwitchStatement === ControlBlockContext.CrossingFunctionBoundary); - grammarErrorAtPos(errorStart, errorLength, Diagnostics.Jump_target_cannot_cross_function_boundary); + grammarErrorOnNode(node, Diagnostics.Jump_target_cannot_cross_function_boundary); } - function checkBreakOrContinueStatementWithLabel(label: Identifier, kind: SyntaxKind): void { - if (labelledStatementInfo.labelExists(label, /*requireIterationStatement*/ kind === SyntaxKind.ContinueStatement)) { + function checkBreakOrContinueStatementWithLabel(node: BreakOrContinueStatement): void { + // For error specificity, if the label is not found, we want to distinguish whether it is because + // it crossed a function boundary or it was simply not found. To do this, we pass false for + // stopAtFunctionBoundary. + var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, + /*requireIterationStatement*/ node.kind === SyntaxKind.ContinueStatement, + /*stopAtFunctionBoundary*/ false); + if (nodeIsNestedInLabel === ControlBlockContext.Nested) { return; } - if (kind === SyntaxKind.ContinueStatement) { - grammarErrorOnNode(label, Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + if (nodeIsNestedInLabel === ControlBlockContext.CrossingFunctionBoundary) { + grammarErrorOnNode(node, Diagnostics.Jump_target_cannot_cross_function_boundary); + return; } - else if (kind === SyntaxKind.BreakStatement) { - grammarErrorOnNode(label, Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); + + // It is NotNested + if (node.kind === SyntaxKind.ContinueStatement) { + grammarErrorOnNode(node, Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + } + else if (node.kind === SyntaxKind.BreakStatement) { + grammarErrorOnNode(node, Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); } else { Debug.fail("checkBreakOrContinueStatementWithLabel"); @@ -2304,8 +2399,8 @@ module ts { node.label = parseIdentifier(); parseExpected(SyntaxKind.ColonToken); - if (labelledStatementInfo.labelExists(node.label, /*requireIterationStatement*/ false)) { - grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0); + if (labelledStatementInfo.nodeIsNestedInLabel(node.label, /*requireIterationStatement*/ false, /*stopAtFunctionBoundary*/ true)) { + grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0, getSourceTextOfNodeFromSourceText(sourceText, node.label)); } labelledStatementInfo.addLabel(node.label); diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement1.js b/tests/baselines/reference/breakInIterationOrSwitchStatement1.js deleted file mode 100644 index 0a3de64c675..00000000000 --- a/tests/baselines/reference/breakInIterationOrSwitchStatement1.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [breakInIterationOrSwitchStatement1.ts] -while (true) { - break; -} - -//// [breakInIterationOrSwitchStatement1.js] -while (true) { - break; -} diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement2.js b/tests/baselines/reference/breakInIterationOrSwitchStatement2.js deleted file mode 100644 index 903bed733db..00000000000 --- a/tests/baselines/reference/breakInIterationOrSwitchStatement2.js +++ /dev/null @@ -1,10 +0,0 @@ -//// [breakInIterationOrSwitchStatement2.ts] -do { - break; -} -while (true); - -//// [breakInIterationOrSwitchStatement2.js] -do { - break; -} while (true); diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement3.js b/tests/baselines/reference/breakInIterationOrSwitchStatement3.js deleted file mode 100644 index dfadaf03182..00000000000 --- a/tests/baselines/reference/breakInIterationOrSwitchStatement3.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [breakInIterationOrSwitchStatement3.ts] -for (;;) { - break; -} - -//// [breakInIterationOrSwitchStatement3.js] -for (;;) { - break; -} diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt b/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt deleted file mode 100644 index 667108c902d..00000000000 --- a/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt +++ /dev/null @@ -1,6 +0,0 @@ -==== tests/cases/compiler/breakInIterationOrSwitchStatement4.ts (1 errors) ==== - for (var i in something) { - ~~~~~~~~~ -!!! Cannot find name 'something'. - break; - } \ No newline at end of file diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement4.js b/tests/baselines/reference/breakInIterationOrSwitchStatement4.js deleted file mode 100644 index ef1978666e2..00000000000 --- a/tests/baselines/reference/breakInIterationOrSwitchStatement4.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [breakInIterationOrSwitchStatement4.ts] -for (var i in something) { - break; -} - -//// [breakInIterationOrSwitchStatement4.js] -for (var i in something) { - break; -} diff --git a/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.errors.txt b/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.errors.txt deleted file mode 100644 index fb72cb2337f..00000000000 --- a/tests/baselines/reference/breakNotInIterationOrSwitchStatement1.errors.txt +++ /dev/null @@ -1,4 +0,0 @@ -==== tests/cases/compiler/breakNotInIterationOrSwitchStatement1.ts (1 errors) ==== - break; - ~~~~~ -!!! A 'break' statement can only be used within an enclosing iteration or switch statement. \ No newline at end of file diff --git a/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.errors.txt b/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.errors.txt deleted file mode 100644 index 3a04554decf..00000000000 --- a/tests/baselines/reference/breakNotInIterationOrSwitchStatement2.errors.txt +++ /dev/null @@ -1,8 +0,0 @@ -==== tests/cases/compiler/breakNotInIterationOrSwitchStatement2.ts (1 errors) ==== - while (true) { - function f() { - break; - ~~~~~ -!!! Jump target cannot cross function boundary. - } - } \ No newline at end of file diff --git a/tests/baselines/reference/breakTarget1.js b/tests/baselines/reference/breakTarget1.js deleted file mode 100644 index 5283dfe1911..00000000000 --- a/tests/baselines/reference/breakTarget1.js +++ /dev/null @@ -1,6 +0,0 @@ -//// [breakTarget1.ts] -target: - break target; - -//// [breakTarget1.js] -target: break target; diff --git a/tests/baselines/reference/breakTarget2.js b/tests/baselines/reference/breakTarget2.js deleted file mode 100644 index 9ca050c18e5..00000000000 --- a/tests/baselines/reference/breakTarget2.js +++ /dev/null @@ -1,10 +0,0 @@ -//// [breakTarget2.ts] -target: -while (true) { - break target; -} - -//// [breakTarget2.js] -target: while (true) { - break target; -} diff --git a/tests/baselines/reference/breakTarget3.js b/tests/baselines/reference/breakTarget3.js deleted file mode 100644 index 0fa6cd2d298..00000000000 --- a/tests/baselines/reference/breakTarget3.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [breakTarget3.ts] -target1: -target2: -while (true) { - break target1; -} - -//// [breakTarget3.js] -target1: target2: while (true) { - break target1; -} diff --git a/tests/baselines/reference/breakTarget4.js b/tests/baselines/reference/breakTarget4.js deleted file mode 100644 index 4586301d71b..00000000000 --- a/tests/baselines/reference/breakTarget4.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [breakTarget4.ts] -target1: -target2: -while (true) { - break target2; -} - -//// [breakTarget4.js] -target1: target2: while (true) { - break target2; -} diff --git a/tests/baselines/reference/breakTarget5.js b/tests/baselines/reference/breakTarget5.js deleted file mode 100644 index 197e4e147bd..00000000000 --- a/tests/baselines/reference/breakTarget5.js +++ /dev/null @@ -1,18 +0,0 @@ -//// [breakTarget5.ts] -target: -while (true) { - function f() { - while (true) { - break target; - } - } -} - -//// [breakTarget5.js] -target: while (true) { - function f() { - while (true) { - break target; - } - } -} diff --git a/tests/baselines/reference/breakTarget6.js b/tests/baselines/reference/breakTarget6.js deleted file mode 100644 index 9c5bcc3ded1..00000000000 --- a/tests/baselines/reference/breakTarget6.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [breakTarget6.ts] -while (true) { - break target; -} - -//// [breakTarget6.js] -while (true) { - break target; -} diff --git a/tests/baselines/reference/continueInIterationStatement1.js b/tests/baselines/reference/continueInIterationStatement1.js deleted file mode 100644 index e1c787ae7ea..00000000000 --- a/tests/baselines/reference/continueInIterationStatement1.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [continueInIterationStatement1.ts] -while (true) { - continue; -} - -//// [continueInIterationStatement1.js] -while (true) { - continue; -} diff --git a/tests/baselines/reference/continueInIterationStatement2.js b/tests/baselines/reference/continueInIterationStatement2.js deleted file mode 100644 index d7ff84895f6..00000000000 --- a/tests/baselines/reference/continueInIterationStatement2.js +++ /dev/null @@ -1,10 +0,0 @@ -//// [continueInIterationStatement2.ts] -do { - continue; -} -while (true); - -//// [continueInIterationStatement2.js] -do { - continue; -} while (true); diff --git a/tests/baselines/reference/continueInIterationStatement3.js b/tests/baselines/reference/continueInIterationStatement3.js deleted file mode 100644 index 90619118ac5..00000000000 --- a/tests/baselines/reference/continueInIterationStatement3.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [continueInIterationStatement3.ts] -for (;;) { - continue; -} - -//// [continueInIterationStatement3.js] -for (;;) { - continue; -} diff --git a/tests/baselines/reference/continueInIterationStatement4.errors.txt b/tests/baselines/reference/continueInIterationStatement4.errors.txt deleted file mode 100644 index c0f4388cf79..00000000000 --- a/tests/baselines/reference/continueInIterationStatement4.errors.txt +++ /dev/null @@ -1,6 +0,0 @@ -==== tests/cases/compiler/continueInIterationStatement4.ts (1 errors) ==== - for (var i in something) { - ~~~~~~~~~ -!!! Cannot find name 'something'. - continue; - } \ No newline at end of file diff --git a/tests/baselines/reference/continueInIterationStatement4.js b/tests/baselines/reference/continueInIterationStatement4.js deleted file mode 100644 index e72ab3ed9ab..00000000000 --- a/tests/baselines/reference/continueInIterationStatement4.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [continueInIterationStatement4.ts] -for (var i in something) { - continue; -} - -//// [continueInIterationStatement4.js] -for (var i in something) { - continue; -} diff --git a/tests/baselines/reference/continueLabel.js b/tests/baselines/reference/continueLabel.js deleted file mode 100644 index 390566353eb..00000000000 --- a/tests/baselines/reference/continueLabel.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [continueLabel.ts] -label1: for(var i = 0; i < 1; i++) { - continue label1; -} - -//// [continueLabel.js] -label1: for (var i = 0; i < 1; i++) { - continue label1; -} diff --git a/tests/baselines/reference/continueNotInIterationStatement1.errors.txt b/tests/baselines/reference/continueNotInIterationStatement1.errors.txt deleted file mode 100644 index 6875d311520..00000000000 --- a/tests/baselines/reference/continueNotInIterationStatement1.errors.txt +++ /dev/null @@ -1,4 +0,0 @@ -==== tests/cases/compiler/continueNotInIterationStatement1.ts (1 errors) ==== - continue; - ~~~~~~~~ -!!! A 'continue' statement can only be used within an enclosing iteration statement. \ No newline at end of file diff --git a/tests/baselines/reference/continueNotInIterationStatement2.errors.txt b/tests/baselines/reference/continueNotInIterationStatement2.errors.txt deleted file mode 100644 index 945f8e7eede..00000000000 --- a/tests/baselines/reference/continueNotInIterationStatement2.errors.txt +++ /dev/null @@ -1,8 +0,0 @@ -==== tests/cases/compiler/continueNotInIterationStatement2.ts (1 errors) ==== - while (true) { - function f() { - continue; - ~~~~~~~~ -!!! Jump target cannot cross function boundary. - } - } \ No newline at end of file diff --git a/tests/baselines/reference/continueNotInIterationStatement3.errors.txt b/tests/baselines/reference/continueNotInIterationStatement3.errors.txt deleted file mode 100644 index 56aef1000f7..00000000000 --- a/tests/baselines/reference/continueNotInIterationStatement3.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -==== tests/cases/compiler/continueNotInIterationStatement3.ts (1 errors) ==== - switch (0) { - default: - continue; - ~~~~~~~~ -!!! A 'continue' statement can only be used within an enclosing iteration statement. - } \ No newline at end of file diff --git a/tests/baselines/reference/continueNotInIterationStatement4.js b/tests/baselines/reference/continueNotInIterationStatement4.js deleted file mode 100644 index f3f52ecb48c..00000000000 --- a/tests/baselines/reference/continueNotInIterationStatement4.js +++ /dev/null @@ -1,15 +0,0 @@ -//// [continueNotInIterationStatement4.ts] -TWO: -while (true){ - var x = () => { - continue TWO; - } -} - - -//// [continueNotInIterationStatement4.js] -TWO: while (true) { - var x = function () { - continue TWO; - }; -} diff --git a/tests/baselines/reference/continueTarget1.js b/tests/baselines/reference/continueTarget1.js deleted file mode 100644 index 07e5a7b9b50..00000000000 --- a/tests/baselines/reference/continueTarget1.js +++ /dev/null @@ -1,6 +0,0 @@ -//// [continueTarget1.ts] -target: - continue target; - -//// [continueTarget1.js] -target: continue target; diff --git a/tests/baselines/reference/continueTarget2.js b/tests/baselines/reference/continueTarget2.js deleted file mode 100644 index eb3b4118f7f..00000000000 --- a/tests/baselines/reference/continueTarget2.js +++ /dev/null @@ -1,10 +0,0 @@ -//// [continueTarget2.ts] -target: -while (true) { - continue target; -} - -//// [continueTarget2.js] -target: while (true) { - continue target; -} diff --git a/tests/baselines/reference/continueTarget3.js b/tests/baselines/reference/continueTarget3.js deleted file mode 100644 index 052b7b593c3..00000000000 --- a/tests/baselines/reference/continueTarget3.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [continueTarget3.ts] -target1: -target2: -while (true) { - continue target1; -} - -//// [continueTarget3.js] -target1: target2: while (true) { - continue target1; -} diff --git a/tests/baselines/reference/continueTarget4.js b/tests/baselines/reference/continueTarget4.js deleted file mode 100644 index 0f6211f9202..00000000000 --- a/tests/baselines/reference/continueTarget4.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [continueTarget4.ts] -target1: -target2: -while (true) { - continue target2; -} - -//// [continueTarget4.js] -target1: target2: while (true) { - continue target2; -} diff --git a/tests/baselines/reference/continueTarget5.js b/tests/baselines/reference/continueTarget5.js deleted file mode 100644 index 5bf309d2690..00000000000 --- a/tests/baselines/reference/continueTarget5.js +++ /dev/null @@ -1,18 +0,0 @@ -//// [continueTarget5.ts] -target: -while (true) { - function f() { - while (true) { - continue target; - } - } -} - -//// [continueTarget5.js] -target: while (true) { - function f() { - while (true) { - continue target; - } - } -} diff --git a/tests/baselines/reference/continueTarget6.js b/tests/baselines/reference/continueTarget6.js deleted file mode 100644 index aefa8e97652..00000000000 --- a/tests/baselines/reference/continueTarget6.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [continueTarget6.ts] -while (true) { - continue target; -} - -//// [continueTarget6.js] -while (true) { - continue target; -} diff --git a/tests/baselines/reference/duplicateLabel1.js b/tests/baselines/reference/duplicateLabel1.js deleted file mode 100644 index e7976895c94..00000000000 --- a/tests/baselines/reference/duplicateLabel1.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [duplicateLabel1.ts] -target: -target: -while (true) { -} - -//// [duplicateLabel1.js] -target: target: while (true) { -} diff --git a/tests/baselines/reference/duplicateLabel2.js b/tests/baselines/reference/duplicateLabel2.js deleted file mode 100644 index 9ee9671d59d..00000000000 --- a/tests/baselines/reference/duplicateLabel2.js +++ /dev/null @@ -1,13 +0,0 @@ -//// [duplicateLabel2.ts] -target: -while (true) { - target: - while (true) { - } -} - -//// [duplicateLabel2.js] -target: while (true) { - target: while (true) { - } -} diff --git a/tests/baselines/reference/duplicateLabel3.js b/tests/baselines/reference/duplicateLabel3.js deleted file mode 100644 index 37e9619e8f6..00000000000 --- a/tests/baselines/reference/duplicateLabel3.js +++ /dev/null @@ -1,17 +0,0 @@ -//// [duplicateLabel3.ts] -target: -while (true) { - function f() { - target: - while (true) { - } - } -} - -//// [duplicateLabel3.js] -target: while (true) { - function f() { - target: while (true) { - } - } -} diff --git a/tests/baselines/reference/duplicateLabel4.js b/tests/baselines/reference/duplicateLabel4.js deleted file mode 100644 index 22d072d38d7..00000000000 --- a/tests/baselines/reference/duplicateLabel4.js +++ /dev/null @@ -1,14 +0,0 @@ -//// [duplicateLabel4.ts] -target: -while (true) { -} - -target: -while (true) { -} - -//// [duplicateLabel4.js] -target: while (true) { -} -target: while (true) { -} diff --git a/tests/baselines/reference/invalidDoWhileBreakStatements.errors.txt b/tests/baselines/reference/invalidDoWhileBreakStatements.errors.txt index 91852a9e77e..9b526d3c219 100644 --- a/tests/baselines/reference/invalidDoWhileBreakStatements.errors.txt +++ b/tests/baselines/reference/invalidDoWhileBreakStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/breakStatements/invalidDoWhileBreakStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/breakStatements/invalidDoWhileBreakStatements.ts (6 errors) ==== // All errors // naked break not allowed break; - ~~~~~ + ~~~~~~ !!! A 'break' statement can only be used within an enclosing iteration or switch statement. // non-existent label ONE: do break TWO; while (true) + ~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. // break from inside function TWO: do { var x = () => { break TWO; + ~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } }while (true) @@ -22,12 +26,16 @@ do { var fn = function () { break THREE; + ~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } }while (true) // break forward do { break FIVE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. FIVE: do { } while (true) }while (true) @@ -38,4 +46,6 @@ do { break NINE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. }while (true) \ No newline at end of file diff --git a/tests/baselines/reference/invalidDoWhileContinueStatements.errors.txt b/tests/baselines/reference/invalidDoWhileContinueStatements.errors.txt index 798afdc3b75..38c54104d39 100644 --- a/tests/baselines/reference/invalidDoWhileContinueStatements.errors.txt +++ b/tests/baselines/reference/invalidDoWhileContinueStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/continueStatements/invalidDoWhileContinueStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/continueStatements/invalidDoWhileContinueStatements.ts (6 errors) ==== // All errors // naked continue not allowed continue; - ~~~~~~~~ + ~~~~~~~~~ !!! A 'continue' statement can only be used within an enclosing iteration statement. // non-existent label ONE: do continue TWO; while (true) + ~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. // continue from inside function TWO: do { var x = () => { continue TWO; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } }while (true) @@ -22,12 +26,16 @@ do { var fn = function () { continue THREE; + ~~~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } }while (true) // continue forward do { continue FIVE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. FIVE: do { } while (true) }while (true) @@ -38,4 +46,6 @@ do { continue NINE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. }while (true) \ No newline at end of file diff --git a/tests/baselines/reference/invalidForBreakStatements.errors.txt b/tests/baselines/reference/invalidForBreakStatements.errors.txt index 0edc26132cb..28c110b1105 100644 --- a/tests/baselines/reference/invalidForBreakStatements.errors.txt +++ b/tests/baselines/reference/invalidForBreakStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/breakStatements/invalidForBreakStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/breakStatements/invalidForBreakStatements.ts (6 errors) ==== // All errors // naked break not allowed break; - ~~~~~ + ~~~~~~ !!! A 'break' statement can only be used within an enclosing iteration or switch statement. // non-existent label ONE: for(;;) break TWO; + ~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. // break from inside function TWO: for(;;) { var x = () => { break TWO; + ~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } @@ -22,12 +26,16 @@ for(;;) { var fn = function () { break THREE; + ~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } // break forward for(;;) { break FIVE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. FIVE: for (; ;) { } } @@ -37,4 +45,6 @@ for(;;) { break NINE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. } \ No newline at end of file diff --git a/tests/baselines/reference/invalidForContinueStatements.errors.txt b/tests/baselines/reference/invalidForContinueStatements.errors.txt index e5bf379e931..d3aadb0b694 100644 --- a/tests/baselines/reference/invalidForContinueStatements.errors.txt +++ b/tests/baselines/reference/invalidForContinueStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/continueStatements/invalidForContinueStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/continueStatements/invalidForContinueStatements.ts (6 errors) ==== // All errors // naked continue not allowed continue; - ~~~~~~~~ + ~~~~~~~~~ !!! A 'continue' statement can only be used within an enclosing iteration statement. // non-existent label ONE: for(;;) continue TWO; + ~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. // continue from inside function TWO: for(;;) { var x = () => { continue TWO; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } @@ -22,12 +26,16 @@ for(;;) { var fn = function () { continue THREE; + ~~~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } // continue forward for(;;) { continue FIVE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. FIVE: for (; ;) { } } @@ -37,4 +45,6 @@ for(;;) { continue NINE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. } \ No newline at end of file diff --git a/tests/baselines/reference/invalidForInBreakStatements.errors.txt b/tests/baselines/reference/invalidForInBreakStatements.errors.txt index a9b3034bccc..6e29ea04c8e 100644 --- a/tests/baselines/reference/invalidForInBreakStatements.errors.txt +++ b/tests/baselines/reference/invalidForInBreakStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/breakStatements/invalidForInBreakStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/breakStatements/invalidForInBreakStatements.ts (6 errors) ==== // All errors // naked break not allowed break; - ~~~~~ + ~~~~~~ !!! A 'break' statement can only be used within an enclosing iteration or switch statement. // non-existent label ONE: for (var x in {}) break TWO; + ~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. // break from inside function TWO: for (var x in {}) { var fn = () => { break TWO; + ~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } @@ -22,12 +26,16 @@ for (var x in {}) { var fn = function () { break THREE; + ~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } // break forward for (var x in {}) { break FIVE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. FIVE: for (var x in {}) { } } @@ -38,4 +46,6 @@ for (var x in {}) { break NINE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. } \ No newline at end of file diff --git a/tests/baselines/reference/invalidForInContinueStatements.errors.txt b/tests/baselines/reference/invalidForInContinueStatements.errors.txt index 690b40acdd9..f9cf403c975 100644 --- a/tests/baselines/reference/invalidForInContinueStatements.errors.txt +++ b/tests/baselines/reference/invalidForInContinueStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/continueStatements/invalidForInContinueStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/continueStatements/invalidForInContinueStatements.ts (6 errors) ==== // All errors // naked continue not allowed continue; - ~~~~~~~~ + ~~~~~~~~~ !!! A 'continue' statement can only be used within an enclosing iteration statement. // non-existent label ONE: for (var x in {}) continue TWO; + ~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. // continue from inside function TWO: for (var x in {}) { var fn = () => { continue TWO; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } @@ -22,12 +26,16 @@ for (var x in {}) { var fn = function () { continue THREE; + ~~~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } // continue forward for (var x in {}) { continue FIVE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. FIVE: for (var x in {}) { } } @@ -38,4 +46,6 @@ for (var x in {}) { continue NINE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. } \ No newline at end of file diff --git a/tests/baselines/reference/invalidSwitchContinueStatement.errors.txt b/tests/baselines/reference/invalidSwitchContinueStatement.errors.txt index c6ac769f7ac..94b219ea365 100644 --- a/tests/baselines/reference/invalidSwitchContinueStatement.errors.txt +++ b/tests/baselines/reference/invalidSwitchContinueStatement.errors.txt @@ -4,7 +4,7 @@ switch (12) { case 5: continue; - ~~~~~~~~ + ~~~~~~~~~ !!! A 'continue' statement can only be used within an enclosing iteration statement. } \ No newline at end of file diff --git a/tests/baselines/reference/invalidWhileBreakStatements.errors.txt b/tests/baselines/reference/invalidWhileBreakStatements.errors.txt index 4ad5b0cfff9..9357f522984 100644 --- a/tests/baselines/reference/invalidWhileBreakStatements.errors.txt +++ b/tests/baselines/reference/invalidWhileBreakStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/breakStatements/invalidWhileBreakStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/breakStatements/invalidWhileBreakStatements.ts (6 errors) ==== // All errors // naked break not allowed break; - ~~~~~ + ~~~~~~ !!! A 'break' statement can only be used within an enclosing iteration or switch statement. // non-existent label ONE: while (true) break TWO; + ~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. // break from inside function TWO: while (true){ var x = () => { break TWO; + ~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } @@ -22,12 +26,16 @@ while (true) { var fn = function () { break THREE; + ~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } // break forward while (true) { break FIVE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. FIVE: while (true) { } } @@ -38,4 +46,6 @@ while (true) { break NINE; + ~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. } \ No newline at end of file diff --git a/tests/baselines/reference/invalidWhileContinueStatements.errors.txt b/tests/baselines/reference/invalidWhileContinueStatements.errors.txt index 5dbc8fdaafa..24ef7381e03 100644 --- a/tests/baselines/reference/invalidWhileContinueStatements.errors.txt +++ b/tests/baselines/reference/invalidWhileContinueStatements.errors.txt @@ -1,20 +1,24 @@ -==== tests/cases/conformance/statements/continueStatements/invalidWhileContinueStatements.ts (1 errors) ==== +==== tests/cases/conformance/statements/continueStatements/invalidWhileContinueStatements.ts (6 errors) ==== // All errors // naked continue not allowed continue; - ~~~~~~~~ + ~~~~~~~~~ !!! A 'continue' statement can only be used within an enclosing iteration statement. // non-existent label ONE: while (true) continue TWO; + ~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. // continue from inside function TWO: while (true){ var x = () => { continue TWO; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } @@ -22,12 +26,16 @@ while (true) { var fn = function () { continue THREE; + ~~~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. } } // continue forward while (true) { continue FIVE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. FIVE: while (true) { } } @@ -38,4 +46,6 @@ while (true) { continue NINE; + ~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. } \ No newline at end of file diff --git a/tests/baselines/reference/parserPublicBreak1.errors.txt b/tests/baselines/reference/parserPublicBreak1.errors.txt index afd0cd5df74..d502e53722f 100644 --- a/tests/baselines/reference/parserPublicBreak1.errors.txt +++ b/tests/baselines/reference/parserPublicBreak1.errors.txt @@ -2,6 +2,6 @@ public break; ~~~~~~ !!! Declaration or statement expected. - ~~~~~ + ~~~~~~ !!! A 'break' statement can only be used within an enclosing iteration or switch statement. \ No newline at end of file diff --git a/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement1.errors.txt b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement1.errors.txt new file mode 100644 index 00000000000..cb68016f0be --- /dev/null +++ b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement1.errors.txt @@ -0,0 +1,4 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakNotInIterationOrSwitchStatement1.ts (1 errors) ==== + break; + ~~~~~~ +!!! A 'break' statement can only be used within an enclosing iteration or switch statement. \ No newline at end of file diff --git a/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement2.errors.txt b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement2.errors.txt new file mode 100644 index 00000000000..29ea7d85b4b --- /dev/null +++ b/tests/baselines/reference/parser_breakNotInIterationOrSwitchStatement2.errors.txt @@ -0,0 +1,8 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakNotInIterationOrSwitchStatement2.ts (1 errors) ==== + while (true) { + function f() { + break; + ~~~~~~ +!!! Jump target cannot cross function boundary. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_breakTarget5.errors.txt b/tests/baselines/reference/parser_breakTarget5.errors.txt new file mode 100644 index 00000000000..01aa2dd3a26 --- /dev/null +++ b/tests/baselines/reference/parser_breakTarget5.errors.txt @@ -0,0 +1,11 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakTarget5.ts (1 errors) ==== + target: + while (true) { + function f() { + while (true) { + break target; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_breakTarget5.js b/tests/baselines/reference/parser_breakTarget5.js deleted file mode 100644 index 743ad6c2631..00000000000 --- a/tests/baselines/reference/parser_breakTarget5.js +++ /dev/null @@ -1,18 +0,0 @@ -//// [parser_breakTarget5.ts] -target: -while (true) { - function f() { - while (true) { - break target; - } - } -} - -//// [parser_breakTarget5.js] -target: while (true) { - function f() { - while (true) { - break target; - } - } -} diff --git a/tests/baselines/reference/parser_breakTarget6.errors.txt b/tests/baselines/reference/parser_breakTarget6.errors.txt new file mode 100644 index 00000000000..d35364658ab --- /dev/null +++ b/tests/baselines/reference/parser_breakTarget6.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakTarget6.ts (1 errors) ==== + while (true) { + break target; + ~~~~~~~~~~~~~ +!!! A 'break' statement can only jump to a label of an enclosing statement. + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_breakTarget6.js b/tests/baselines/reference/parser_breakTarget6.js deleted file mode 100644 index 93b15ac0362..00000000000 --- a/tests/baselines/reference/parser_breakTarget6.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [parser_breakTarget6.ts] -while (true) { - break target; -} - -//// [parser_breakTarget6.js] -while (true) { - break target; -} diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement1.errors.txt b/tests/baselines/reference/parser_continueNotInIterationStatement1.errors.txt new file mode 100644 index 00000000000..2454e0d4f8c --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement1.errors.txt @@ -0,0 +1,4 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement1.ts (1 errors) ==== + continue; + ~~~~~~~~~ +!!! A 'continue' statement can only be used within an enclosing iteration statement. \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement2.errors.txt b/tests/baselines/reference/parser_continueNotInIterationStatement2.errors.txt new file mode 100644 index 00000000000..aeb979736ef --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement2.errors.txt @@ -0,0 +1,8 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement2.ts (1 errors) ==== + while (true) { + function f() { + continue; + ~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement3.errors.txt b/tests/baselines/reference/parser_continueNotInIterationStatement3.errors.txt new file mode 100644 index 00000000000..1acc582492d --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement3.errors.txt @@ -0,0 +1,7 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement3.ts (1 errors) ==== + switch (0) { + default: + continue; + ~~~~~~~~~ +!!! A 'continue' statement can only be used within an enclosing iteration statement. + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement4.errors.txt b/tests/baselines/reference/parser_continueNotInIterationStatement4.errors.txt new file mode 100644 index 00000000000..fd9de545c1b --- /dev/null +++ b/tests/baselines/reference/parser_continueNotInIterationStatement4.errors.txt @@ -0,0 +1,10 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement4.ts (1 errors) ==== + TWO: + while (true){ + var x = () => { + continue TWO; + ~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueNotInIterationStatement4.js b/tests/baselines/reference/parser_continueNotInIterationStatement4.js deleted file mode 100644 index af2a4ee61b3..00000000000 --- a/tests/baselines/reference/parser_continueNotInIterationStatement4.js +++ /dev/null @@ -1,15 +0,0 @@ -//// [parser_continueNotInIterationStatement4.ts] -TWO: -while (true){ - var x = () => { - continue TWO; - } -} - - -//// [parser_continueNotInIterationStatement4.js] -TWO: while (true) { - var x = function () { - continue TWO; - }; -} diff --git a/tests/baselines/reference/parser_continueTarget1.errors.txt b/tests/baselines/reference/parser_continueTarget1.errors.txt new file mode 100644 index 00000000000..0870792fbc8 --- /dev/null +++ b/tests/baselines/reference/parser_continueTarget1.errors.txt @@ -0,0 +1,5 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueTarget1.ts (1 errors) ==== + target: + continue target; + ~~~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueTarget1.js b/tests/baselines/reference/parser_continueTarget1.js deleted file mode 100644 index fd6ea5750c6..00000000000 --- a/tests/baselines/reference/parser_continueTarget1.js +++ /dev/null @@ -1,6 +0,0 @@ -//// [parser_continueTarget1.ts] -target: - continue target; - -//// [parser_continueTarget1.js] -target: continue target; diff --git a/tests/baselines/reference/parser_continueTarget5.errors.txt b/tests/baselines/reference/parser_continueTarget5.errors.txt new file mode 100644 index 00000000000..e9e7d6f6ff8 --- /dev/null +++ b/tests/baselines/reference/parser_continueTarget5.errors.txt @@ -0,0 +1,11 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueTarget5.ts (1 errors) ==== + target: + while (true) { + function f() { + while (true) { + continue target; + ~~~~~~~~~~~~~~~~ +!!! Jump target cannot cross function boundary. + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueTarget5.js b/tests/baselines/reference/parser_continueTarget5.js deleted file mode 100644 index 7be6997c070..00000000000 --- a/tests/baselines/reference/parser_continueTarget5.js +++ /dev/null @@ -1,18 +0,0 @@ -//// [parser_continueTarget5.ts] -target: -while (true) { - function f() { - while (true) { - continue target; - } - } -} - -//// [parser_continueTarget5.js] -target: while (true) { - function f() { - while (true) { - continue target; - } - } -} diff --git a/tests/baselines/reference/parser_continueTarget6.errors.txt b/tests/baselines/reference/parser_continueTarget6.errors.txt new file mode 100644 index 00000000000..3b2e0fe7c06 --- /dev/null +++ b/tests/baselines/reference/parser_continueTarget6.errors.txt @@ -0,0 +1,6 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueTarget6.ts (1 errors) ==== + while (true) { + continue target; + ~~~~~~~~~~~~~~~~ +!!! A 'continue' statement can only jump to a label of an enclosing iteration statement. + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueTarget6.js b/tests/baselines/reference/parser_continueTarget6.js deleted file mode 100644 index 56f1b6a485c..00000000000 --- a/tests/baselines/reference/parser_continueTarget6.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [parser_continueTarget6.ts] -while (true) { - continue target; -} - -//// [parser_continueTarget6.js] -while (true) { - continue target; -} diff --git a/tests/baselines/reference/parser_duplicateLabel1.errors.txt b/tests/baselines/reference/parser_duplicateLabel1.errors.txt new file mode 100644 index 00000000000..611fd108c6f --- /dev/null +++ b/tests/baselines/reference/parser_duplicateLabel1.errors.txt @@ -0,0 +1,7 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/LabeledStatements/parser_duplicateLabel1.ts (1 errors) ==== + target: + target: + ~~~~~~ +!!! Duplicate label 'target' + while (true) { + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_duplicateLabel1.js b/tests/baselines/reference/parser_duplicateLabel1.js deleted file mode 100644 index 0fe1801a099..00000000000 --- a/tests/baselines/reference/parser_duplicateLabel1.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [parser_duplicateLabel1.ts] -target: -target: -while (true) { -} - -//// [parser_duplicateLabel1.js] -target: target: while (true) { -} diff --git a/tests/baselines/reference/parser_duplicateLabel2.errors.txt b/tests/baselines/reference/parser_duplicateLabel2.errors.txt new file mode 100644 index 00000000000..23bca695a49 --- /dev/null +++ b/tests/baselines/reference/parser_duplicateLabel2.errors.txt @@ -0,0 +1,9 @@ +==== tests/cases/conformance/parser/ecmascript5/Statements/LabeledStatements/parser_duplicateLabel2.ts (1 errors) ==== + target: + while (true) { + target: + ~~~~~~ +!!! Duplicate label 'target' + while (true) { + } + } \ No newline at end of file diff --git a/tests/baselines/reference/parser_duplicateLabel2.js b/tests/baselines/reference/parser_duplicateLabel2.js deleted file mode 100644 index 00c0e5532e5..00000000000 --- a/tests/baselines/reference/parser_duplicateLabel2.js +++ /dev/null @@ -1,13 +0,0 @@ -//// [parser_duplicateLabel2.ts] -target: -while (true) { - target: - while (true) { - } -} - -//// [parser_duplicateLabel2.js] -target: while (true) { - target: while (true) { - } -} diff --git a/tests/cases/compiler/breakInIterationOrSwitchStatement1.ts b/tests/cases/compiler/breakInIterationOrSwitchStatement1.ts deleted file mode 100644 index 831d2bd7faa..00000000000 --- a/tests/cases/compiler/breakInIterationOrSwitchStatement1.ts +++ /dev/null @@ -1,3 +0,0 @@ -while (true) { - break; -} \ No newline at end of file diff --git a/tests/cases/compiler/breakInIterationOrSwitchStatement2.ts b/tests/cases/compiler/breakInIterationOrSwitchStatement2.ts deleted file mode 100644 index e502557f3bc..00000000000 --- a/tests/cases/compiler/breakInIterationOrSwitchStatement2.ts +++ /dev/null @@ -1,4 +0,0 @@ -do { - break; -} -while (true); \ No newline at end of file diff --git a/tests/cases/compiler/breakInIterationOrSwitchStatement3.ts b/tests/cases/compiler/breakInIterationOrSwitchStatement3.ts deleted file mode 100644 index 19858da08b2..00000000000 --- a/tests/cases/compiler/breakInIterationOrSwitchStatement3.ts +++ /dev/null @@ -1,3 +0,0 @@ -for (;;) { - break; -} \ No newline at end of file diff --git a/tests/cases/compiler/breakInIterationOrSwitchStatement4.ts b/tests/cases/compiler/breakInIterationOrSwitchStatement4.ts deleted file mode 100644 index da939495217..00000000000 --- a/tests/cases/compiler/breakInIterationOrSwitchStatement4.ts +++ /dev/null @@ -1,3 +0,0 @@ -for (var i in something) { - break; -} \ No newline at end of file diff --git a/tests/cases/compiler/breakTarget1.ts b/tests/cases/compiler/breakTarget1.ts deleted file mode 100644 index 03f96cbc602..00000000000 --- a/tests/cases/compiler/breakTarget1.ts +++ /dev/null @@ -1,2 +0,0 @@ -target: - break target; \ No newline at end of file diff --git a/tests/cases/compiler/breakTarget2.ts b/tests/cases/compiler/breakTarget2.ts deleted file mode 100644 index daa11e45b95..00000000000 --- a/tests/cases/compiler/breakTarget2.ts +++ /dev/null @@ -1,4 +0,0 @@ -target: -while (true) { - break target; -} \ No newline at end of file diff --git a/tests/cases/compiler/breakTarget3.ts b/tests/cases/compiler/breakTarget3.ts deleted file mode 100644 index 9cef599692c..00000000000 --- a/tests/cases/compiler/breakTarget3.ts +++ /dev/null @@ -1,5 +0,0 @@ -target1: -target2: -while (true) { - break target1; -} \ No newline at end of file diff --git a/tests/cases/compiler/breakTarget4.ts b/tests/cases/compiler/breakTarget4.ts deleted file mode 100644 index 2c3eadca7db..00000000000 --- a/tests/cases/compiler/breakTarget4.ts +++ /dev/null @@ -1,5 +0,0 @@ -target1: -target2: -while (true) { - break target2; -} \ No newline at end of file diff --git a/tests/cases/compiler/breakTarget5.ts b/tests/cases/compiler/breakTarget5.ts deleted file mode 100644 index a05ee1cf879..00000000000 --- a/tests/cases/compiler/breakTarget5.ts +++ /dev/null @@ -1,8 +0,0 @@ -target: -while (true) { - function f() { - while (true) { - break target; - } - } -} \ No newline at end of file diff --git a/tests/cases/compiler/breakTarget6.ts b/tests/cases/compiler/breakTarget6.ts deleted file mode 100644 index bd94d0030e3..00000000000 --- a/tests/cases/compiler/breakTarget6.ts +++ /dev/null @@ -1,3 +0,0 @@ -while (true) { - break target; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueInIterationStatement1.ts b/tests/cases/compiler/continueInIterationStatement1.ts deleted file mode 100644 index 89b9743144c..00000000000 --- a/tests/cases/compiler/continueInIterationStatement1.ts +++ /dev/null @@ -1,3 +0,0 @@ -while (true) { - continue; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueInIterationStatement2.ts b/tests/cases/compiler/continueInIterationStatement2.ts deleted file mode 100644 index 40bb1c438af..00000000000 --- a/tests/cases/compiler/continueInIterationStatement2.ts +++ /dev/null @@ -1,4 +0,0 @@ -do { - continue; -} -while (true); \ No newline at end of file diff --git a/tests/cases/compiler/continueInIterationStatement3.ts b/tests/cases/compiler/continueInIterationStatement3.ts deleted file mode 100644 index 3b23060504c..00000000000 --- a/tests/cases/compiler/continueInIterationStatement3.ts +++ /dev/null @@ -1,3 +0,0 @@ -for (;;) { - continue; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueInIterationStatement4.ts b/tests/cases/compiler/continueInIterationStatement4.ts deleted file mode 100644 index 9bd164bc366..00000000000 --- a/tests/cases/compiler/continueInIterationStatement4.ts +++ /dev/null @@ -1,3 +0,0 @@ -for (var i in something) { - continue; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueLabel.ts b/tests/cases/compiler/continueLabel.ts deleted file mode 100644 index a3c36c4a263..00000000000 --- a/tests/cases/compiler/continueLabel.ts +++ /dev/null @@ -1,3 +0,0 @@ -label1: for(var i = 0; i < 1; i++) { - continue label1; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueNotInIterationStatement4.ts b/tests/cases/compiler/continueNotInIterationStatement4.ts deleted file mode 100644 index 5996eb4323a..00000000000 --- a/tests/cases/compiler/continueNotInIterationStatement4.ts +++ /dev/null @@ -1,6 +0,0 @@ -TWO: -while (true){ - var x = () => { - continue TWO; - } -} diff --git a/tests/cases/compiler/continueTarget1.ts b/tests/cases/compiler/continueTarget1.ts deleted file mode 100644 index 7235f96bac8..00000000000 --- a/tests/cases/compiler/continueTarget1.ts +++ /dev/null @@ -1,2 +0,0 @@ -target: - continue target; \ No newline at end of file diff --git a/tests/cases/compiler/continueTarget2.ts b/tests/cases/compiler/continueTarget2.ts deleted file mode 100644 index 8b57308a2df..00000000000 --- a/tests/cases/compiler/continueTarget2.ts +++ /dev/null @@ -1,4 +0,0 @@ -target: -while (true) { - continue target; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueTarget3.ts b/tests/cases/compiler/continueTarget3.ts deleted file mode 100644 index 26bea241a7a..00000000000 --- a/tests/cases/compiler/continueTarget3.ts +++ /dev/null @@ -1,5 +0,0 @@ -target1: -target2: -while (true) { - continue target1; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueTarget4.ts b/tests/cases/compiler/continueTarget4.ts deleted file mode 100644 index e00c222aa9c..00000000000 --- a/tests/cases/compiler/continueTarget4.ts +++ /dev/null @@ -1,5 +0,0 @@ -target1: -target2: -while (true) { - continue target2; -} \ No newline at end of file diff --git a/tests/cases/compiler/continueTarget5.ts b/tests/cases/compiler/continueTarget5.ts deleted file mode 100644 index dd3a806ab2d..00000000000 --- a/tests/cases/compiler/continueTarget5.ts +++ /dev/null @@ -1,8 +0,0 @@ -target: -while (true) { - function f() { - while (true) { - continue target; - } - } -} \ No newline at end of file diff --git a/tests/cases/compiler/continueTarget6.ts b/tests/cases/compiler/continueTarget6.ts deleted file mode 100644 index bcdda2ab5e1..00000000000 --- a/tests/cases/compiler/continueTarget6.ts +++ /dev/null @@ -1,3 +0,0 @@ -while (true) { - continue target; -} \ No newline at end of file diff --git a/tests/cases/compiler/duplicateLabel1.ts b/tests/cases/compiler/duplicateLabel1.ts deleted file mode 100644 index c588e7b8183..00000000000 --- a/tests/cases/compiler/duplicateLabel1.ts +++ /dev/null @@ -1,4 +0,0 @@ -target: -target: -while (true) { -} \ No newline at end of file diff --git a/tests/cases/compiler/duplicateLabel2.ts b/tests/cases/compiler/duplicateLabel2.ts deleted file mode 100644 index bdb0396a246..00000000000 --- a/tests/cases/compiler/duplicateLabel2.ts +++ /dev/null @@ -1,6 +0,0 @@ -target: -while (true) { - target: - while (true) { - } -} \ No newline at end of file diff --git a/tests/cases/compiler/duplicateLabel3.ts b/tests/cases/compiler/duplicateLabel3.ts deleted file mode 100644 index d4db9399ed2..00000000000 --- a/tests/cases/compiler/duplicateLabel3.ts +++ /dev/null @@ -1,8 +0,0 @@ -target: -while (true) { - function f() { - target: - while (true) { - } - } -} \ No newline at end of file diff --git a/tests/cases/compiler/duplicateLabel4.ts b/tests/cases/compiler/duplicateLabel4.ts deleted file mode 100644 index 2c62180a2ab..00000000000 --- a/tests/cases/compiler/duplicateLabel4.ts +++ /dev/null @@ -1,7 +0,0 @@ -target: -while (true) { -} - -target: -while (true) { -} \ No newline at end of file diff --git a/tests/cases/compiler/breakNotInIterationOrSwitchStatement1.ts b/tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakNotInIterationOrSwitchStatement1.ts similarity index 100% rename from tests/cases/compiler/breakNotInIterationOrSwitchStatement1.ts rename to tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakNotInIterationOrSwitchStatement1.ts diff --git a/tests/cases/compiler/breakNotInIterationOrSwitchStatement2.ts b/tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakNotInIterationOrSwitchStatement2.ts similarity index 100% rename from tests/cases/compiler/breakNotInIterationOrSwitchStatement2.ts rename to tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakNotInIterationOrSwitchStatement2.ts diff --git a/tests/cases/compiler/continueNotInIterationStatement1.ts b/tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement1.ts similarity index 100% rename from tests/cases/compiler/continueNotInIterationStatement1.ts rename to tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement1.ts diff --git a/tests/cases/compiler/continueNotInIterationStatement2.ts b/tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement2.ts similarity index 100% rename from tests/cases/compiler/continueNotInIterationStatement2.ts rename to tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement2.ts diff --git a/tests/cases/compiler/continueNotInIterationStatement3.ts b/tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement3.ts similarity index 100% rename from tests/cases/compiler/continueNotInIterationStatement3.ts rename to tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueNotInIterationStatement3.ts