From 2b4f48996ebf6a0534c5ed5c5cfd6f8cfd05d8cd Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Thu, 9 Oct 2014 08:52:53 -0700 Subject: [PATCH] Moved the error check from parser to checker & updated baselines --- src/compiler/checker.ts | 4 ++++ src/compiler/parser.ts | 6 ------ .../reference/enumIdentifierLiterals.js | 18 ++++++++++++++++++ .../baselines/reference/parserEnum5.errors.txt | 8 ++++---- tests/baselines/reference/parserEnum7.js | 12 ++++++++++++ 5 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 tests/baselines/reference/enumIdentifierLiterals.js create mode 100644 tests/baselines/reference/parserEnum7.js diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 33d4008885d..59106a6bca2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -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); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 85ed78f540c..422d133d5d0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3673,12 +3673,6 @@ module ts { var node = 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) { diff --git a/tests/baselines/reference/enumIdentifierLiterals.js b/tests/baselines/reference/enumIdentifierLiterals.js new file mode 100644 index 00000000000..06cb76dd21d --- /dev/null +++ b/tests/baselines/reference/enumIdentifierLiterals.js @@ -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 = {})); diff --git a/tests/baselines/reference/parserEnum5.errors.txt b/tests/baselines/reference/parserEnum5.errors.txt index 6192eadd42c..40c2c933955 100644 --- a/tests/baselines/reference/parserEnum5.errors.txt +++ b/tests/baselines/reference/parserEnum5.errors.txt @@ -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. \ No newline at end of file diff --git a/tests/baselines/reference/parserEnum7.js b/tests/baselines/reference/parserEnum7.js new file mode 100644 index 00000000000..831090f4ce7 --- /dev/null +++ b/tests/baselines/reference/parserEnum7.js @@ -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 = {}));