diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 489e44a9cd3..2381288b0de 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11998,7 +11998,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 { @@ -12018,7 +12018,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); } @@ -12027,7 +12027,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); } 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/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 + 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/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 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