diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8ab7145c40f..9f46ef3ed38 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -25,6 +25,32 @@ module ts { var emptyArray: any[] = []; var emptySymbols: SymbolTable = {}; + + var checker: TypeChecker = { + getProgram: () => program, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getNodeCount: () => sum(program.getSourceFiles(), "nodeCount"), + getIdentifierCount: () => sum(program.getSourceFiles(), "identifierCount"), + getSymbolCount: () => sum(program.getSourceFiles(), "symbolCount"), + getTypeCount: () => typeCount, + checkProgram: checkProgram, + emitFiles: invokeEmitter, + getParentOfSymbol: getParentOfSymbol, + getTypeOfSymbol: getTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getPropertyOfType: getPropertyOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getReturnTypeOfSignature: getReturnTypeOfSignature, + getSymbolsInScope: getSymbolsInScope, + getSymbolInfo: getSymbolInfo, + getTypeOfNode: getTypeOfNode, + getApparentType: getApparentType, + typeToString: typeToString, + symbolToString: symbolToString, + getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType + }; var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined"); var argumentsSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "arguments"); @@ -71,32 +97,6 @@ module ts { var diagnostics: Diagnostic[] = []; var diagnosticsModified: boolean = false; - var checker: TypeChecker = { - getProgram: () => program, - getDiagnostics: getDiagnostics, - getGlobalDiagnostics: getGlobalDiagnostics, - getNodeCount: () => sum(program.getSourceFiles(), "nodeCount"), - getIdentifierCount: () => sum(program.getSourceFiles(), "identifierCount"), - getSymbolCount: () => sum(program.getSourceFiles(), "symbolCount"), - getTypeCount: () => typeCount, - checkProgram: checkProgram, - emitFiles: invokeEmitter, - getParentOfSymbol: getParentOfSymbol, - getTypeOfSymbol: getTypeOfSymbol, - getPropertiesOfType: getPropertiesOfType, - getPropertyOfType: getPropertyOfType, - getSignaturesOfType: getSignaturesOfType, - getIndexTypeOfType: getIndexTypeOfType, - getReturnTypeOfSignature: getReturnTypeOfSignature, - getSymbolsInScope: getSymbolsInScope, - getSymbolInfo: getSymbolInfo, - getTypeOfNode: getTypeOfNode, - getApparentType: getApparentType, - typeToString: typeToString, - symbolToString: symbolToString, - getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType - }; - function addDiagnostic(diagnostic: Diagnostic) { diagnostics.push(diagnostic); diagnosticsModified = true; @@ -778,7 +778,7 @@ module ts { // But it cant, hence the accessible is going to be undefined, but that doesnt mean m.c is accessible // It is accessible if the parent m is accessible because then m.c can be accessed through qualification meaningToLook = getQualifiedLeftMeaning(meaning); - symbol = symbol.parent; + symbol = getParentOfSymbol(symbol); } // This could be a symbol that is not exported in the external module @@ -901,7 +901,7 @@ module ts { if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { break; } - symbol = accessibleSymbolChain ? accessibleSymbolChain[0].parent : symbol.parent; + symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); meaning = getQualifiedLeftMeaning(meaning); } diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index b0c58f06736..d355c49ab29 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -38,7 +38,7 @@ module ts { } function trySetLanguageAndTerritory(language: string, territory: string, errors: Diagnostic[]): boolean { - var compilerFilePath = sys.getExecutingFilePath(); + var compilerFilePath = normalizePath(sys.getExecutingFilePath()); var containingDirectoryPath = getDirectoryPath(compilerFilePath); var filePath = combinePaths(containingDirectoryPath, language); @@ -62,7 +62,7 @@ module ts { return false; } try { - localizedDiagnosticMessages = JSON.parse(fileContents); + ts.localizedDiagnosticMessages = JSON.parse(fileContents); } catch (e) { errors.push(createCompilerDiagnostic(Diagnostics.Corrupted_locale_file_0, filePath)); diff --git a/tests/baselines/reference/moduleSymbolMerging.js b/tests/baselines/reference/moduleSymbolMerging.js new file mode 100644 index 00000000000..4b35f939873 --- /dev/null +++ b/tests/baselines/reference/moduleSymbolMerging.js @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/moduleSymbolMerging.ts] //// + +//// [A.ts] + +module A { export interface I {} } + +//// [B.ts] +/// +module A { ; } +module B { + export function f(): A.I { return null; } +} + + + +//// [A.js] +//// [B.js] +var A; +(function (A) { + ; +})(A || (A = {})); +var B; +(function (B) { + function f() { + return null; + } + B.f = f; +})(B || (B = {})); + + +//// [A.d.ts] +declare module A { + interface I { + } +} +//// [B.d.ts] +/// +declare module A { +} +declare module B { + function f(): A.I; +} diff --git a/tests/cases/compiler/moduleSymbolMerging.ts b/tests/cases/compiler/moduleSymbolMerging.ts new file mode 100644 index 00000000000..03df2c5e596 --- /dev/null +++ b/tests/cases/compiler/moduleSymbolMerging.ts @@ -0,0 +1,12 @@ +// @declaration: true + +// @Filename: A.ts +module A { export interface I {} } + +// @Filename: B.ts +/// +module A { ; } +module B { + export function f(): A.I { return null; } +} +