Skip to content

Commit 27cccdd

Browse files
committed
Merge pull request #3515 from Microsoft/classMemberWithMissingIdentifier
Parse class member with a missing identifier in the presence of a modifier
2 parents 1f58706 + 54edbae commit 27cccdd

7 files changed

+75
-2
lines changed

src/compiler/parser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4207,7 +4207,7 @@ module ts {
42074207
return parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers);
42084208
}
42094209

4210-
if (decorators) {
4210+
if (decorators || modifiers) {
42114211
// treat this as a property declaration with a missing name.
42124212
let name = <Identifier>createMissingNode(SyntaxKind.Identifier, /*reportAtCurrentPosition*/ true, Diagnostics.Declaration_expected);
42134213
return parsePropertyDeclaration(fullStart, decorators, modifiers, name, /*questionToken*/ undefined);
@@ -4729,7 +4729,7 @@ module ts {
47294729
case SyntaxKind.ImportKeyword:
47304730
return parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers);
47314731
default:
4732-
if (decorators) {
4732+
if (decorators || modifiers) {
47334733
// We reached this point because we encountered an AtToken and assumed a declaration would
47344734
// follow. For recovery and error reporting purposes, return an incomplete declaration.
47354735
let node = <ModuleElement>createMissingNode(SyntaxKind.MissingDeclaration, /*reportAtCurrentPosition*/ true, Diagnostics.Declaration_expected);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
tests/cases/compiler/classMemberWithMissingIdentifier.ts(2,11): error TS1146: Declaration expected.
2+
tests/cases/compiler/classMemberWithMissingIdentifier.ts(2,12): error TS1005: '=' expected.
3+
4+
5+
==== tests/cases/compiler/classMemberWithMissingIdentifier.ts (2 errors) ====
6+
class C {
7+
public {};
8+
9+
!!! error TS1146: Declaration expected.
10+
~
11+
!!! error TS1005: '=' expected.
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//// [classMemberWithMissingIdentifier.ts]
2+
class C {
3+
public {};
4+
}
5+
6+
//// [classMemberWithMissingIdentifier.js]
7+
var C = (function () {
8+
function C() {
9+
this. = {};
10+
}
11+
return C;
12+
})();
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,11): error TS1146: Declaration expected.
2+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,12): error TS1005: '=' expected.
3+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,14): error TS2304: Cannot find name 'name'.
4+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,18): error TS1005: ']' expected.
5+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,19): error TS2304: Cannot find name 'string'.
6+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,25): error TS1005: ',' expected.
7+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,26): error TS1136: Property assignment expected.
8+
tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,27): error TS2304: Cannot find name 'VariableDeclaration'.
9+
10+
11+
==== tests/cases/compiler/classMemberWithMissingIdentifier2.ts (8 errors) ====
12+
class C {
13+
public {[name:string]:VariableDeclaration};
14+
15+
!!! error TS1146: Declaration expected.
16+
~
17+
!!! error TS1005: '=' expected.
18+
~~~~
19+
!!! error TS2304: Cannot find name 'name'.
20+
~
21+
!!! error TS1005: ']' expected.
22+
~~~~~~
23+
!!! error TS2304: Cannot find name 'string'.
24+
~
25+
!!! error TS1005: ',' expected.
26+
~
27+
!!! error TS1136: Property assignment expected.
28+
~~~~~~~~~~~~~~~~~~~
29+
!!! error TS2304: Cannot find name 'VariableDeclaration'.
30+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [classMemberWithMissingIdentifier2.ts]
2+
class C {
3+
public {[name:string]:VariableDeclaration};
4+
}
5+
6+
//// [classMemberWithMissingIdentifier2.js]
7+
var C = (function () {
8+
function C() {
9+
this. = (_a = {}, _a[name] = string, _a.VariableDeclaration = VariableDeclaration, _a);
10+
var _a;
11+
}
12+
return C;
13+
})();
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class C {
2+
public {};
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class C {
2+
public {[name:string]:VariableDeclaration};
3+
}

0 commit comments

Comments
 (0)