Merge pull request #841 from chrisbubernak/disallowNumericEnumMembers

Fix for issue #134 (Disallow numeric enum members)
This commit is contained in:
Mohamed Hegazy
2014-10-10 16:24:12 -07:00
48 changed files with 462 additions and 433 deletions
+4 -1
View File
@@ -4084,7 +4084,7 @@ module ts {
}
function isNumericName(name: string) {
return !isNaN(<number><any>name);
return (name !== "") && !isNaN(<number><any>name);
}
function checkObjectLiteral(node: ObjectLiteral, contextualMapper?: TypeMapper): Type {
@@ -6643,6 +6643,9 @@ module ts {
var ambient = isInAmbientContext(node);
forEach(node.members, member => {
if(isNumericName(member.name.text)) {
error(member.name, Diagnostics.An_enum_member_cannot_have_a_numeric_name);
}
var initializer = member.initializer;
if (initializer) {
autoValue = getConstantValueForExpression(initializer);
@@ -114,6 +114,7 @@ module ts {
Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: DiagnosticCategory.Error, key: "Cannot compile external modules unless the '--module' flag is provided." },
Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: DiagnosticCategory.Error, key: "Filename '{0}' differs from already included filename '{1}' only in casing" },
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." },
An_enum_member_cannot_have_a_numeric_name: { code: 1151, category: DiagnosticCategory.Error, key: "An enum member cannot have a numeric name." },
Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." },
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." },
Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." },
+10 -6
View File
@@ -11,7 +11,7 @@
"category": "Error",
"code": 1005
},
"A file cannot have a reference to itself.": {
"A file cannot have a reference to itself.": {
"category": "Error",
"code": 1006
},
@@ -187,7 +187,7 @@
"category": "Error",
"code": 1066
},
"Unexpected token. A constructor, method, accessor, or property was expected." : {
"Unexpected token. A constructor, method, accessor, or property was expected.": {
"category": "Error",
"code": 1068
},
@@ -444,9 +444,13 @@
"code": 1149
},
"'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.": {
"category": "Error",
"code": 1150
},
"category": "Error",
"code": 1150
},
"An enum member cannot have a numeric name.": {
"category": "Error",
"code": 1151
},
"Duplicate identifier '{0}'.": {
"category": "Error",
@@ -556,7 +560,7 @@
"category": "Error",
"code": 2326
},
"Property '{0}' is optional in type '{1}' but required in type '{2}'.": {
"Property '{0}' is optional in type '{1}' but required in type '{2}'.": {
"category": "Error",
"code": 2327
},
@@ -1,40 +1,40 @@
//// [bitwiseNotOperatorWithEnumType.ts]
// ~ operator on enum type
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = ~ENUM1;
// enum type expressions
var ResultIsNumber2 = ~ENUM1[1];
var ResultIsNumber3 = ~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber2 = ~ENUM1["A"];
var ResultIsNumber3 = ~(ENUM1.A + ENUM1["B"]);
// multiple ~ operators
var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber4 = ~~~(ENUM1["A"] + ENUM1.B);
// miss assignment operators
~ENUM1;
~ENUM1[1];
~ENUM1[1], ~ENUM1[2];
~ENUM1["A"];
~ENUM1.A, ~ENUM1["B"];
//// [bitwiseNotOperatorWithEnumType.js]
// ~ operator on enum type
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
// enum type var
var ResultIsNumber1 = ~ENUM1;
// enum type expressions
var ResultIsNumber2 = ~ENUM1[1];
var ResultIsNumber3 = ~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber2 = ~ENUM1["A"];
var ResultIsNumber3 = ~(0 /* A */ + ENUM1["B"]);
// multiple ~ operators
var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber4 = ~~~(ENUM1["A"] + 1 /* B */);
// miss assignment operators
~ENUM1;
~ENUM1[1];
~ENUM1[1], ~ENUM1[2];
~ENUM1["A"];
~0 /* A */, ~ENUM1["B"];
@@ -1,8 +1,10 @@
=== tests/cases/conformance/expressions/unaryOperators/bitwiseNotOperator/bitwiseNotOperatorWithEnumType.ts ===
// ~ operator on enum type
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
>ENUM1 : ENUM1
>A : ENUM1
>B : ENUM1
// enum type var
var ResultIsNumber1 = ~ENUM1;
@@ -11,51 +13,54 @@ var ResultIsNumber1 = ~ENUM1;
>ENUM1 : typeof ENUM1
// enum type expressions
var ResultIsNumber2 = ~ENUM1[1];
var ResultIsNumber2 = ~ENUM1["A"];
>ResultIsNumber2 : number
>~ENUM1[1] : number
>ENUM1[1] : ENUM1
>~ENUM1["A"] : number
>ENUM1["A"] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsNumber3 = ~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber3 = ~(ENUM1.A + ENUM1["B"]);
>ResultIsNumber3 : number
>~(ENUM1[1] + ENUM1[2]) : number
>(ENUM1[1] + ENUM1[2]) : number
>ENUM1[1] + ENUM1[2] : number
>ENUM1[1] : ENUM1
>~(ENUM1.A + ENUM1["B"]) : number
>(ENUM1.A + ENUM1["B"]) : number
>ENUM1.A + ENUM1["B"] : number
>ENUM1.A : ENUM1
>ENUM1 : typeof ENUM1
>ENUM1[2] : ENUM1
>A : ENUM1
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
// multiple ~ operators
var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber4 = ~~~(ENUM1["A"] + ENUM1.B);
>ResultIsNumber4 : number
>~~~(ENUM1[1] + ENUM1[2]) : number
>~~(ENUM1[1] + ENUM1[2]) : number
>~(ENUM1[1] + ENUM1[2]) : number
>(ENUM1[1] + ENUM1[2]) : number
>ENUM1[1] + ENUM1[2] : number
>ENUM1[1] : ENUM1
>~~~(ENUM1["A"] + ENUM1.B) : number
>~~(ENUM1["A"] + ENUM1.B) : number
>~(ENUM1["A"] + ENUM1.B) : number
>(ENUM1["A"] + ENUM1.B) : number
>ENUM1["A"] + ENUM1.B : number
>ENUM1["A"] : ENUM1
>ENUM1 : typeof ENUM1
>ENUM1[2] : ENUM1
>ENUM1.B : ENUM1
>ENUM1 : typeof ENUM1
>B : ENUM1
// miss assignment operators
~ENUM1;
>~ENUM1 : number
>ENUM1 : typeof ENUM1
~ENUM1[1];
>~ENUM1[1] : number
>ENUM1[1] : ENUM1
~ENUM1["A"];
>~ENUM1["A"] : number
>ENUM1["A"] : ENUM1
>ENUM1 : typeof ENUM1
~ENUM1[1], ~ENUM1[2];
>~ENUM1[1], ~ENUM1[2] : number
>~ENUM1[1] : number
>ENUM1[1] : ENUM1
~ENUM1.A, ~ENUM1["B"];
>~ENUM1.A, ~ENUM1["B"] : number
>~ENUM1.A : number
>ENUM1.A : ENUM1
>ENUM1 : typeof ENUM1
>~ENUM1[2] : number
>ENUM1[2] : ENUM1
>A : ENUM1
>~ENUM1["B"] : number
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
@@ -0,0 +1,24 @@
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts(7,23): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
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.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts(12,7): error TS2304: Cannot find name 'A'.
==== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts (3 errors) ====
// -- operator on enum type
enum ENUM1 { A, B, "" };
// expression
var ResultIsNumber1 = --ENUM1["A"];
var ResultIsNumber2 = ENUM1.A--;
~~~~~~~
!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
// miss assignment operator
--ENUM1["A"];
ENUM1[A]--;
~~~~~~~~
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
~
!!! error TS2304: Cannot find name 'A'.
@@ -1,29 +1,29 @@
//// [decrementOperatorWithEnumType.ts]
// -- operator on enum type
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// expression
var ResultIsNumber1 = --ENUM1[1];
var ResultIsNumber2 = ENUM1[1]--;
var ResultIsNumber1 = --ENUM1["A"];
var ResultIsNumber2 = ENUM1.A--;
// miss assignment operator
--ENUM1[1];
--ENUM1["A"];
ENUM1[1]--;
ENUM1[A]--;
//// [decrementOperatorWithEnumType.js]
// -- operator on enum type
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
// expression
var ResultIsNumber1 = --ENUM1[1];
var ResultIsNumber2 = ENUM1[1]--;
var ResultIsNumber1 = --ENUM1["A"];
var ResultIsNumber2 = 0 /* A */--;
// miss assignment operator
--ENUM1[1];
ENUM1[1]--;
--ENUM1["A"];
ENUM1[A]--;
@@ -1,30 +0,0 @@
=== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumType.ts ===
// -- operator on enum type
enum ENUM1 { 1, 2, "" };
>ENUM1 : ENUM1
// expression
var ResultIsNumber1 = --ENUM1[1];
>ResultIsNumber1 : number
>--ENUM1[1] : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsNumber2 = ENUM1[1]--;
>ResultIsNumber2 : number
>ENUM1[1]-- : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
// miss assignment operator
--ENUM1[1];
>--ENUM1[1] : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
ENUM1[1]--;
>ENUM1[1]-- : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
@@ -2,19 +2,21 @@ tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOp
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(8,25): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(10,23): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(11,23): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(14,25): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(15,23): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(14,25): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(14,43): error TS2339: Property 'B' does not exist on type 'typeof ENUM'.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(15,23): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(15,29): error TS2339: Property 'A' does not exist on type 'typeof ENUM'.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(18,3): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(19,3): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(21,1): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts(22,1): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
==== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts (10 errors) ====
==== tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOperatorWithEnumTypeInvalidOperations.ts (12 errors) ====
// -- operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = --ENUM;
@@ -32,12 +34,16 @@ tests/cases/conformance/expressions/unaryOperators/decrementOperator/decrementOp
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
// enum type expressions
var ResultIsNumber5 = --(ENUM[1] + ENUM[2]);
~~~~~~~~~~~~~~~~~~~
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
var ResultIsNumber6 = (ENUM[1] + ENUM[2])--;
~~~~~~~~~~~~~~~~~~~
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
var ResultIsNumber5 = --(ENUM["A"] + ENUM.B);
~~~~~~~~~~~~~~~~~~~~
!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
~
!!! error TS2339: Property 'B' does not exist on type 'typeof ENUM'.
var ResultIsNumber6 = (ENUM.A + ENUM["B"])--;
~~~~~~~~~~~~~~~~~~~~
!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
~
!!! error TS2339: Property 'A' does not exist on type 'typeof ENUM'.
// miss assignment operator
--ENUM;
@@ -2,7 +2,7 @@
// -- operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = --ENUM;
@@ -12,8 +12,8 @@ var ResultIsNumber3 = ENUM--;
var ResultIsNumber4 = ENUM1--;
// enum type expressions
var ResultIsNumber5 = --(ENUM[1] + ENUM[2]);
var ResultIsNumber6 = (ENUM[1] + ENUM[2])--;
var ResultIsNumber5 = --(ENUM["A"] + ENUM.B);
var ResultIsNumber6 = (ENUM.A + ENUM["B"])--;
// miss assignment operator
--ENUM;
@@ -30,8 +30,8 @@ var ENUM;
;
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
@@ -41,8 +41,8 @@ var ResultIsNumber2 = --ENUM1;
var ResultIsNumber3 = ENUM--;
var ResultIsNumber4 = ENUM1--;
// enum type expressions
var ResultIsNumber5 = --(ENUM[1] + ENUM[2]);
var ResultIsNumber6 = (ENUM[1] + ENUM[2])--;
var ResultIsNumber5 = --(ENUM["A"] + ENUM.B);
var ResultIsNumber6 = (ENUM.A + ENUM["B"])--;
// miss assignment operator
--ENUM;
--ENUM1;
@@ -2,24 +2,24 @@
// delete operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsBoolean1 = delete ENUM;
var ResultIsBoolean2 = delete ENUM1;
// enum type expressions
var ResultIsBoolean3 = delete ENUM1[0];
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean3 = delete ENUM1["A"];
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1["B"]);
// multiple delete operators
var ResultIsBoolean5 = delete delete ENUM;
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1["B"]);
// miss assignment operators
delete ENUM;
delete ENUM1;
delete ENUM1[1];
delete ENUM1.B;
delete ENUM, ENUM1;
//// [deleteOperatorWithEnumType.js]
@@ -30,8 +30,8 @@ var ENUM;
;
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
@@ -39,13 +39,13 @@ var ENUM1;
var ResultIsBoolean1 = delete ENUM;
var ResultIsBoolean2 = delete ENUM1;
// enum type expressions
var ResultIsBoolean3 = delete ENUM1[0];
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean3 = delete ENUM1["A"];
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1["B"]);
// multiple delete operators
var ResultIsBoolean5 = delete delete ENUM;
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1["B"]);
// miss assignment operators
delete ENUM;
delete ENUM1;
delete ENUM1[1];
delete 1 /* B */;
delete ENUM, ENUM1;
@@ -4,8 +4,10 @@
enum ENUM { };
>ENUM : ENUM
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
>ENUM1 : ENUM1
>A : ENUM1
>B : ENUM1
// enum type var
var ResultIsBoolean1 = delete ENUM;
@@ -19,20 +21,20 @@ var ResultIsBoolean2 = delete ENUM1;
>ENUM1 : typeof ENUM1
// enum type expressions
var ResultIsBoolean3 = delete ENUM1[0];
var ResultIsBoolean3 = delete ENUM1["A"];
>ResultIsBoolean3 : boolean
>delete ENUM1[0] : boolean
>ENUM1[0] : string
>delete ENUM1["A"] : boolean
>ENUM1["A"] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1["B"]);
>ResultIsBoolean4 : boolean
>delete (ENUM[0] + ENUM1[1]) : boolean
>(ENUM[0] + ENUM1[1]) : string
>ENUM[0] + ENUM1[1] : string
>delete (ENUM[0] + ENUM1["B"]) : boolean
>(ENUM[0] + ENUM1["B"]) : string
>ENUM[0] + ENUM1["B"] : string
>ENUM[0] : string
>ENUM : typeof ENUM
>ENUM1[1] : ENUM1
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
// multiple delete operators
@@ -42,16 +44,16 @@ var ResultIsBoolean5 = delete delete ENUM;
>delete ENUM : boolean
>ENUM : typeof ENUM
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1["B"]);
>ResultIsBoolean6 : boolean
>delete delete delete (ENUM[0] + ENUM1[1]) : boolean
>delete delete (ENUM[0] + ENUM1[1]) : boolean
>delete (ENUM[0] + ENUM1[1]) : boolean
>(ENUM[0] + ENUM1[1]) : string
>ENUM[0] + ENUM1[1] : string
>delete delete delete (ENUM[0] + ENUM1["B"]) : boolean
>delete delete (ENUM[0] + ENUM1["B"]) : boolean
>delete (ENUM[0] + ENUM1["B"]) : boolean
>(ENUM[0] + ENUM1["B"]) : string
>ENUM[0] + ENUM1["B"] : string
>ENUM[0] : string
>ENUM : typeof ENUM
>ENUM1[1] : ENUM1
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
// miss assignment operators
@@ -63,10 +65,11 @@ delete ENUM1;
>delete ENUM1 : boolean
>ENUM1 : typeof ENUM1
delete ENUM1[1];
>delete ENUM1[1] : boolean
>ENUM1[1] : ENUM1
delete ENUM1.B;
>delete ENUM1.B : boolean
>ENUM1.B : ENUM1
>ENUM1 : typeof ENUM1
>B : ENUM1
delete ENUM, ENUM1;
>delete ENUM, ENUM1 : typeof ENUM1
@@ -1,13 +0,0 @@
tests/cases/compiler/enumIdenticalIdentifierValues.ts(2,5): error TS2300: Duplicate identifier '1'.
tests/cases/compiler/enumIdenticalIdentifierValues.ts(3,5): error TS2300: Duplicate identifier '1.0'.
==== tests/cases/compiler/enumIdenticalIdentifierValues.ts (2 errors) ====
enum Enum {
1,
~
!!! error TS2300: Duplicate identifier '1'.
1.0
~~~
!!! error TS2300: Duplicate identifier '1.0'.
}
@@ -1,12 +0,0 @@
//// [enumIdenticalIdentifierValues.ts]
enum Enum {
1,
1.0
}
//// [enumIdenticalIdentifierValues.js]
var Enum;
(function (Enum) {
Enum[Enum["1"] = 0] = "1";
Enum[Enum["1"] = 1] = "1";
})(Enum || (Enum = {}));
@@ -0,0 +1,25 @@
tests/cases/compiler/enumIdentifierLiterals.ts(2,5): error TS1151: An enum member cannot have a numeric name.
tests/cases/compiler/enumIdentifierLiterals.ts(3,5): error TS1151: An enum member cannot have a numeric name.
tests/cases/compiler/enumIdentifierLiterals.ts(4,5): error TS1151: An enum member cannot have a numeric name.
tests/cases/compiler/enumIdentifierLiterals.ts(5,5): error TS1151: An enum member cannot have a numeric name.
tests/cases/compiler/enumIdentifierLiterals.ts(6,5): error TS1151: An enum member cannot have a numeric name.
==== tests/cases/compiler/enumIdentifierLiterals.ts (5 errors) ====
enum Nums {
1.0,
~~~
!!! error TS1151: An enum member cannot have a numeric name.
11e-1,
~~~~~
!!! error TS1151: An enum member cannot have a numeric name.
0.12e1,
~~~~~~
!!! error TS1151: An enum member cannot have a numeric name.
"13e-1",
~~~~~~~
!!! error TS1151: An enum member cannot have a numeric name.
0xF00D
~~~~~~
!!! error TS1151: An enum member cannot have a numeric name.
}
@@ -1,18 +1,18 @@
//// [enumIdentifierLiterals.ts]
//// [enumIdentifierLiterals.ts]
enum Nums {
1.0,
11e-1,
0.12e1,
"13e-1",
0xF00D
}
//// [enumIdentifierLiterals.js]
var Nums;
(function (Nums) {
Nums[Nums["1"] = 0] = "1";
Nums[Nums["1.1"] = 1] = "1.1";
Nums[Nums["1.2"] = 2] = "1.2";
Nums[Nums["13e-1"] = 3] = "13e-1";
Nums[Nums["61453"] = 4] = "61453";
})(Nums || (Nums = {}));
}
//// [enumIdentifierLiterals.js]
var Nums;
(function (Nums) {
Nums[Nums["1"] = 0] = "1";
Nums[Nums["1.1"] = 1] = "1.1";
Nums[Nums["1.2"] = 2] = "1.2";
Nums[Nums["13e-1"] = 3] = "13e-1";
Nums[Nums["61453"] = 4] = "61453";
})(Nums || (Nums = {}));
@@ -1,10 +0,0 @@
=== tests/cases/compiler/enumIdentifierLiterals.ts ===
enum Nums {
>Nums : Nums
1.0,
11e-1,
0.12e1,
"13e-1",
0xF00D
}
@@ -0,0 +1,21 @@
tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOperatorWithEnumType.ts(7,23): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOperatorWithEnumType.ts(12,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
==== tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOperatorWithEnumType.ts (2 errors) ====
// ++ operator on enum type
enum ENUM1 { A, B, "" };
// expression
var ResultIsNumber1 = ++ENUM1["B"];
var ResultIsNumber2 = ENUM1.B++;
~~~~~~~
!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
// miss assignment operator
++ENUM1["B"];
ENUM1.B++;
~~~~~~~
!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer.
@@ -1,29 +1,29 @@
//// [incrementOperatorWithEnumType.ts]
// ++ operator on enum type
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// expression
var ResultIsNumber1 = ++ENUM1[1];
var ResultIsNumber2 = ENUM1[1]++;
var ResultIsNumber1 = ++ENUM1["B"];
var ResultIsNumber2 = ENUM1.B++;
// miss assignment operator
++ENUM1[1];
++ENUM1["B"];
ENUM1[1]++;
ENUM1.B++;
//// [incrementOperatorWithEnumType.js]
// ++ operator on enum type
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
// expression
var ResultIsNumber1 = ++ENUM1[1];
var ResultIsNumber2 = ENUM1[1]++;
var ResultIsNumber1 = ++ENUM1["B"];
var ResultIsNumber2 = 1 /* B */++;
// miss assignment operator
++ENUM1[1];
ENUM1[1]++;
++ENUM1["B"];
1 /* B */++;
@@ -1,30 +0,0 @@
=== tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOperatorWithEnumType.ts ===
// ++ operator on enum type
enum ENUM1 { 1, 2, "" };
>ENUM1 : ENUM1
// expression
var ResultIsNumber1 = ++ENUM1[1];
>ResultIsNumber1 : number
>++ENUM1[1] : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsNumber2 = ENUM1[1]++;
>ResultIsNumber2 : number
>ENUM1[1]++ : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
// miss assignment operator
++ENUM1[1];
>++ENUM1[1] : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
ENUM1[1]++;
>ENUM1[1]++ : number
>ENUM1[1] : ENUM1
>ENUM1 : typeof ENUM1
@@ -14,7 +14,7 @@ tests/cases/conformance/expressions/unaryOperators/incrementOperator/incrementOp
// ++ operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = ++ENUM;
@@ -2,7 +2,7 @@
// ++ operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = ++ENUM;
@@ -30,8 +30,8 @@ var ENUM;
;
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
@@ -1,33 +1,33 @@
//// [logicalNotOperatorWithEnumType.ts]
// ! operator on enum type
enum ENUM { 1, 2, 3 };
enum ENUM { A, B, C };
enum ENUM1 { };
// enum type var
var ResultIsBoolean1 = !ENUM;
// enum type expressions
var ResultIsBoolean2 = !ENUM[1];
var ResultIsBoolean3 = !(ENUM[1] + ENUM[2]);
var ResultIsBoolean2 = !ENUM["B"];
var ResultIsBoolean3 = !(ENUM.B + ENUM["C"]);
// multiple ! operators
var ResultIsBoolean4 = !!ENUM;
var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]);
var ResultIsBoolean5 = !!!(ENUM["B"] + ENUM.C);
// miss assignment operators
!ENUM;
!ENUM1;
!ENUM[1];
!ENUM.B;
!ENUM, ENUM1;
//// [logicalNotOperatorWithEnumType.js]
// ! operator on enum type
var ENUM;
(function (ENUM) {
ENUM[ENUM["1"] = 0] = "1";
ENUM[ENUM["2"] = 1] = "2";
ENUM[ENUM["3"] = 2] = "3";
ENUM[ENUM["A"] = 0] = "A";
ENUM[ENUM["B"] = 1] = "B";
ENUM[ENUM["C"] = 2] = "C";
})(ENUM || (ENUM = {}));
;
var ENUM1;
@@ -37,13 +37,13 @@ var ENUM1;
// enum type var
var ResultIsBoolean1 = !ENUM;
// enum type expressions
var ResultIsBoolean2 = !ENUM[1];
var ResultIsBoolean3 = !(ENUM[1] + ENUM[2]);
var ResultIsBoolean2 = !ENUM["B"];
var ResultIsBoolean3 = !(1 /* B */ + ENUM["C"]);
// multiple ! operators
var ResultIsBoolean4 = !!ENUM;
var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]);
var ResultIsBoolean5 = !!!(ENUM["B"] + 2 /* C */);
// miss assignment operators
!ENUM;
!ENUM1;
!ENUM[1];
!1 /* B */;
!ENUM, ENUM1;
@@ -1,8 +1,11 @@
=== tests/cases/conformance/expressions/unaryOperators/logicalNotOperator/logicalNotOperatorWithEnumType.ts ===
// ! operator on enum type
enum ENUM { 1, 2, 3 };
enum ENUM { A, B, C };
>ENUM : ENUM
>A : ENUM
>B : ENUM
>C : ENUM
enum ENUM1 { };
>ENUM1 : ENUM1
@@ -14,20 +17,21 @@ var ResultIsBoolean1 = !ENUM;
>ENUM : typeof ENUM
// enum type expressions
var ResultIsBoolean2 = !ENUM[1];
var ResultIsBoolean2 = !ENUM["B"];
>ResultIsBoolean2 : boolean
>!ENUM[1] : boolean
>ENUM[1] : ENUM
>!ENUM["B"] : boolean
>ENUM["B"] : ENUM
>ENUM : typeof ENUM
var ResultIsBoolean3 = !(ENUM[1] + ENUM[2]);
var ResultIsBoolean3 = !(ENUM.B + ENUM["C"]);
>ResultIsBoolean3 : boolean
>!(ENUM[1] + ENUM[2]) : boolean
>(ENUM[1] + ENUM[2]) : number
>ENUM[1] + ENUM[2] : number
>ENUM[1] : ENUM
>!(ENUM.B + ENUM["C"]) : boolean
>(ENUM.B + ENUM["C"]) : number
>ENUM.B + ENUM["C"] : number
>ENUM.B : ENUM
>ENUM : typeof ENUM
>ENUM[2] : ENUM
>B : ENUM
>ENUM["C"] : ENUM
>ENUM : typeof ENUM
// multiple ! operators
@@ -37,17 +41,18 @@ var ResultIsBoolean4 = !!ENUM;
>!ENUM : boolean
>ENUM : typeof ENUM
var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]);
var ResultIsBoolean5 = !!!(ENUM["B"] + ENUM.C);
>ResultIsBoolean5 : boolean
>!!!(ENUM[1] + ENUM[2]) : boolean
>!!(ENUM[1] + ENUM[2]) : boolean
>!(ENUM[1] + ENUM[2]) : boolean
>(ENUM[1] + ENUM[2]) : number
>ENUM[1] + ENUM[2] : number
>ENUM[1] : ENUM
>!!!(ENUM["B"] + ENUM.C) : boolean
>!!(ENUM["B"] + ENUM.C) : boolean
>!(ENUM["B"] + ENUM.C) : boolean
>(ENUM["B"] + ENUM.C) : number
>ENUM["B"] + ENUM.C : number
>ENUM["B"] : ENUM
>ENUM : typeof ENUM
>ENUM[2] : ENUM
>ENUM.C : ENUM
>ENUM : typeof ENUM
>C : ENUM
// miss assignment operators
!ENUM;
@@ -58,10 +63,11 @@ var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]);
>!ENUM1 : boolean
>ENUM1 : typeof ENUM1
!ENUM[1];
>!ENUM[1] : boolean
>ENUM[1] : ENUM
!ENUM.B;
>!ENUM.B : boolean
>ENUM.B : ENUM
>ENUM : typeof ENUM
>B : ENUM
!ENUM, ENUM1;
>!ENUM, ENUM1 : typeof ENUM1
@@ -2,19 +2,19 @@
// - operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = -ENUM;
// expressions
var ResultIsNumber2 = -ENUM1[1];
var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]);
var ResultIsNumber2 = -ENUM1["B"];
var ResultIsNumber3 = -(ENUM1.B + ENUM1[""]);
// miss assignment operators
-ENUM;
-ENUM1;
-ENUM1[1];
-ENUM1["B"];
-ENUM, ENUM1;
//// [negateOperatorWithEnumType.js]
@@ -25,18 +25,18 @@ var ENUM;
;
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
// enum type var
var ResultIsNumber1 = -ENUM;
// expressions
var ResultIsNumber2 = -ENUM1[1];
var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]);
var ResultIsNumber2 = -ENUM1["B"];
var ResultIsNumber3 = -(1 /* B */ + ENUM1[""]);
// miss assignment operators
-ENUM;
-ENUM1;
-ENUM1[1];
-ENUM1["B"];
-ENUM, ENUM1;
@@ -4,8 +4,10 @@
enum ENUM { };
>ENUM : ENUM
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
>ENUM1 : ENUM1
>A : ENUM1
>B : ENUM1
// enum type var
var ResultIsNumber1 = -ENUM;
@@ -14,20 +16,21 @@ var ResultIsNumber1 = -ENUM;
>ENUM : typeof ENUM
// expressions
var ResultIsNumber2 = -ENUM1[1];
var ResultIsNumber2 = -ENUM1["B"];
>ResultIsNumber2 : number
>-ENUM1[1] : number
>ENUM1[1] : ENUM1
>-ENUM1["B"] : number
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]);
var ResultIsNumber3 = -(ENUM1.B + ENUM1[""]);
>ResultIsNumber3 : number
>-(ENUM1[1] + ENUM1[2]) : number
>(ENUM1[1] + ENUM1[2]) : number
>ENUM1[1] + ENUM1[2] : number
>ENUM1[1] : ENUM1
>-(ENUM1.B + ENUM1[""]) : number
>(ENUM1.B + ENUM1[""]) : number
>ENUM1.B + ENUM1[""] : number
>ENUM1.B : ENUM1
>ENUM1 : typeof ENUM1
>ENUM1[2] : ENUM1
>B : ENUM1
>ENUM1[""] : ENUM1
>ENUM1 : typeof ENUM1
// miss assignment operators
@@ -39,9 +42,9 @@ var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]);
>-ENUM1 : number
>ENUM1 : typeof ENUM1
-ENUM1[1];
>-ENUM1[1] : number
>ENUM1[1] : ENUM1
-ENUM1["B"];
>-ENUM1["B"] : number
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
-ENUM, ENUM1;
@@ -1,15 +1,24 @@
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(2,12): error TS1005: ',' expected.
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(3,15): error TS1005: ',' expected.
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(3,24): error TS1005: ',' expected.
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(2,14): error TS1151: An enum member cannot have a numeric name.
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(3,17): error TS1151: An enum member cannot have a numeric name.
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(3,26): error TS1151: An enum member cannot have a numeric name.
==== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts (3 errors) ====
==== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts (6 errors) ====
enum E2 { a, }
enum E3 { a: 1, }
~
!!! error TS1005: ',' expected.
~
!!! error TS1151: An enum member cannot have a numeric name.
enum E1 { a, b: 1, c, d: 2 = 3 }
~
!!! error TS1005: ',' expected.
~
!!! error TS1005: ',' expected.
!!! error TS1005: ',' expected.
~
!!! error TS1151: An enum member cannot have a numeric name.
~
!!! error TS1151: An enum member cannot have a numeric name.
@@ -0,0 +1,15 @@
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum7.ts(2,3): error TS1151: An enum member cannot have a numeric name.
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum7.ts(2,6): error TS1151: An enum member cannot have a numeric name.
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum7.ts(2,9): error TS1151: An enum member cannot have a numeric name.
==== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum7.ts (3 errors) ====
enum E {
1, 2, 3
~
!!! error TS1151: An enum member cannot have a numeric name.
~
!!! error TS1151: An enum member cannot have a numeric name.
~
!!! error TS1151: An enum member cannot have a numeric name.
}
+10 -10
View File
@@ -1,12 +1,12 @@
//// [parserEnum7.ts]
//// [parserEnum7.ts]
enum E {
1, 2, 3
}
//// [parserEnum7.js]
var E;
(function (E) {
E[E["1"] = 0] = "1";
E[E["2"] = 1] = "2";
E[E["3"] = 2] = "3";
})(E || (E = {}));
}
//// [parserEnum7.js]
var E;
(function (E) {
E[E["1"] = 0] = "1";
E[E["2"] = 1] = "2";
E[E["3"] = 2] = "3";
})(E || (E = {}));
@@ -1,6 +0,0 @@
=== tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum7.ts ===
enum E {
>E : E
1, 2, 3
}
@@ -2,20 +2,20 @@
// + operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = +ENUM;
var ResultIsNumber2 = +ENUM1;
// enum type expressions
var ResultIsNumber3 = +ENUM1[0];
var ResultIsNumber4 = +(ENUM[0] + ENUM1[1]);
var ResultIsNumber3 = +ENUM1["A"];
var ResultIsNumber4 = +(ENUM[0] + ENUM1["B"]);
// miss assignment operators
+ENUM;
+ENUM1;
+ENUM1[1];
+ENUM1.B;
+ENUM, ENUM1;
//// [plusOperatorWithEnumType.js]
@@ -26,8 +26,8 @@ var ENUM;
;
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
@@ -35,10 +35,10 @@ var ENUM1;
var ResultIsNumber1 = +ENUM;
var ResultIsNumber2 = +ENUM1;
// enum type expressions
var ResultIsNumber3 = +ENUM1[0];
var ResultIsNumber4 = +(ENUM[0] + ENUM1[1]);
var ResultIsNumber3 = +ENUM1["A"];
var ResultIsNumber4 = +(ENUM[0] + ENUM1["B"]);
// miss assignment operators
+ENUM;
+ENUM1;
+ENUM1[1];
+1 /* B */;
+ENUM, ENUM1;
@@ -4,8 +4,10 @@
enum ENUM { };
>ENUM : ENUM
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
>ENUM1 : ENUM1
>A : ENUM1
>B : ENUM1
// enum type var
var ResultIsNumber1 = +ENUM;
@@ -19,20 +21,20 @@ var ResultIsNumber2 = +ENUM1;
>ENUM1 : typeof ENUM1
// enum type expressions
var ResultIsNumber3 = +ENUM1[0];
var ResultIsNumber3 = +ENUM1["A"];
>ResultIsNumber3 : number
>+ENUM1[0] : number
>ENUM1[0] : string
>+ENUM1["A"] : number
>ENUM1["A"] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsNumber4 = +(ENUM[0] + ENUM1[1]);
var ResultIsNumber4 = +(ENUM[0] + ENUM1["B"]);
>ResultIsNumber4 : number
>+(ENUM[0] + ENUM1[1]) : number
>(ENUM[0] + ENUM1[1]) : string
>ENUM[0] + ENUM1[1] : string
>+(ENUM[0] + ENUM1["B"]) : number
>(ENUM[0] + ENUM1["B"]) : string
>ENUM[0] + ENUM1["B"] : string
>ENUM[0] : string
>ENUM : typeof ENUM
>ENUM1[1] : ENUM1
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
// miss assignment operators
@@ -44,10 +46,11 @@ var ResultIsNumber4 = +(ENUM[0] + ENUM1[1]);
>+ENUM1 : number
>ENUM1 : typeof ENUM1
+ENUM1[1];
>+ENUM1[1] : number
>ENUM1[1] : ENUM1
+ENUM1.B;
>+ENUM1.B : number
>ENUM1.B : ENUM1
>ENUM1 : typeof ENUM1
>B : ENUM1
+ENUM, ENUM1;
>+ENUM, ENUM1 : typeof ENUM1
@@ -2,24 +2,24 @@
// typeof operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsString1 = typeof ENUM;
var ResultIsString2 = typeof ENUM1;
// enum type expressions
var ResultIsString3 = typeof ENUM1[0];
var ResultIsString4 = typeof (ENUM[0] + ENUM1[1]);
var ResultIsString3 = typeof ENUM1["A"];
var ResultIsString4 = typeof (ENUM[0] + ENUM1["B"]);
// multiple typeof operators
var ResultIsString5 = typeof typeof ENUM;
var ResultIsString6 = typeof typeof typeof (ENUM[0] + ENUM1[1]);
var ResultIsString6 = typeof typeof typeof (ENUM[0] + ENUM1.B);
// miss assignment operators
typeof ENUM;
typeof ENUM1;
typeof ENUM1[1];
typeof ENUM1["B"];
typeof ENUM, ENUM1;
// use typeof in type query
@@ -35,8 +35,8 @@ var ENUM;
;
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
@@ -44,15 +44,15 @@ var ENUM1;
var ResultIsString1 = typeof ENUM;
var ResultIsString2 = typeof ENUM1;
// enum type expressions
var ResultIsString3 = typeof ENUM1[0];
var ResultIsString4 = typeof (ENUM[0] + ENUM1[1]);
var ResultIsString3 = typeof ENUM1["A"];
var ResultIsString4 = typeof (ENUM[0] + ENUM1["B"]);
// multiple typeof operators
var ResultIsString5 = typeof typeof ENUM;
var ResultIsString6 = typeof typeof typeof (ENUM[0] + ENUM1[1]);
var ResultIsString6 = typeof typeof typeof (ENUM[0] + 1 /* B */);
// miss assignment operators
typeof ENUM;
typeof ENUM1;
typeof ENUM1[1];
typeof ENUM1["B"];
typeof ENUM, ENUM1;
// use typeof in type query
var z;
@@ -4,8 +4,10 @@
enum ENUM { };
>ENUM : ENUM
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
>ENUM1 : ENUM1
>A : ENUM1
>B : ENUM1
// enum type var
var ResultIsString1 = typeof ENUM;
@@ -19,20 +21,20 @@ var ResultIsString2 = typeof ENUM1;
>ENUM1 : typeof ENUM1
// enum type expressions
var ResultIsString3 = typeof ENUM1[0];
var ResultIsString3 = typeof ENUM1["A"];
>ResultIsString3 : string
>typeof ENUM1[0] : string
>ENUM1[0] : string
>typeof ENUM1["A"] : string
>ENUM1["A"] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsString4 = typeof (ENUM[0] + ENUM1[1]);
var ResultIsString4 = typeof (ENUM[0] + ENUM1["B"]);
>ResultIsString4 : string
>typeof (ENUM[0] + ENUM1[1]) : string
>(ENUM[0] + ENUM1[1]) : string
>ENUM[0] + ENUM1[1] : string
>typeof (ENUM[0] + ENUM1["B"]) : string
>(ENUM[0] + ENUM1["B"]) : string
>ENUM[0] + ENUM1["B"] : string
>ENUM[0] : string
>ENUM : typeof ENUM
>ENUM1[1] : ENUM1
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
// multiple typeof operators
@@ -42,17 +44,18 @@ var ResultIsString5 = typeof typeof ENUM;
>typeof ENUM : string
>ENUM : typeof ENUM
var ResultIsString6 = typeof typeof typeof (ENUM[0] + ENUM1[1]);
var ResultIsString6 = typeof typeof typeof (ENUM[0] + ENUM1.B);
>ResultIsString6 : string
>typeof typeof typeof (ENUM[0] + ENUM1[1]) : string
>typeof typeof (ENUM[0] + ENUM1[1]) : string
>typeof (ENUM[0] + ENUM1[1]) : string
>(ENUM[0] + ENUM1[1]) : string
>ENUM[0] + ENUM1[1] : string
>typeof typeof typeof (ENUM[0] + ENUM1.B) : string
>typeof typeof (ENUM[0] + ENUM1.B) : string
>typeof (ENUM[0] + ENUM1.B) : string
>(ENUM[0] + ENUM1.B) : string
>ENUM[0] + ENUM1.B : string
>ENUM[0] : string
>ENUM : typeof ENUM
>ENUM1[1] : ENUM1
>ENUM1.B : ENUM1
>ENUM1 : typeof ENUM1
>B : ENUM1
// miss assignment operators
typeof ENUM;
@@ -63,9 +66,9 @@ typeof ENUM1;
>typeof ENUM1 : string
>ENUM1 : typeof ENUM1
typeof ENUM1[1];
>typeof ENUM1[1] : string
>ENUM1[1] : ENUM1
typeof ENUM1["B"];
>typeof ENUM1["B"] : string
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
typeof ENUM, ENUM1;
@@ -2,24 +2,24 @@
// void operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsAny1 = void ENUM;
var ResultIsAny2 = void ENUM1;
// enum type expressions
var ResultIsAny3 = void ENUM1[0];
var ResultIsAny4 = void (ENUM[0] + ENUM1[1]);
var ResultIsAny3 = void ENUM1["A"];
var ResultIsAny4 = void (ENUM[0] + ENUM1["B"]);
// multiple void operators
var ResultIsAny5 = void void ENUM;
var ResultIsAny6 = void void void (ENUM[0] + ENUM1[1]);
var ResultIsAny6 = void void void (ENUM[0] + ENUM1.B);
// miss assignment operators
void ENUM;
void ENUM1;
void ENUM1[1];
void ENUM1["B"];
void ENUM, ENUM1;
//// [voidOperatorWithEnumType.js]
@@ -30,8 +30,8 @@ var ENUM;
;
var ENUM1;
(function (ENUM1) {
ENUM1[ENUM1["1"] = 0] = "1";
ENUM1[ENUM1["2"] = 1] = "2";
ENUM1[ENUM1["A"] = 0] = "A";
ENUM1[ENUM1["B"] = 1] = "B";
ENUM1[ENUM1[""] = 2] = "";
})(ENUM1 || (ENUM1 = {}));
;
@@ -39,13 +39,13 @@ var ENUM1;
var ResultIsAny1 = void ENUM;
var ResultIsAny2 = void ENUM1;
// enum type expressions
var ResultIsAny3 = void ENUM1[0];
var ResultIsAny4 = void (ENUM[0] + ENUM1[1]);
var ResultIsAny3 = void ENUM1["A"];
var ResultIsAny4 = void (ENUM[0] + ENUM1["B"]);
// multiple void operators
var ResultIsAny5 = void void ENUM;
var ResultIsAny6 = void void void (ENUM[0] + ENUM1[1]);
var ResultIsAny6 = void void void (ENUM[0] + 1 /* B */);
// miss assignment operators
void ENUM;
void ENUM1;
void ENUM1[1];
void ENUM1["B"];
void ENUM, ENUM1;
@@ -4,8 +4,10 @@
enum ENUM { };
>ENUM : ENUM
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
>ENUM1 : ENUM1
>A : ENUM1
>B : ENUM1
// enum type var
var ResultIsAny1 = void ENUM;
@@ -19,20 +21,20 @@ var ResultIsAny2 = void ENUM1;
>ENUM1 : typeof ENUM1
// enum type expressions
var ResultIsAny3 = void ENUM1[0];
var ResultIsAny3 = void ENUM1["A"];
>ResultIsAny3 : any
>void ENUM1[0] : undefined
>ENUM1[0] : string
>void ENUM1["A"] : undefined
>ENUM1["A"] : ENUM1
>ENUM1 : typeof ENUM1
var ResultIsAny4 = void (ENUM[0] + ENUM1[1]);
var ResultIsAny4 = void (ENUM[0] + ENUM1["B"]);
>ResultIsAny4 : any
>void (ENUM[0] + ENUM1[1]) : undefined
>(ENUM[0] + ENUM1[1]) : string
>ENUM[0] + ENUM1[1] : string
>void (ENUM[0] + ENUM1["B"]) : undefined
>(ENUM[0] + ENUM1["B"]) : string
>ENUM[0] + ENUM1["B"] : string
>ENUM[0] : string
>ENUM : typeof ENUM
>ENUM1[1] : ENUM1
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
// multiple void operators
@@ -42,17 +44,18 @@ var ResultIsAny5 = void void ENUM;
>void ENUM : undefined
>ENUM : typeof ENUM
var ResultIsAny6 = void void void (ENUM[0] + ENUM1[1]);
var ResultIsAny6 = void void void (ENUM[0] + ENUM1.B);
>ResultIsAny6 : any
>void void void (ENUM[0] + ENUM1[1]) : undefined
>void void (ENUM[0] + ENUM1[1]) : undefined
>void (ENUM[0] + ENUM1[1]) : undefined
>(ENUM[0] + ENUM1[1]) : string
>ENUM[0] + ENUM1[1] : string
>void void void (ENUM[0] + ENUM1.B) : undefined
>void void (ENUM[0] + ENUM1.B) : undefined
>void (ENUM[0] + ENUM1.B) : undefined
>(ENUM[0] + ENUM1.B) : string
>ENUM[0] + ENUM1.B : string
>ENUM[0] : string
>ENUM : typeof ENUM
>ENUM1[1] : ENUM1
>ENUM1.B : ENUM1
>ENUM1 : typeof ENUM1
>B : ENUM1
// miss assignment operators
void ENUM;
@@ -63,9 +66,9 @@ void ENUM1;
>void ENUM1 : undefined
>ENUM1 : typeof ENUM1
void ENUM1[1];
>void ENUM1[1] : undefined
>ENUM1[1] : ENUM1
void ENUM1["B"];
>void ENUM1["B"] : undefined
>ENUM1["B"] : ENUM1
>ENUM1 : typeof ENUM1
void ENUM, ENUM1;
@@ -1,4 +0,0 @@
enum Enum {
1,
1.0
}
@@ -1,18 +1,18 @@
// ~ operator on enum type
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = ~ENUM1;
// enum type expressions
var ResultIsNumber2 = ~ENUM1[1];
var ResultIsNumber3 = ~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber2 = ~ENUM1["A"];
var ResultIsNumber3 = ~(ENUM1.A + ENUM1["B"]);
// multiple ~ operators
var ResultIsNumber4 = ~~~(ENUM1[1] + ENUM1[2]);
var ResultIsNumber4 = ~~~(ENUM1["A"] + ENUM1.B);
// miss assignment operators
~ENUM1;
~ENUM1[1];
~ENUM1[1], ~ENUM1[2];
~ENUM1["A"];
~ENUM1.A, ~ENUM1["B"];
@@ -1,12 +1,12 @@
// -- operator on enum type
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// expression
var ResultIsNumber1 = --ENUM1[1];
var ResultIsNumber2 = ENUM1[1]--;
var ResultIsNumber1 = --ENUM1["A"];
var ResultIsNumber2 = ENUM1.A--;
// miss assignment operator
--ENUM1[1];
--ENUM1["A"];
ENUM1[1]--;
ENUM1[A]--;
@@ -1,7 +1,7 @@
// -- operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = --ENUM;
@@ -11,8 +11,8 @@ var ResultIsNumber3 = ENUM--;
var ResultIsNumber4 = ENUM1--;
// enum type expressions
var ResultIsNumber5 = --(ENUM[1] + ENUM[2]);
var ResultIsNumber6 = (ENUM[1] + ENUM[2])--;
var ResultIsNumber5 = --(ENUM["A"] + ENUM.B);
var ResultIsNumber6 = (ENUM.A + ENUM["B"])--;
// miss assignment operator
--ENUM;
@@ -1,22 +1,22 @@
// delete operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsBoolean1 = delete ENUM;
var ResultIsBoolean2 = delete ENUM1;
// enum type expressions
var ResultIsBoolean3 = delete ENUM1[0];
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean3 = delete ENUM1["A"];
var ResultIsBoolean4 = delete (ENUM[0] + ENUM1["B"]);
// multiple delete operators
var ResultIsBoolean5 = delete delete ENUM;
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1[1]);
var ResultIsBoolean6 = delete delete delete (ENUM[0] + ENUM1["B"]);
// miss assignment operators
delete ENUM;
delete ENUM1;
delete ENUM1[1];
delete ENUM1.B;
delete ENUM, ENUM1;
@@ -1,12 +1,12 @@
// ++ operator on enum type
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// expression
var ResultIsNumber1 = ++ENUM1[1];
var ResultIsNumber2 = ENUM1[1]++;
var ResultIsNumber1 = ++ENUM1["B"];
var ResultIsNumber2 = ENUM1.B++;
// miss assignment operator
++ENUM1[1];
++ENUM1["B"];
ENUM1[1]++;
ENUM1.B++;
@@ -1,7 +1,7 @@
// ++ operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = ++ENUM;
@@ -1,21 +1,21 @@
// ! operator on enum type
enum ENUM { 1, 2, 3 };
enum ENUM { A, B, C };
enum ENUM1 { };
// enum type var
var ResultIsBoolean1 = !ENUM;
// enum type expressions
var ResultIsBoolean2 = !ENUM[1];
var ResultIsBoolean3 = !(ENUM[1] + ENUM[2]);
var ResultIsBoolean2 = !ENUM["B"];
var ResultIsBoolean3 = !(ENUM.B + ENUM["C"]);
// multiple ! operators
var ResultIsBoolean4 = !!ENUM;
var ResultIsBoolean5 = !!!(ENUM[1] + ENUM[2]);
var ResultIsBoolean5 = !!!(ENUM["B"] + ENUM.C);
// miss assignment operators
!ENUM;
!ENUM1;
!ENUM[1];
!ENUM.B;
!ENUM, ENUM1;
@@ -1,17 +1,17 @@
// - operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = -ENUM;
// expressions
var ResultIsNumber2 = -ENUM1[1];
var ResultIsNumber3 = -(ENUM1[1] + ENUM1[2]);
var ResultIsNumber2 = -ENUM1["B"];
var ResultIsNumber3 = -(ENUM1.B + ENUM1[""]);
// miss assignment operators
-ENUM;
-ENUM1;
-ENUM1[1];
-ENUM1["B"];
-ENUM, ENUM1;
@@ -1,18 +1,18 @@
// + operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsNumber1 = +ENUM;
var ResultIsNumber2 = +ENUM1;
// enum type expressions
var ResultIsNumber3 = +ENUM1[0];
var ResultIsNumber4 = +(ENUM[0] + ENUM1[1]);
var ResultIsNumber3 = +ENUM1["A"];
var ResultIsNumber4 = +(ENUM[0] + ENUM1["B"]);
// miss assignment operators
+ENUM;
+ENUM1;
+ENUM1[1];
+ENUM1.B;
+ENUM, ENUM1;
@@ -1,24 +1,24 @@
// typeof operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsString1 = typeof ENUM;
var ResultIsString2 = typeof ENUM1;
// enum type expressions
var ResultIsString3 = typeof ENUM1[0];
var ResultIsString4 = typeof (ENUM[0] + ENUM1[1]);
var ResultIsString3 = typeof ENUM1["A"];
var ResultIsString4 = typeof (ENUM[0] + ENUM1["B"]);
// multiple typeof operators
var ResultIsString5 = typeof typeof ENUM;
var ResultIsString6 = typeof typeof typeof (ENUM[0] + ENUM1[1]);
var ResultIsString6 = typeof typeof typeof (ENUM[0] + ENUM1.B);
// miss assignment operators
typeof ENUM;
typeof ENUM1;
typeof ENUM1[1];
typeof ENUM1["B"];
typeof ENUM, ENUM1;
// use typeof in type query
@@ -1,22 +1,22 @@
// void operator on enum type
enum ENUM { };
enum ENUM1 { 1, 2, "" };
enum ENUM1 { A, B, "" };
// enum type var
var ResultIsAny1 = void ENUM;
var ResultIsAny2 = void ENUM1;
// enum type expressions
var ResultIsAny3 = void ENUM1[0];
var ResultIsAny4 = void (ENUM[0] + ENUM1[1]);
var ResultIsAny3 = void ENUM1["A"];
var ResultIsAny4 = void (ENUM[0] + ENUM1["B"]);
// multiple void operators
var ResultIsAny5 = void void ENUM;
var ResultIsAny6 = void void void (ENUM[0] + ENUM1[1]);
var ResultIsAny6 = void void void (ENUM[0] + ENUM1.B);
// miss assignment operators
void ENUM;
void ENUM1;
void ENUM1[1];
void ENUM1["B"];
void ENUM, ENUM1;