From 49d8157d28794bb4a1ce5ff1fd268bfdfe3fc2d9 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 28 Aug 2014 23:10:05 -0700 Subject: [PATCH] ensure that sys is not used outside tsc.ts --- Jakefile | 1 - src/compiler/core.ts | 6 ------ src/compiler/emitter.ts | 2 +- src/compiler/parser.ts | 1 - src/compiler/tsc.ts | 7 +++++++ src/harness/fourslash.ts | 6 +++--- src/harness/harness.ts | 12 ++++++++---- src/harness/projectsRunner.ts | 2 +- src/services/core/diagnosticCore.ts | 2 +- 9 files changed, 21 insertions(+), 18 deletions(-) diff --git a/Jakefile b/Jakefile index e754f5baad9..b803f23eae8 100644 --- a/Jakefile +++ b/Jakefile @@ -43,7 +43,6 @@ var compilerSources = [ var servicesSources = [ "core.ts", - "sys.ts", "types.ts", "scanner.ts", "parser.ts", diff --git a/src/compiler/core.ts b/src/compiler/core.ts index b042b7e6cc8..fbf767b91a9 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -509,12 +509,6 @@ module ts { return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } - export function getCanonicalFileName(fileName: string): string { - // if underlying system can distinguish between two files whose names differs only in cases then file name already in canonical form. - // otherwise use toLowerCase as a canonical form. - return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); - } - export interface ObjectAllocator { getNodeConstructor(kind: SyntaxKind): new () => Node; getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index ee616c2c4ca..fc3f845dc45 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -290,7 +290,7 @@ module ts { } else { // Empty string - make sure we write empty line - writer.writeLiteral(sys.newLine); + writer.writeLiteral(newLine); } } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f6a9506542a..6bdbbe67504 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1,4 +1,3 @@ -/// /// /// /// diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 202864c72a0..8188cb8e4d1 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -137,6 +137,12 @@ module ts { var currentDirectory: string; var existingDirectories: Map = {}; + function getCanonicalFileName(fileName: string): string { + // if underlying system can distinguish between two files whose names differs only in cases then file name already in canonical form. + // otherwise use toLowerCase as a canonical form. + return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + function getSourceFile(filename: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile { try { var text = sys.readFile(filename, options.charset); @@ -323,6 +329,7 @@ module ts { function compile(commandLine: ParsedCommandLine, compilerHost: CompilerHost) { var parseStart = new Date().getTime(); var program = createProgram(commandLine.filenames, commandLine.options, compilerHost); + var bindStart = new Date().getTime(); var errors = program.getDiagnostics(); if (errors.length) { diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index dd6d240ec8b..81187039ba8 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1893,9 +1893,9 @@ module FourSlash { fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); var files: { [filename: string]: ts.SourceFile; } = {}; - files[ts.getCanonicalFileName(fourslashFilename)] = fourslashSourceFile; - files[ts.getCanonicalFileName(fileName)] = ts.createSourceFile(fileName, content, ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); - files[ts.getCanonicalFileName(Harness.Compiler.defaultLibFileName)] = Harness.Compiler.defaultLibSourceFile; + files[Harness.Compiler.getCanonicalFileName(fourslashFilename)] = fourslashSourceFile; + files[Harness.Compiler.getCanonicalFileName(fileName)] = ts.createSourceFile(fileName, content, ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); + files[Harness.Compiler.getCanonicalFileName(Harness.Compiler.defaultLibFileName)] = Harness.Compiler.defaultLibSourceFile; var host = Harness.Compiler.createCompilerHost(files, (fn, contents) => result = contents); var program = ts.createProgram([fourslashFilename, fileName], { out: "fourslashTestOutput.js" }, host); diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 1a115fbddd4..f2488c06b48 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -534,13 +534,17 @@ module Harness { export var defaultLibFileName = 'lib.d.ts'; export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.ES5, /*version:*/ "0"); + export function getCanonicalFileName(fileName: string): string { + return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + export function createCompilerHost(filemap: { [filename: string]: ts.SourceFile; }, writeFile: (fn: string, contents: string, writeByteOrderMark:boolean) => void): ts.CompilerHost { return { getCurrentDirectory: sys.getCurrentDirectory, getCancellationToken: (): any => undefined, getSourceFile: (fn, languageVersion) => { - if (Object.prototype.hasOwnProperty.call(filemap, ts.getCanonicalFileName(fn))) { - return filemap[ts.getCanonicalFileName(fn)]; + if (Object.prototype.hasOwnProperty.call(filemap, getCanonicalFileName(fn))) { + return filemap[getCanonicalFileName(fn)]; } else { var lib = defaultLibFileName; if (fn === defaultLibFileName) { @@ -552,7 +556,7 @@ module Harness { }, getDefaultLibFilename: () => defaultLibFileName, writeFile: writeFile, - getCanonicalFileName: ts.getCanonicalFileName, + getCanonicalFileName: getCanonicalFileName, useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames, getNewLine: ()=> sys.newLine }; @@ -729,7 +733,7 @@ module Harness { var filemap: { [name: string]: ts.SourceFile; } = {}; var register = (file: { unitName: string; content: string; }) => { var filename = Path.switchToForwardSlashes(file.unitName); - filemap[ts.getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, options.target, /*version:*/ "0"); + filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, options.target, /*version:*/ "0"); }; inputFiles.forEach(register); otherFiles.forEach(register); diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index b6d25b558f8..b0f3e939d30 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -187,7 +187,7 @@ class ProjectRunner extends RunnerBase { getDefaultLibFilename: () => "lib.d.ts", writeFile: writeFile, getCurrentDirectory: getCurrentDirectory, - getCanonicalFileName: ts.getCanonicalFileName, + getCanonicalFileName: Harness.Compiler.getCanonicalFileName, useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames, getNewLine: () => sys.newLine }; diff --git a/src/services/core/diagnosticCore.ts b/src/services/core/diagnosticCore.ts index 0c12a354933..b4d95a1c60b 100644 --- a/src/services/core/diagnosticCore.ts +++ b/src/services/core/diagnosticCore.ts @@ -120,7 +120,7 @@ module TypeScript { // TODO: We need to expose an extensibility point on our hosts to have them tell us what // they want the newline string to be. That way we can get the correct result regardless // of which host we use - return sys.newLine ? sys.newLine : "\r\n"; + return "\r\n"; } function getLargestIndex(diagnostic: string): number {