mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-20 19:45:07 -06:00
Merge pull request #2895 from Microsoft/reservedNamesImportsExports
Allow contextually reserved names in import/export clauses
This commit is contained in:
commit
f83efcc7aa
@ -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 = <Identifier>(<NamespaceImport>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 (<NamedImports>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);
|
||||
}
|
||||
|
||||
@ -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]
|
||||
@ -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))
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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]
|
||||
@ -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))
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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";
|
||||
@ -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";
|
||||
Loading…
x
Reference in New Issue
Block a user