break down tests, make more clear whats doing done, remove specific logic from mergeSymbolTable

This commit is contained in:
Wesley Wigham 2015-12-04 15:41:11 -08:00
parent 63fef5083a
commit 00576527bd
6 changed files with 36 additions and 31 deletions

View file

@ -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;

View file

@ -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;

View file

@ -0,0 +1,4 @@
type undefined = string;
function p(undefined = "wat") {
return undefined;
}

View file

@ -0,0 +1 @@
var undefined = void 0;

View file

@ -0,0 +1 @@
var undefined = null;

View file

@ -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;