diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index caa62b7ae9e..79140cff165 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3916,14 +3916,14 @@ module ts { } function parseSourceElement() { - return parseSourceElementOrModuleElement(ModifierContext.SourceElements, /*allowLetAndConstDeclarations*/ false); + return parseSourceElementOrModuleElement(ModifierContext.SourceElements); } function parseModuleElement() { - return parseSourceElementOrModuleElement(ModifierContext.ModuleElements, /*allowLetAndConstDeclarations*/ true); + return parseSourceElementOrModuleElement(ModifierContext.ModuleElements); } - function parseSourceElementOrModuleElement(modifierContext: ModifierContext, allowLetAndConstDeclarations: boolean): Statement { + function parseSourceElementOrModuleElement(modifierContext: ModifierContext): Statement { if (isDeclaration()) { return parseDeclaration(modifierContext); } @@ -3931,7 +3931,7 @@ module ts { var statementStart = scanner.getTokenPos(); var statementFirstTokenLength = scanner.getTextPos() - statementStart; var errorCountBeforeStatement = file.syntacticErrors.length; - var statement = parseStatement(allowLetAndConstDeclarations); + var statement = parseStatement(/*allowLetAndConstDeclarations*/ true); if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) { grammarErrorAtPos(statementStart, statementFirstTokenLength, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); diff --git a/tests/baselines/reference/letDeclarations-validContexts.errors.txt b/tests/baselines/reference/letDeclarations-validContexts.errors.txt index de6cf7beef4..3f3b7a2634f 100644 --- a/tests/baselines/reference/letDeclarations-validContexts.errors.txt +++ b/tests/baselines/reference/letDeclarations-validContexts.errors.txt @@ -126,4 +126,24 @@ tests/cases/compiler/letDeclarations-validContexts.ts(20,7): error TS2410: All s f2: () => { let l29 = 0; } + } + + // labels + label: let l30 = 0; + { + label2: let l31 = 0; + } + + function f3() { + label: let l32 = 0; + { + label2: let l33 = 0; + } + } + + module m3 { + label: let l34 = 0; + { + label2: let l35 = 0; + } } \ No newline at end of file diff --git a/tests/baselines/reference/letDeclarations-validContexts.js b/tests/baselines/reference/letDeclarations-validContexts.js index daa25014ab3..13eaafb0712 100644 --- a/tests/baselines/reference/letDeclarations-validContexts.js +++ b/tests/baselines/reference/letDeclarations-validContexts.js @@ -121,6 +121,26 @@ var o = { f2: () => { let l29 = 0; } +} + +// labels +label: let l30 = 0; +{ + label2: let l31 = 0; +} + +function f3() { + label: let l32 = 0; + { + label2: let l33 = 0; + } +} + +module m3 { + label: let l34 = 0; + { + label2: let l35 = 0; + } } //// [letDeclarations-validContexts.js] @@ -227,3 +247,20 @@ var o = { let l29 = 0; } }; +label: let l30 = 0; +{ + label2: let l31 = 0; +} +function f3() { + label: let l32 = 0; + { + label2: let l33 = 0; + } +} +var m3; +(function (m3) { + label: let l34 = 0; + { + label2: let l35 = 0; + } +})(m3 || (m3 = {})); diff --git a/tests/cases/compiler/letDeclarations-validContexts.ts b/tests/cases/compiler/letDeclarations-validContexts.ts index 32801f2d009..baedfa2644c 100644 --- a/tests/cases/compiler/letDeclarations-validContexts.ts +++ b/tests/cases/compiler/letDeclarations-validContexts.ts @@ -121,4 +121,24 @@ var o = { f2: () => { let l29 = 0; } +} + +// labels +label: let l30 = 0; +{ + label2: let l31 = 0; +} + +function f3() { + label: let l32 = 0; + { + label2: let l33 = 0; + } +} + +module m3 { + label: let l34 = 0; + { + label2: let l35 = 0; + } } \ No newline at end of file