Skip to content

Commit 8286b67

Browse files
committed
Fixed another bug in parser & fixed up baselines
1 parent c77135d commit 8286b67

34 files changed

+204
-216
lines changed

src/compiler/parser.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3674,7 +3674,8 @@ module ts {
36743674
var errorCountBeforeEnumMember = file.syntacticErrors.length;
36753675
node.name = parsePropertyName();
36763676

3677-
if(!isNaN(Number(node.name.text))) {
3677+
// number("") returns 0 so we have to special case it
3678+
if(node.name.text !== "" && !isNaN(Number(node.name.text))) {
36783679
grammarErrorOnNode(node.name, Diagnostics.An_enum_member_cannot_have_a_numeric_name);
36793680
}
36803681

tests/baselines/reference/bitwiseNotOperatorWithEnumType.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//// [bitwiseNotOperatorWithEnumType.ts]
22
// ~ operator on enum type
33

4-
enum ENUM1 { 1, 2, "" };
4+
enum ENUM1 { A, B, "" };
55

66
// enum type var
77
var ResultIsNumber1 = ~ENUM1;
@@ -22,8 +22,8 @@ var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]);
2222
// ~ operator on enum type
2323
var ENUM1;
2424
(function (ENUM1) {
25-
ENUM1[ENUM1["1"] = 0] = "1";
26-
ENUM1[ENUM1["2"] = 1] = "2";
25+
ENUM1[ENUM1["A"] = 0] = "A";
26+
ENUM1[ENUM1["B"] = 1] = "B";
2727
ENUM1[ENUM1[""] = 2] = "";
2828
})(ENUM1 || (ENUM1 = {}));
2929
;
Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
=== tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithEnumType.ts ===
22
// ~ operator on enum type
33

4-
enum ENUM1 { 1, 2, "" };
4+
enum ENUM1 { A, B, "" };
55
>ENUM1 : ENUM1
6+
>A : ENUM1
7+
>B : ENUM1
68

79
// enum type var
810
var ResultIsNumber1 = ~ENUM1;
@@ -14,17 +16,17 @@ var ResultIsNumber1 = ~ENUM1;
1416
var ResultIsNumber2 = ~ENUM1[1];
1517
>ResultIsNumber2 : number
1618
>~ENUM1[1] : number
17-
>ENUM1[1] : ENUM1
19+
>ENUM1[1] : string
1820
>ENUM1 : typeof ENUM1
1921

2022
var ResultIsNumber3 = ~(ENUM1[1] + ENUM1[2]);
2123
>ResultIsNumber3 : number
2224
>~(ENUM1[1] + ENUM1[2]) : number
23-
>(ENUM1[1] + ENUM1[2]) : number
24-
>ENUM1[1] + ENUM1[2] : number
25-
>ENUM1[1] : ENUM1
25+
>(ENUM1[1] + ENUM1[2]) : string
26+
>ENUM1[1] + ENUM1[2] : string
27+
>ENUM1[1] : string
2628
>ENUM1 : typeof ENUM1
27-
>ENUM1[2] : ENUM1
29+
>ENUM1[2] : string
2830
>ENUM1 : typeof ENUM1
2931

3032
// multiple ~ operators
@@ -33,11 +35,11 @@ var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]);
3335
>~~~(ENUM1[1] + ENUM1[2]) : number
3436
>~~(ENUM1[1] + ENUM1[2]) : number
3537
>~(ENUM1[1] + ENUM1[2]) : number
36-
>(ENUM1[1] + ENUM1[2]) : number
37-
>ENUM1[1] + ENUM1[2] : number
38-
>ENUM1[1] : ENUM1
38+
>(ENUM1[1] + ENUM1[2]) : string
39+
>ENUM1[1] + ENUM1[2] : string
40+
>ENUM1[1] : string
3941
>ENUM1 : typeof ENUM1
40-
>ENUM1[2] : ENUM1
42+
>ENUM1[2] : string
4143
>ENUM1 : typeof ENUM1
4244

4345
// miss assignment operators
@@ -47,15 +49,15 @@ var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]);
4749

4850
~ENUM1[1];
4951
>~ENUM1[1] : number
50-
>ENUM1[1] : ENUM1
52+
>ENUM1[1] : string
5153
>ENUM1 : typeof ENUM1
5254

5355
~ENUM1[1], ~ENUM1[2];
5456
>~ENUM1[1], ~ENUM1[2] : number
5557
>~ENUM1[1] : number
56-
>ENUM1[1] : ENUM1
58+
>ENUM1[1] : string
5759
>ENUM1 : typeof ENUM1
5860
>~ENUM1[2] : number
59-
>ENUM1[2] : ENUM1
61+
>ENUM1[2] : string
6062
>ENUM1 : typeof ENUM1
6163

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts(6,25): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
2+
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts(7,23): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
3+
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts(10,3): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
4+
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts(12,1): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
5+
6+
7+
==== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts (4 errors) ====
8+
// -- operator on enum type
9+
10+
enum ENUM1 { A, B, "" };
11+
12+
// expression
13+
var ResultIsNumber1 = --ENUM1[1];
14+
~~~~~~~~
15+
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
16+
var ResultIsNumber2 = ENUM1[1]--;
17+
~~~~~~~~
18+
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
19+
20+
// miss assignment operator
21+
--ENUM1[1];
22+
~~~~~~~~
23+
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
24+
25+
ENUM1[1]--;
26+
~~~~~~~~
27+
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.

tests/baselines/reference/decrementOperatorWithEnumType.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//// [decrementOperatorWithEnumType.ts]
22
// -- operator on enum type
33

4-
enum ENUM1 { 1, 2, "" };
4+
enum ENUM1 { A, B, "" };
55

66
// expression
77
var ResultIsNumber1 = --ENUM1[1];
@@ -16,8 +16,8 @@ ENUM1[1]--;
1616
// -- operator on enum type
1717
var ENUM1;
1818
(function (ENUM1) {
19-
ENUM1[ENUM1["1"] = 0] = "1";
20-
ENUM1[ENUM1["2"] = 1] = "2";
19+
ENUM1[ENUM1["A"] = 0] = "A";
20+
ENUM1[ENUM1["B"] = 1] = "B";
2121
ENUM1[ENUM1[""] = 2] = "";
2222
})(ENUM1 || (ENUM1 = {}));
2323
;

tests/baselines/reference/decrementOperatorWithEnumType.types

Lines changed: 0 additions & 30 deletions
This file was deleted.

tests/baselines/reference/decrementOperatorWithEnumTypeInvalidOperations.errors.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOp
1414
// -- operator on enum type
1515

1616
enum ENUM { };
17-
enum ENUM1 { 1, 2, "" };
17+
enum ENUM1 { A, B, "" };
1818

1919
// enum type var
2020
var ResultIsNumber1 = --ENUM;

tests/baselines/reference/decrementOperatorWithEnumTypeInvalidOperations.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// -- operator on enum type
33

44
enum ENUM { };
5-
enum ENUM1 { 1, 2, "" };
5+
enum ENUM1 { A, B, "" };
66

77
// enum type var
88
var ResultIsNumber1 = --ENUM;
@@ -30,8 +30,8 @@ var ENUM;
3030
;
3131
var ENUM1;
3232
(function (ENUM1) {
33-
ENUM1[ENUM1["1"] = 0] = "1";
34-
ENUM1[ENUM1["2"] = 1] = "2";
33+
ENUM1[ENUM1["A"] = 0] = "A";
34+
ENUM1[ENUM1["B"] = 1] = "B";
3535
ENUM1[ENUM1[""] = 2] = "";
3636
})(ENUM1 || (ENUM1 = {}));
3737
;

tests/baselines/reference/deleteOperatorWithEnumType.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// delete operator on enum type
33

44
enum ENUM { };
5-
enum ENUM1 { 1, 2, "" };
5+
enum ENUM1 { A, B, "" };
66

77
// enum type var
88
var ResultIsBoolean1 = delete ENUM;
@@ -30,8 +30,8 @@ var ENUM;
3030
;
3131
var ENUM1;
3232
(function (ENUM1) {
33-
ENUM1[ENUM1["1"] = 0] = "1";
34-
ENUM1[ENUM1["2"] = 1] = "2";
33+
ENUM1[ENUM1["A"] = 0] = "A";
34+
ENUM1[ENUM1["B"] = 1] = "B";
3535
ENUM1[ENUM1[""] = 2] = "";
3636
})(ENUM1 || (ENUM1 = {}));
3737
;

tests/baselines/reference/deleteOperatorWithEnumType.types

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
enum ENUM { };
55
>ENUM : ENUM
66

7-
enum ENUM1 { 1, 2, "" };
7+
enum ENUM1 { A, B, "" };
88
>ENUM1 : ENUM1
9+
>A : ENUM1
10+
>B : ENUM1
911

1012
// enum type var
1113
var ResultIsBoolean1 = delete ENUM;
@@ -32,7 +34,7 @@ var ResultIsBoolean4 = delete (ENUM[0] + ENUM1[1]);
3234
>ENUM[0] + ENUM1[1] : string
3335
>ENUM[0] : string
3436
>ENUM : typeof ENUM
35-
>ENUM1[1] : ENUM1
37+
>ENUM1[1] : string
3638
>ENUM1 : typeof ENUM1
3739

3840
// multiple delete operators
@@ -51,7 +53,7 @@ var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1[1]);
5153
>ENUM[0] + ENUM1[1] : string
5254
>ENUM[0] : string
5355
>ENUM : typeof ENUM
54-
>ENUM1[1] : ENUM1
56+
>ENUM1[1] : string
5557
>ENUM1 : typeof ENUM1
5658

5759
// miss assignment operators
@@ -65,7 +67,7 @@ delete ENUM1;
6567

6668
delete ENUM1[1];
6769
>delete ENUM1[1] : boolean
68-
>ENUM1[1] : ENUM1
70+
>ENUM1[1] : string
6971
>ENUM1 : typeof ENUM1
7072

7173
delete ENUM, ENUM1;

0 commit comments

Comments
 (0)