Skip to content

Commit 3f751a7

Browse files
committed
Merge pull request #4507 from Microsoft/port-4474
Port PR 4474 into release-1.6
2 parents a17e1fe + d29964a commit 3f751a7

File tree

7 files changed

+78
-5
lines changed

7 files changed

+78
-5
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13053,7 +13053,7 @@ namespace ts {
1305313053
// illegal case: forward reference
1305413054
if (!isDefinedBefore(propertyDecl, member)) {
1305513055
reportError = false;
13056-
error(e, Diagnostics.A_member_initializer_in_a_const_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_const_enums);
13056+
error(e, Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums);
1305713057
return undefined;
1305813058
}
1305913059

src/compiler/diagnosticInformationMap.generated.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ namespace ts {
425425
JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property: { code: 2607, category: DiagnosticCategory.Error, key: "JSX element class does not support attributes because it does not have a '{0}' property" },
426426
The_global_type_JSX_0_may_not_have_more_than_one_property: { code: 2608, category: DiagnosticCategory.Error, key: "The global type 'JSX.{0}' may not have more than one property" },
427427
Cannot_emit_namespaced_JSX_elements_in_React: { code: 2650, category: DiagnosticCategory.Error, key: "Cannot emit namespaced JSX elements in React" },
428-
A_member_initializer_in_a_const_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_const_enums: { code: 2651, category: DiagnosticCategory.Error, key: "A member initializer in a 'const' enum declaration cannot reference members declared after it, including members defined in other 'const' enums." },
428+
A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: { code: 2651, category: DiagnosticCategory.Error, key: "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums." },
429429
Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: { code: 2652, category: DiagnosticCategory.Error, key: "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead." },
430430
Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." },
431431
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },

src/compiler/diagnosticMessages.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1689,7 +1689,7 @@
16891689
"category": "Error",
16901690
"code": 2650
16911691
},
1692-
"A member initializer in a 'const' enum declaration cannot reference members declared after it, including members defined in other 'const' enums.": {
1692+
"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.": {
16931693
"category": "Error",
16941694
"code": 2651
16951695
},

tests/baselines/reference/constEnumErrors.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
tests/cases/compiler/constEnumErrors.ts(1,12): error TS2300: Duplicate identifier 'E'.
22
tests/cases/compiler/constEnumErrors.ts(5,8): error TS2300: Duplicate identifier 'E'.
3-
tests/cases/compiler/constEnumErrors.ts(12,9): error TS2651: A member initializer in a 'const' enum declaration cannot reference members declared after it, including members defined in other 'const' enums.
3+
tests/cases/compiler/constEnumErrors.ts(12,9): error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
44
tests/cases/compiler/constEnumErrors.ts(14,9): error TS2474: In 'const' enum declarations member initializer must be constant expression.
55
tests/cases/compiler/constEnumErrors.ts(15,10): error TS2474: In 'const' enum declarations member initializer must be constant expression.
66
tests/cases/compiler/constEnumErrors.ts(22,13): error TS2476: A const enum member can only be accessed using a string literal.
@@ -31,7 +31,7 @@ tests/cases/compiler/constEnumErrors.ts(42,9): error TS2478: 'const' enum member
3131
// forward reference to the element of the same enum
3232
X = Y,
3333
~
34-
!!! error TS2651: A member initializer in a 'const' enum declaration cannot reference members declared after it, including members defined in other 'const' enums.
34+
!!! error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
3535
// forward reference to the element of the same enum
3636
Y = E1.Z,
3737
~~~~
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
tests/cases/compiler/forwardRefInEnum.ts(4,9): error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
2+
tests/cases/compiler/forwardRefInEnum.ts(5,10): error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
3+
tests/cases/compiler/forwardRefInEnum.ts(7,9): error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
4+
tests/cases/compiler/forwardRefInEnum.ts(8,10): error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
5+
6+
7+
==== tests/cases/compiler/forwardRefInEnum.ts (4 errors) ====
8+
enum E1 {
9+
// illegal case
10+
// forward reference to the element of the same enum
11+
X = Y,
12+
~
13+
!!! error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
14+
X1 = E1["Y"],
15+
~~~~~~~
16+
!!! error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
17+
// forward reference to the element of the same enum
18+
Y = E1.Z,
19+
~~~~
20+
!!! error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
21+
Y1 = E1["Z"]
22+
~~~~~~~
23+
!!! error TS2651: A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
24+
}
25+
26+
enum E1 {
27+
Z = 4
28+
}
29+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//// [forwardRefInEnum.ts]
2+
enum E1 {
3+
// illegal case
4+
// forward reference to the element of the same enum
5+
X = Y,
6+
X1 = E1["Y"],
7+
// forward reference to the element of the same enum
8+
Y = E1.Z,
9+
Y1 = E1["Z"]
10+
}
11+
12+
enum E1 {
13+
Z = 4
14+
}
15+
16+
17+
//// [forwardRefInEnum.js]
18+
var E1;
19+
(function (E1) {
20+
// illegal case
21+
// forward reference to the element of the same enum
22+
E1[E1["X"] = E1.Y] = "X";
23+
E1[E1["X1"] = E1["Y"]] = "X1";
24+
// forward reference to the element of the same enum
25+
E1[E1["Y"] = E1.Z] = "Y";
26+
E1[E1["Y1"] = E1["Z"]] = "Y1";
27+
})(E1 || (E1 = {}));
28+
var E1;
29+
(function (E1) {
30+
E1[E1["Z"] = 4] = "Z";
31+
})(E1 || (E1 = {}));
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
enum E1 {
2+
// illegal case
3+
// forward reference to the element of the same enum
4+
X = Y,
5+
X1 = E1["Y"],
6+
// forward reference to the element of the same enum
7+
Y = E1.Z,
8+
Y1 = E1["Z"]
9+
}
10+
11+
enum E1 {
12+
Z = 4
13+
}

0 commit comments

Comments
 (0)