From 9abfc3bd1a1c8ae538621af372f32fb51ebca958 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 23 Apr 2015 14:07:01 -0700 Subject: [PATCH 1/4] Added test. --- ...rtsWithContextualKeywordNames01.errors.txt | 29 +++++++++++++++++ ...sAndImportsWithContextualKeywordNames01.js | 32 +++++++++++++++++++ ...sAndImportsWithContextualKeywordNames01.ts | 20 ++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.js create mode 100644 tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames01.ts diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt new file mode 100644 index 00000000000..fa9635da3ed --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt @@ -0,0 +1,29 @@ +tests/cases/conformance/es6/modules/t2.ts(1,13): error TS1212: Identifier expected. 'set' is a reserved word in strict mode +tests/cases/conformance/es6/modules/t3.ts(1,17): error TS1212: Identifier expected. 'yield' is a reserved word in strict mode +tests/cases/conformance/es6/modules/t4.ts(1,10): error TS1212: Identifier expected. 'get' is a reserved word in strict mode + + +==== tests/cases/conformance/es6/modules/t1.ts (0 errors) ==== + + let set = { + set foo(x: number) { + } + } + let get = 10; + + export { set, get }; + +==== tests/cases/conformance/es6/modules/t2.ts (1 errors) ==== + import * as set from "./t1"; + ~~~ +!!! error TS1212: Identifier expected. 'set' is a reserved word in strict mode + +==== tests/cases/conformance/es6/modules/t3.ts (1 errors) ==== + import { set as yield } from "./t1"; + ~~~~~ +!!! error TS1212: Identifier expected. 'yield' is a reserved word in strict mode + +==== tests/cases/conformance/es6/modules/t4.ts (1 errors) ==== + import { get } from "./t1"; + ~~~ +!!! error TS1212: Identifier expected. 'get' is a reserved word in strict mode \ No newline at end of file diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.js b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.js new file mode 100644 index 00000000000..4b1564b5ab2 --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.js @@ -0,0 +1,32 @@ +//// [tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames01.ts] //// + +//// [t1.ts] + +let set = { + set foo(x: number) { + } +} +let get = 10; + +export { set, get }; + +//// [t2.ts] +import * as set from "./t1"; + +//// [t3.ts] +import { set as yield } from "./t1"; + +//// [t4.ts] +import { get } from "./t1"; + +//// [t1.js] +var set = { + set foo(x) { + } +}; +exports.set = set; +var get = 10; +exports.get = get; +//// [t2.js] +//// [t3.js] +//// [t4.js] diff --git a/tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames01.ts b/tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames01.ts new file mode 100644 index 00000000000..fff5f9833ae --- /dev/null +++ b/tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames01.ts @@ -0,0 +1,20 @@ +// @module: commonjs +// @target: es5 + +// @filename: t1.ts +let set = { + set foo(x: number) { + } +} +let get = 10; + +export { set, get }; + +// @filename: t2.ts +import * as set from "./t1"; + +// @filename: t3.ts +import { set as yield } from "./t1"; + +// @filename: t4.ts +import { get } from "./t1"; \ No newline at end of file From a0cb5a10d656499e3914ad3ab678939d91d5b396 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 23 Apr 2015 14:16:48 -0700 Subject: [PATCH 2/4] Fixed checks to use isReservedNameInStrictMode. --- src/compiler/checker.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 50d17638371..ee4cc5984ab 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12000,7 +12000,7 @@ module ts { function isReservedWordInStrictMode(node: Identifier): boolean { // Check that originalKeywordKind is less than LastFutureReservedWord to see if an Identifier is a strict-mode reserved word return (node.parserContextFlags & ParserContextFlags.StrictMode) && - (node.originalKeywordKind >= SyntaxKind.FirstFutureReservedWord && node.originalKeywordKind <= SyntaxKind.LastFutureReservedWord); + (SyntaxKind.FirstFutureReservedWord <= node.originalKeywordKind && node.originalKeywordKind <= SyntaxKind.LastFutureReservedWord); } function reportStrictModeGrammarErrorInClassDeclaration(identifier: Identifier, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean { @@ -12020,7 +12020,7 @@ module ts { let nameBindings = impotClause.namedBindings; if (nameBindings.kind === SyntaxKind.NamespaceImport) { let name = (nameBindings).name; - if (name.originalKeywordKind) { + if (isReservedWordInStrictMode(name)) { let nameText = declarationNameToString(name); return grammarErrorOnNode(name, Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText); } @@ -12029,7 +12029,7 @@ module ts { let reportError = false; for (let element of (nameBindings).elements) { let name = element.name; - if (name.originalKeywordKind) { + if (isReservedWordInStrictMode(name)) { let nameText = declarationNameToString(name); reportError = reportError || grammarErrorOnNode(name, Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode, nameText); } From e0c44db8dd4a1c28aab5f1765d4430b466015021 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 23 Apr 2015 14:23:37 -0700 Subject: [PATCH 3/4] Accepted baselines. --- ...rtsWithContextualKeywordNames01.errors.txt | 29 ----------------- ...mportsWithContextualKeywordNames01.symbols | 30 +++++++++++++++++ ...dImportsWithContextualKeywordNames01.types | 32 +++++++++++++++++++ 3 files changed, 62 insertions(+), 29 deletions(-) delete mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt deleted file mode 100644 index fa9635da3ed..00000000000 --- a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt +++ /dev/null @@ -1,29 +0,0 @@ -tests/cases/conformance/es6/modules/t2.ts(1,13): error TS1212: Identifier expected. 'set' is a reserved word in strict mode -tests/cases/conformance/es6/modules/t3.ts(1,17): error TS1212: Identifier expected. 'yield' is a reserved word in strict mode -tests/cases/conformance/es6/modules/t4.ts(1,10): error TS1212: Identifier expected. 'get' is a reserved word in strict mode - - -==== tests/cases/conformance/es6/modules/t1.ts (0 errors) ==== - - let set = { - set foo(x: number) { - } - } - let get = 10; - - export { set, get }; - -==== tests/cases/conformance/es6/modules/t2.ts (1 errors) ==== - import * as set from "./t1"; - ~~~ -!!! error TS1212: Identifier expected. 'set' is a reserved word in strict mode - -==== tests/cases/conformance/es6/modules/t3.ts (1 errors) ==== - import { set as yield } from "./t1"; - ~~~~~ -!!! error TS1212: Identifier expected. 'yield' is a reserved word in strict mode - -==== tests/cases/conformance/es6/modules/t4.ts (1 errors) ==== - import { get } from "./t1"; - ~~~ -!!! error TS1212: Identifier expected. 'get' is a reserved word in strict mode \ No newline at end of file diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols new file mode 100644 index 00000000000..f6695a9cf37 --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols @@ -0,0 +1,30 @@ +=== tests/cases/conformance/es6/modules/t1.ts === + +let set = { +>set : Symbol(set, Decl(t1.ts, 1, 3)) + + set foo(x: number) { +>foo : Symbol(foo, Decl(t1.ts, 1, 11)) +>x : Symbol(x, Decl(t1.ts, 2, 12)) + } +} +let get = 10; +>get : Symbol(get, Decl(t1.ts, 5, 3)) + +export { set, get }; +>set : Symbol(set, Decl(t1.ts, 7, 8)) +>get : Symbol(get, Decl(t1.ts, 7, 13)) + +=== tests/cases/conformance/es6/modules/t2.ts === +import * as set from "./t1"; +>set : Symbol(set, Decl(t2.ts, 0, 6)) + +=== tests/cases/conformance/es6/modules/t3.ts === +import { set as yield } from "./t1"; +>set : Symbol(yield, Decl(t3.ts, 0, 8)) +>yield : Symbol(yield, Decl(t3.ts, 0, 8)) + +=== tests/cases/conformance/es6/modules/t4.ts === +import { get } from "./t1"; +>get : Symbol(get, Decl(t4.ts, 0, 8)) + diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types new file mode 100644 index 00000000000..a687787c462 --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types @@ -0,0 +1,32 @@ +=== tests/cases/conformance/es6/modules/t1.ts === + +let set = { +>set : { foo: number; } +>{ set foo(x: number) { }} : { foo: number; } + + set foo(x: number) { +>foo : number +>x : number + } +} +let get = 10; +>get : number +>10 : number + +export { set, get }; +>set : { foo: number; } +>get : number + +=== tests/cases/conformance/es6/modules/t2.ts === +import * as set from "./t1"; +>set : typeof set + +=== tests/cases/conformance/es6/modules/t3.ts === +import { set as yield } from "./t1"; +>set : { foo: number; } +>yield : { foo: number; } + +=== tests/cases/conformance/es6/modules/t4.ts === +import { get } from "./t1"; +>get : number + From 938cfde099767a288ffc66bbe36f2e08bcf5f686 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 23 Apr 2015 14:38:36 -0700 Subject: [PATCH 4/4] Added test. --- ...sAndImportsWithContextualKeywordNames02.js | 29 +++++++++++++++ ...mportsWithContextualKeywordNames02.symbols | 35 ++++++++++++++++++ ...dImportsWithContextualKeywordNames02.types | 36 +++++++++++++++++++ ...sAndImportsWithContextualKeywordNames02.ts | 18 ++++++++++ 4 files changed, 118 insertions(+) create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.js create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.symbols create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.types create mode 100644 tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames02.ts diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.js b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.js new file mode 100644 index 00000000000..e9a0b45446f --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.js @@ -0,0 +1,29 @@ +//// [tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames02.ts] //// + +//// [t1.ts] + +let as = 100; + +export { as as return, as }; + +//// [t2.ts] +import * as as from "./t1"; +var x = as.as; +var y = as.return; + +//// [t3.ts] +import { as as as } from "./t1"; + +//// [t4.ts] +import { as } from "./t1"; + +//// [t1.js] +var as = 100; +exports.return = as; +exports.as = as; +//// [t2.js] +var as = require("./t1"); +var x = as.as; +var y = as.return; +//// [t3.js] +//// [t4.js] diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.symbols b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.symbols new file mode 100644 index 00000000000..4bc53e9d4b6 --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.symbols @@ -0,0 +1,35 @@ +=== tests/cases/conformance/es6/modules/t1.ts === + +let as = 100; +>as : Symbol(as, Decl(t1.ts, 1, 3)) + +export { as as return, as }; +>as : Symbol(return, Decl(t1.ts, 3, 8)) +>return : Symbol(return, Decl(t1.ts, 3, 8)) +>as : Symbol(as, Decl(t1.ts, 3, 22)) + +=== tests/cases/conformance/es6/modules/t2.ts === +import * as as from "./t1"; +>as : Symbol(as, Decl(t2.ts, 0, 6)) + +var x = as.as; +>x : Symbol(x, Decl(t2.ts, 1, 3)) +>as.as : Symbol(as.as, Decl(t1.ts, 3, 22)) +>as : Symbol(as, Decl(t2.ts, 0, 6)) +>as : Symbol(as.as, Decl(t1.ts, 3, 22)) + +var y = as.return; +>y : Symbol(y, Decl(t2.ts, 2, 3)) +>as.return : Symbol(as.return, Decl(t1.ts, 3, 8)) +>as : Symbol(as, Decl(t2.ts, 0, 6)) +>return : Symbol(as.return, Decl(t1.ts, 3, 8)) + +=== tests/cases/conformance/es6/modules/t3.ts === +import { as as as } from "./t1"; +>as : Symbol(as, Decl(t3.ts, 0, 8)) +>as : Symbol(as, Decl(t3.ts, 0, 8)) + +=== tests/cases/conformance/es6/modules/t4.ts === +import { as } from "./t1"; +>as : Symbol(as, Decl(t4.ts, 0, 8)) + diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.types b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.types new file mode 100644 index 00000000000..853fa787f0a --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames02.types @@ -0,0 +1,36 @@ +=== tests/cases/conformance/es6/modules/t1.ts === + +let as = 100; +>as : number +>100 : number + +export { as as return, as }; +>as : number +>return : number +>as : number + +=== tests/cases/conformance/es6/modules/t2.ts === +import * as as from "./t1"; +>as : typeof as + +var x = as.as; +>x : number +>as.as : number +>as : typeof as +>as : number + +var y = as.return; +>y : number +>as.return : number +>as : typeof as +>return : number + +=== tests/cases/conformance/es6/modules/t3.ts === +import { as as as } from "./t1"; +>as : number +>as : number + +=== tests/cases/conformance/es6/modules/t4.ts === +import { as } from "./t1"; +>as : number + diff --git a/tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames02.ts b/tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames02.ts new file mode 100644 index 00000000000..1b9dadc066f --- /dev/null +++ b/tests/cases/conformance/es6/modules/exportsAndImportsWithContextualKeywordNames02.ts @@ -0,0 +1,18 @@ +// @module: commonjs +// @target: es5 + +// @filename: t1.ts +let as = 100; + +export { as as return, as }; + +// @filename: t2.ts +import * as as from "./t1"; +var x = as.as; +var y = as.return; + +// @filename: t3.ts +import { as as as } from "./t1"; + +// @filename: t4.ts +import { as } from "./t1"; \ No newline at end of file