From 00576527bd78e095c2d074af4ee70304b58045db Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 4 Dec 2015 15:41:11 -0800 Subject: [PATCH] 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;