Moved the error check from parser to checker & updated baselines

This commit is contained in:
ChrisBubernak 2014-10-09 08:52:53 -07:00
parent 3d6dc58f85
commit 2b4f48996e
5 changed files with 38 additions and 10 deletions

View File

@ -6639,6 +6639,10 @@ module ts {
var ambient = isInAmbientContext(node);
forEach(node.members, member => {
// todo: remove first check here when isNumericName gets fixed
if(!(member.name.text === "") && 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);

View File

@ -3673,12 +3673,6 @@ module ts {
var node = <EnumMember>createNode(SyntaxKind.EnumMember);
var errorCountBeforeEnumMember = file.syntacticErrors.length;
node.name = parsePropertyName();
// number("") returns 0 so we have to special case it
if(node.name.text !== "" && !isNaN(Number(node.name.text))) {
grammarErrorOnNode(node.name, Diagnostics.An_enum_member_cannot_have_a_numeric_name);
}
node.initializer = parseInitializer(/*inParameter*/ false);
if (inAmbientContext) {

View File

@ -0,0 +1,18 @@
//// [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 = {}));

View File

@ -1,8 +1,8 @@
tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(2,12): 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,15): error TS1005: ',' expected.
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,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.
@ -16,9 +16,9 @@ tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts(3,26)
enum E1 { a, b: 1, c, d: 2 = 3 }
~
!!! error TS1005: ',' expected.
~
!!! error TS1151: An enum member cannot have a numeric name.
~
!!! error TS1005: ',' expected.
~
!!! error TS1151: An enum member cannot have a numeric name.
~
!!! error TS1151: An enum member cannot have a numeric name.

View File

@ -0,0 +1,12 @@
//// [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 = {}));