From c4db5cc6b590bac31d0379b6db0caf3700b76d00 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 27 Oct 2015 12:47:35 -0700 Subject: [PATCH 1/4] Error on redeclarations of undefined --- src/compiler/checker.ts | 20 ++++++++- src/compiler/diagnosticMessages.json | 4 ++ .../undefinedTypeAssignment.errors.txt | 43 +++++++++++++++++++ .../reference/undefinedTypeAssignment.js | 42 ++++++++++++++++++ .../cases/compiler/undefinedTypeAssignment.ts | 19 ++++++++ 5 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/undefinedTypeAssignment.errors.txt create mode 100644 tests/baselines/reference/undefinedTypeAssignment.js create mode 100644 tests/cases/compiler/undefinedTypeAssignment.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5370e7c4f02..ba0342596c1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -50,6 +50,7 @@ namespace ts { let emitResolver = createResolver(); let undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined"); + undefinedSymbol.declarations = []; let argumentsSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "arguments"); let checker: TypeChecker = { @@ -225,6 +226,10 @@ namespace ts { ResolvedReturnType } + const builtinGlobals: SymbolTable = { + [undefinedSymbol.name]: undefinedSymbol + }; + initializeTypeChecker(); return checker; @@ -336,6 +341,13 @@ namespace ts { target[id] = source[id]; } else { + if (target === globals && source !== builtinGlobals) { + if (hasProperty(builtinGlobals, id) && source[id].declarations && source[id].declarations.length) { + // Error on builtin redeclarations + forEach(source[id].declarations, addDeclarationDiagnostic.bind(undefined, id)); + continue; + } + } let symbol = target[id]; if (!(symbol.flags & SymbolFlags.Merged)) { target[id] = symbol = cloneSymbol(symbol); @@ -344,6 +356,10 @@ namespace ts { } } } + + function addDeclarationDiagnostic(id: string, declaration: Declaration) { + diagnostics.add(createDiagnosticForNode(declaration, Diagnostics.Declaration_duplicates_builtin_global_identifier_0, id)); + } } function getSymbolLinks(symbol: Symbol): SymbolLinks { @@ -14909,6 +14925,9 @@ namespace ts { bindSourceFile(file); }); + // Setup global builtins + mergeSymbolTable(globals, builtinGlobals); + // Initialize global symbol table forEach(host.getSourceFiles(), file => { if (!isExternalModule(file)) { @@ -14920,7 +14939,6 @@ namespace ts { getSymbolLinks(undefinedSymbol).type = undefinedType; getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments"); getSymbolLinks(unknownSymbol).type = unknownType; - globals[undefinedSymbol.name] = undefinedSymbol; // Initialize special types globalArrayType = getGlobalType("Array", /*arity*/ 1); globalObjectType = getGlobalType("Object"); diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index b799c2addba..d6e7d8dd592 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1168,6 +1168,10 @@ "category": "Error", "code": 2396 }, + "Declaration duplicates builtin global identifier '{0}'.": { + "category": "Error", + "code": 2397 + }, "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { "category": "Error", "code": 2399 diff --git a/tests/baselines/reference/undefinedTypeAssignment.errors.txt b/tests/baselines/reference/undefinedTypeAssignment.errors.txt new file mode 100644 index 00000000000..a14b1191255 --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment.errors.txt @@ -0,0 +1,43 @@ +tests/cases/compiler/a.ts(1,1): error TS2397: Declaration duplicates builtin global identifier 'undefined'. +tests/cases/compiler/a.ts(2,5): error TS2397: Declaration duplicates builtin global identifier 'undefined'. +tests/cases/compiler/a.ts(3,5): error TS2397: Declaration duplicates builtin global identifier 'undefined'. +tests/cases/compiler/b.ts(1,7): error TS2397: Declaration duplicates builtin global identifier 'undefined'. +tests/cases/compiler/b.ts(4,11): error TS2397: Declaration duplicates builtin global identifier 'undefined'. +tests/cases/compiler/b.ts(7,11): error TS2397: Declaration duplicates builtin global identifier 'undefined'. +tests/cases/compiler/b.ts(10,8): error TS2304: Cannot find name 'undefined'. + + +==== tests/cases/compiler/a.ts (3 errors) ==== + type undefined = string; + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. + var undefined = void 0; + ~~~~~~~~~ +!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. + var undefined = null; + ~~~~~~~~~ +!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. + function p(undefined = 42) { + return undefined; + } +==== tests/cases/compiler/b.ts (4 errors) ==== + class undefined { + ~~~~~~~~~ +!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. + foo: string; + } + interface undefined { + ~~~~~~~~~ +!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. + member: number; + } + namespace undefined { + ~~~~~~~~~ +!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. + export var x = 42; + } + var x: undefined; + ~~~~~~~~~ +!!! error TS2304: Cannot find name 'undefined'. + var x: typeof undefined; + \ No newline at end of file diff --git a/tests/baselines/reference/undefinedTypeAssignment.js b/tests/baselines/reference/undefinedTypeAssignment.js new file mode 100644 index 00000000000..9b4106c18ea --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment.js @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/undefinedTypeAssignment.ts] //// + +//// [a.ts] +type undefined = string; +var undefined = void 0; +var undefined = null; +function p(undefined = 42) { + return undefined; +} +//// [b.ts] +class undefined { + foo: string; +} +interface undefined { + member: number; +} +namespace undefined { + export var x = 42; +} +var x: undefined; +var x: typeof undefined; + + +//// [a.js] +var undefined = void 0; +var undefined = null; +function p(undefined) { + if (undefined === void 0) { undefined = 42; } + return undefined; +} +//// [b.js] +var undefined = (function () { + function undefined() { + } + return undefined; +})(); +var undefined; +(function (undefined) { + undefined.x = 42; +})(undefined || (undefined = {})); +var x; +var x; diff --git a/tests/cases/compiler/undefinedTypeAssignment.ts b/tests/cases/compiler/undefinedTypeAssignment.ts new file mode 100644 index 00000000000..d8a128a49e7 --- /dev/null +++ b/tests/cases/compiler/undefinedTypeAssignment.ts @@ -0,0 +1,19 @@ +// @filename: a.ts +type undefined = string; +var undefined = void 0; +var undefined = null; +function p(undefined = 42) { + return undefined; +} +// @filename: b.ts +class undefined { + foo: string; +} +interface undefined { + member: number; +} +namespace undefined { + export var x = 42; +} +var x: undefined; +var x: typeof undefined; From 0e47c67ee1b78aef0ac7d5ec63a1197e5499d688 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 28 Oct 2015 17:00:47 -0700 Subject: [PATCH 2/4] update error --- src/compiler/checker.ts | 2 +- src/compiler/diagnosticMessages.json | 2 +- .../undefinedTypeAssignment.errors.txt | 24 +++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ba0342596c1..fd86ff97c6a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -358,7 +358,7 @@ namespace ts { } function addDeclarationDiagnostic(id: string, declaration: Declaration) { - diagnostics.add(createDiagnosticForNode(declaration, Diagnostics.Declaration_duplicates_builtin_global_identifier_0, id)); + diagnostics.add(createDiagnosticForNode(declaration, Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0, id)); } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index d6e7d8dd592..be0628e93dd 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1168,7 +1168,7 @@ "category": "Error", "code": 2396 }, - "Declaration duplicates builtin global identifier '{0}'.": { + "Declaration name conflicts with built-in global identifier '{0}'.": { "category": "Error", "code": 2397 }, diff --git a/tests/baselines/reference/undefinedTypeAssignment.errors.txt b/tests/baselines/reference/undefinedTypeAssignment.errors.txt index a14b1191255..0b4a8eff874 100644 --- a/tests/baselines/reference/undefinedTypeAssignment.errors.txt +++ b/tests/baselines/reference/undefinedTypeAssignment.errors.txt @@ -1,39 +1,39 @@ -tests/cases/compiler/a.ts(1,1): error TS2397: Declaration duplicates builtin global identifier 'undefined'. -tests/cases/compiler/a.ts(2,5): error TS2397: Declaration duplicates builtin global identifier 'undefined'. -tests/cases/compiler/a.ts(3,5): error TS2397: Declaration duplicates builtin global identifier 'undefined'. -tests/cases/compiler/b.ts(1,7): error TS2397: Declaration duplicates builtin global identifier 'undefined'. -tests/cases/compiler/b.ts(4,11): error TS2397: Declaration duplicates builtin global identifier 'undefined'. -tests/cases/compiler/b.ts(7,11): error TS2397: Declaration duplicates builtin global identifier 'undefined'. +tests/cases/compiler/a.ts(1,1): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. +tests/cases/compiler/a.ts(2,5): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. +tests/cases/compiler/a.ts(3,5): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. +tests/cases/compiler/b.ts(1,7): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. +tests/cases/compiler/b.ts(4,11): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. +tests/cases/compiler/b.ts(7,11): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. tests/cases/compiler/b.ts(10,8): error TS2304: Cannot find name 'undefined'. ==== tests/cases/compiler/a.ts (3 errors) ==== type undefined = string; ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. var undefined = void 0; ~~~~~~~~~ -!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. var undefined = null; ~~~~~~~~~ -!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. function p(undefined = 42) { return undefined; } ==== tests/cases/compiler/b.ts (4 errors) ==== class undefined { ~~~~~~~~~ -!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. foo: string; } interface undefined { ~~~~~~~~~ -!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. member: number; } namespace undefined { ~~~~~~~~~ -!!! error TS2397: Declaration duplicates builtin global identifier 'undefined'. +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. export var x = 42; } var x: undefined; From 00576527bd78e095c2d074af4ee70304b58045db Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 4 Dec 2015 15:41:11 -0800 Subject: [PATCH 3/4] break down tests, make more clear whats doing done, remove specific logic from mergeSymbolTable --- src/compiler/checker.ts | 31 ++++++++++++------- .../cases/compiler/undefinedTypeAssignment.ts | 19 ------------ .../compiler/undefinedTypeAssignment1.ts | 4 +++ .../compiler/undefinedTypeAssignment2.ts | 1 + .../compiler/undefinedTypeAssignment3.ts | 1 + .../compiler/undefinedTypeAssignment4.ts | 11 +++++++ 6 files changed, 36 insertions(+), 31 deletions(-) delete mode 100644 tests/cases/compiler/undefinedTypeAssignment.ts create mode 100644 tests/cases/compiler/undefinedTypeAssignment1.ts create mode 100644 tests/cases/compiler/undefinedTypeAssignment2.ts create mode 100644 tests/cases/compiler/undefinedTypeAssignment3.ts create mode 100644 tests/cases/compiler/undefinedTypeAssignment4.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 18667e46733..8adb05f7a9c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -355,13 +355,6 @@ namespace ts { target[id] = source[id]; } else { - if (target === globals && source !== builtinGlobals) { - if (hasProperty(builtinGlobals, id) && source[id].declarations && source[id].declarations.length) { - // Error on builtin redeclarations - forEach(source[id].declarations, addDeclarationDiagnostic.bind(undefined, id)); - continue; - } - } let symbol = target[id]; if (!(symbol.flags & SymbolFlags.Merged)) { target[id] = symbol = cloneSymbol(symbol); @@ -370,9 +363,23 @@ namespace ts { } } } + } - function addDeclarationDiagnostic(id: string, declaration: Declaration) { - diagnostics.add(createDiagnosticForNode(declaration, Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0, id)); + function addToSymbolTable(target: SymbolTable, source: SymbolTable, message: DiagnosticMessage) { + for (const id in source) { + if (hasProperty(source, id)) { + if (hasProperty(target, id)) { + // Error on redeclarations + forEach(target[id].declarations, addDeclarationDiagnostic(id, message)); + } + else { + target[id] = source[id]; + } + } + } + + function addDeclarationDiagnostic(id: string, message: DiagnosticMessage) { + return (declaration: Declaration) => diagnostics.add(createDiagnosticForNode(declaration, message, id)); } } @@ -15340,9 +15347,6 @@ namespace ts { bindSourceFile(file, compilerOptions); }); - // Setup global builtins - mergeSymbolTable(globals, builtinGlobals); - // Initialize global symbol table forEach(host.getSourceFiles(), file => { if (!isExternalOrCommonJsModule(file)) { @@ -15350,6 +15354,9 @@ namespace ts { } }); + // Setup global builtins + addToSymbolTable(globals, builtinGlobals, Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0); + getSymbolLinks(undefinedSymbol).type = undefinedType; getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments"); getSymbolLinks(unknownSymbol).type = unknownType; diff --git a/tests/cases/compiler/undefinedTypeAssignment.ts b/tests/cases/compiler/undefinedTypeAssignment.ts deleted file mode 100644 index d8a128a49e7..00000000000 --- a/tests/cases/compiler/undefinedTypeAssignment.ts +++ /dev/null @@ -1,19 +0,0 @@ -// @filename: a.ts -type undefined = string; -var undefined = void 0; -var undefined = null; -function p(undefined = 42) { - return undefined; -} -// @filename: b.ts -class undefined { - foo: string; -} -interface undefined { - member: number; -} -namespace undefined { - export var x = 42; -} -var x: undefined; -var x: typeof undefined; diff --git a/tests/cases/compiler/undefinedTypeAssignment1.ts b/tests/cases/compiler/undefinedTypeAssignment1.ts new file mode 100644 index 00000000000..7d340daba69 --- /dev/null +++ b/tests/cases/compiler/undefinedTypeAssignment1.ts @@ -0,0 +1,4 @@ +type undefined = string; +function p(undefined = "wat") { + return undefined; +} diff --git a/tests/cases/compiler/undefinedTypeAssignment2.ts b/tests/cases/compiler/undefinedTypeAssignment2.ts new file mode 100644 index 00000000000..3f42068e24e --- /dev/null +++ b/tests/cases/compiler/undefinedTypeAssignment2.ts @@ -0,0 +1 @@ +var undefined = void 0; diff --git a/tests/cases/compiler/undefinedTypeAssignment3.ts b/tests/cases/compiler/undefinedTypeAssignment3.ts new file mode 100644 index 00000000000..8bada4f946c --- /dev/null +++ b/tests/cases/compiler/undefinedTypeAssignment3.ts @@ -0,0 +1 @@ +var undefined = null; diff --git a/tests/cases/compiler/undefinedTypeAssignment4.ts b/tests/cases/compiler/undefinedTypeAssignment4.ts new file mode 100644 index 00000000000..fc0dc155acd --- /dev/null +++ b/tests/cases/compiler/undefinedTypeAssignment4.ts @@ -0,0 +1,11 @@ +class undefined { + foo: string; +} +interface undefined { + member: number; +} +namespace undefined { + export var x = 42; +} +var x: undefined; +var y: typeof undefined; From cb4a40867ee7b76500ebe3f4fcff582b6e1894af Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 4 Dec 2015 15:44:35 -0800 Subject: [PATCH 4/4] add baselines --- .../undefinedTypeAssignment.errors.txt | 43 ------------------- .../reference/undefinedTypeAssignment.js | 42 ------------------ .../undefinedTypeAssignment1.errors.txt | 11 +++++ .../reference/undefinedTypeAssignment1.js | 12 ++++++ .../undefinedTypeAssignment2.errors.txt | 8 ++++ .../reference/undefinedTypeAssignment2.js | 6 +++ .../undefinedTypeAssignment3.errors.txt | 8 ++++ .../reference/undefinedTypeAssignment3.js | 6 +++ .../undefinedTypeAssignment4.errors.txt | 24 +++++++++++ .../reference/undefinedTypeAssignment4.js | 26 +++++++++++ 10 files changed, 101 insertions(+), 85 deletions(-) delete mode 100644 tests/baselines/reference/undefinedTypeAssignment.errors.txt delete mode 100644 tests/baselines/reference/undefinedTypeAssignment.js create mode 100644 tests/baselines/reference/undefinedTypeAssignment1.errors.txt create mode 100644 tests/baselines/reference/undefinedTypeAssignment1.js create mode 100644 tests/baselines/reference/undefinedTypeAssignment2.errors.txt create mode 100644 tests/baselines/reference/undefinedTypeAssignment2.js create mode 100644 tests/baselines/reference/undefinedTypeAssignment3.errors.txt create mode 100644 tests/baselines/reference/undefinedTypeAssignment3.js create mode 100644 tests/baselines/reference/undefinedTypeAssignment4.errors.txt create mode 100644 tests/baselines/reference/undefinedTypeAssignment4.js diff --git a/tests/baselines/reference/undefinedTypeAssignment.errors.txt b/tests/baselines/reference/undefinedTypeAssignment.errors.txt deleted file mode 100644 index 0b4a8eff874..00000000000 --- a/tests/baselines/reference/undefinedTypeAssignment.errors.txt +++ /dev/null @@ -1,43 +0,0 @@ -tests/cases/compiler/a.ts(1,1): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. -tests/cases/compiler/a.ts(2,5): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. -tests/cases/compiler/a.ts(3,5): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. -tests/cases/compiler/b.ts(1,7): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. -tests/cases/compiler/b.ts(4,11): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. -tests/cases/compiler/b.ts(7,11): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. -tests/cases/compiler/b.ts(10,8): error TS2304: Cannot find name 'undefined'. - - -==== tests/cases/compiler/a.ts (3 errors) ==== - type undefined = string; - ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. - var undefined = void 0; - ~~~~~~~~~ -!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. - var undefined = null; - ~~~~~~~~~ -!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. - function p(undefined = 42) { - return undefined; - } -==== tests/cases/compiler/b.ts (4 errors) ==== - class undefined { - ~~~~~~~~~ -!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. - foo: string; - } - interface undefined { - ~~~~~~~~~ -!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. - member: number; - } - namespace undefined { - ~~~~~~~~~ -!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. - export var x = 42; - } - var x: undefined; - ~~~~~~~~~ -!!! error TS2304: Cannot find name 'undefined'. - var x: typeof undefined; - \ No newline at end of file diff --git a/tests/baselines/reference/undefinedTypeAssignment.js b/tests/baselines/reference/undefinedTypeAssignment.js deleted file mode 100644 index 9b4106c18ea..00000000000 --- a/tests/baselines/reference/undefinedTypeAssignment.js +++ /dev/null @@ -1,42 +0,0 @@ -//// [tests/cases/compiler/undefinedTypeAssignment.ts] //// - -//// [a.ts] -type undefined = string; -var undefined = void 0; -var undefined = null; -function p(undefined = 42) { - return undefined; -} -//// [b.ts] -class undefined { - foo: string; -} -interface undefined { - member: number; -} -namespace undefined { - export var x = 42; -} -var x: undefined; -var x: typeof undefined; - - -//// [a.js] -var undefined = void 0; -var undefined = null; -function p(undefined) { - if (undefined === void 0) { undefined = 42; } - return undefined; -} -//// [b.js] -var undefined = (function () { - function undefined() { - } - return undefined; -})(); -var undefined; -(function (undefined) { - undefined.x = 42; -})(undefined || (undefined = {})); -var x; -var x; diff --git a/tests/baselines/reference/undefinedTypeAssignment1.errors.txt b/tests/baselines/reference/undefinedTypeAssignment1.errors.txt new file mode 100644 index 00000000000..b8dd74a58a8 --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment1.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/undefinedTypeAssignment1.ts(1,1): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + + +==== tests/cases/compiler/undefinedTypeAssignment1.ts (1 errors) ==== + type undefined = string; + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + function p(undefined = "wat") { + return undefined; + } + \ No newline at end of file diff --git a/tests/baselines/reference/undefinedTypeAssignment1.js b/tests/baselines/reference/undefinedTypeAssignment1.js new file mode 100644 index 00000000000..1f53c4f6c45 --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment1.js @@ -0,0 +1,12 @@ +//// [undefinedTypeAssignment1.ts] +type undefined = string; +function p(undefined = "wat") { + return undefined; +} + + +//// [undefinedTypeAssignment1.js] +function p(undefined) { + if (undefined === void 0) { undefined = "wat"; } + return undefined; +} diff --git a/tests/baselines/reference/undefinedTypeAssignment2.errors.txt b/tests/baselines/reference/undefinedTypeAssignment2.errors.txt new file mode 100644 index 00000000000..55fdbf0fc1b --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment2.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/undefinedTypeAssignment2.ts(1,5): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + + +==== tests/cases/compiler/undefinedTypeAssignment2.ts (1 errors) ==== + var undefined = void 0; + ~~~~~~~~~ +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + \ No newline at end of file diff --git a/tests/baselines/reference/undefinedTypeAssignment2.js b/tests/baselines/reference/undefinedTypeAssignment2.js new file mode 100644 index 00000000000..040bc8c800d --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment2.js @@ -0,0 +1,6 @@ +//// [undefinedTypeAssignment2.ts] +var undefined = void 0; + + +//// [undefinedTypeAssignment2.js] +var undefined = void 0; diff --git a/tests/baselines/reference/undefinedTypeAssignment3.errors.txt b/tests/baselines/reference/undefinedTypeAssignment3.errors.txt new file mode 100644 index 00000000000..88df370940f --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment3.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/undefinedTypeAssignment3.ts(1,5): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + + +==== tests/cases/compiler/undefinedTypeAssignment3.ts (1 errors) ==== + var undefined = null; + ~~~~~~~~~ +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + \ No newline at end of file diff --git a/tests/baselines/reference/undefinedTypeAssignment3.js b/tests/baselines/reference/undefinedTypeAssignment3.js new file mode 100644 index 00000000000..4015d49e33a --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment3.js @@ -0,0 +1,6 @@ +//// [undefinedTypeAssignment3.ts] +var undefined = null; + + +//// [undefinedTypeAssignment3.js] +var undefined = null; diff --git a/tests/baselines/reference/undefinedTypeAssignment4.errors.txt b/tests/baselines/reference/undefinedTypeAssignment4.errors.txt new file mode 100644 index 00000000000..dab6ea2a880 --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment4.errors.txt @@ -0,0 +1,24 @@ +tests/cases/compiler/undefinedTypeAssignment4.ts(1,7): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. +tests/cases/compiler/undefinedTypeAssignment4.ts(4,11): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. +tests/cases/compiler/undefinedTypeAssignment4.ts(7,11): error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + + +==== tests/cases/compiler/undefinedTypeAssignment4.ts (3 errors) ==== + class undefined { + ~~~~~~~~~ +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + foo: string; + } + interface undefined { + ~~~~~~~~~ +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + member: number; + } + namespace undefined { + ~~~~~~~~~ +!!! error TS2397: Declaration name conflicts with built-in global identifier 'undefined'. + export var x = 42; + } + var x: undefined; + var y: typeof undefined; + \ No newline at end of file diff --git a/tests/baselines/reference/undefinedTypeAssignment4.js b/tests/baselines/reference/undefinedTypeAssignment4.js new file mode 100644 index 00000000000..186afd872c3 --- /dev/null +++ b/tests/baselines/reference/undefinedTypeAssignment4.js @@ -0,0 +1,26 @@ +//// [undefinedTypeAssignment4.ts] +class undefined { + foo: string; +} +interface undefined { + member: number; +} +namespace undefined { + export var x = 42; +} +var x: undefined; +var y: typeof undefined; + + +//// [undefinedTypeAssignment4.js] +var undefined = (function () { + function undefined() { + } + return undefined; +})(); +var undefined; +(function (undefined) { + undefined.x = 42; +})(undefined || (undefined = {})); +var x; +var y;