Skip to content

Commit e4a2084

Browse files
committed
Ensure let and const declarations in labels are parsed correctelly
1 parent d1858d0 commit e4a2084

4 files changed

Lines changed: 81 additions & 4 deletions

File tree

src/compiler/parser.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3916,22 +3916,22 @@ module ts {
39163916
}
39173917

39183918
function parseSourceElement() {
3919-
return parseSourceElementOrModuleElement(ModifierContext.SourceElements, /*allowLetAndConstDeclarations*/ false);
3919+
return parseSourceElementOrModuleElement(ModifierContext.SourceElements);
39203920
}
39213921

39223922
function parseModuleElement() {
3923-
return parseSourceElementOrModuleElement(ModifierContext.ModuleElements, /*allowLetAndConstDeclarations*/ true);
3923+
return parseSourceElementOrModuleElement(ModifierContext.ModuleElements);
39243924
}
39253925

3926-
function parseSourceElementOrModuleElement(modifierContext: ModifierContext, allowLetAndConstDeclarations: boolean): Statement {
3926+
function parseSourceElementOrModuleElement(modifierContext: ModifierContext): Statement {
39273927
if (isDeclaration()) {
39283928
return parseDeclaration(modifierContext);
39293929
}
39303930

39313931
var statementStart = scanner.getTokenPos();
39323932
var statementFirstTokenLength = scanner.getTextPos() - statementStart;
39333933
var errorCountBeforeStatement = file.syntacticErrors.length;
3934-
var statement = parseStatement(allowLetAndConstDeclarations);
3934+
var statement = parseStatement(/*allowLetAndConstDeclarations*/ true);
39353935

39363936
if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) {
39373937
grammarErrorAtPos(statementStart, statementFirstTokenLength, Diagnostics.Statements_are_not_allowed_in_ambient_contexts);

tests/baselines/reference/letDeclarations-validContexts.errors.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,24 @@ tests/cases/compiler/letDeclarations-validContexts.ts(20,7): error TS2410: All s
126126
f2: () => {
127127
let l29 = 0;
128128
}
129+
}
130+
131+
// labels
132+
label: let l30 = 0;
133+
{
134+
label2: let l31 = 0;
135+
}
136+
137+
function f3() {
138+
label: let l32 = 0;
139+
{
140+
label2: let l33 = 0;
141+
}
142+
}
143+
144+
module m3 {
145+
label: let l34 = 0;
146+
{
147+
label2: let l35 = 0;
148+
}
129149
}

tests/baselines/reference/letDeclarations-validContexts.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,26 @@ var o = {
121121
f2: () => {
122122
let l29 = 0;
123123
}
124+
}
125+
126+
// labels
127+
label: let l30 = 0;
128+
{
129+
label2: let l31 = 0;
130+
}
131+
132+
function f3() {
133+
label: let l32 = 0;
134+
{
135+
label2: let l33 = 0;
136+
}
137+
}
138+
139+
module m3 {
140+
label: let l34 = 0;
141+
{
142+
label2: let l35 = 0;
143+
}
124144
}
125145

126146
//// [letDeclarations-validContexts.js]
@@ -227,3 +247,20 @@ var o = {
227247
let l29 = 0;
228248
}
229249
};
250+
label: let l30 = 0;
251+
{
252+
label2: let l31 = 0;
253+
}
254+
function f3() {
255+
label: let l32 = 0;
256+
{
257+
label2: let l33 = 0;
258+
}
259+
}
260+
var m3;
261+
(function (m3) {
262+
label: let l34 = 0;
263+
{
264+
label2: let l35 = 0;
265+
}
266+
})(m3 || (m3 = {}));

tests/cases/compiler/letDeclarations-validContexts.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,24 @@ var o = {
121121
f2: () => {
122122
let l29 = 0;
123123
}
124+
}
125+
126+
// labels
127+
label: let l30 = 0;
128+
{
129+
label2: let l31 = 0;
130+
}
131+
132+
function f3() {
133+
label: let l32 = 0;
134+
{
135+
label2: let l33 = 0;
136+
}
137+
}
138+
139+
module m3 {
140+
label: let l34 = 0;
141+
{
142+
label2: let l35 = 0;
143+
}
124144
}

0 commit comments

Comments
 (0)