Skip to content

Commit c17eb7d

Browse files
Merge pull request microsoft#1420 from Microsoft/isOpenAndParents
Remove 'isOpen' and 'version' from teh compiler's SourceFile type.
2 parents bb70e9e + 6170c56 commit c17eb7d

7 files changed

Lines changed: 44 additions & 33 deletions

File tree

src/compiler/parser.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,24 @@ module ts {
10151015
return 0;
10161016
}
10171017

1018-
export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version: string, isOpen: boolean = false): SourceFile {
1018+
function fixupParentReferences(sourceFile: SourceFile) {
1019+
// normally parent references are set during binding.
1020+
// however here SourceFile data is used only for syntactic features so running the whole binding process is an overhead.
1021+
// walk over the nodes and set parent references
1022+
var parent: Node = sourceFile;
1023+
function walk(n: Node): void {
1024+
n.parent = parent;
1025+
1026+
var saveParent = parent;
1027+
parent = n;
1028+
forEachChild(n, walk);
1029+
parent = saveParent;
1030+
}
1031+
1032+
forEachChild(sourceFile, walk);
1033+
}
1034+
1035+
export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes = false): SourceFile {
10191036
var parsingContext: ParsingContext;
10201037
var identifiers: Map<string> = {};
10211038
var identifierCount = 0;
@@ -1131,10 +1148,13 @@ module ts {
11311148

11321149
sourceFile.nodeCount = nodeCount;
11331150
sourceFile.identifierCount = identifierCount;
1134-
sourceFile.version = version;
1135-
sourceFile.isOpen = isOpen;
11361151
sourceFile.languageVersion = languageVersion;
11371152
sourceFile.identifiers = identifiers;
1153+
1154+
if (setParentNodes) {
1155+
fixupParentReferences(sourceFile);
1156+
}
1157+
11381158
return sourceFile;
11391159

11401160
function setContextFlag(val: Boolean, flag: ParserContextFlags) {

src/compiler/tsc.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ module ts {
158158
}
159159
text = "";
160160
}
161-
return text !== undefined ? createSourceFile(filename, text, languageVersion, /*version:*/ "0") : undefined;
161+
return text !== undefined ? createSourceFile(filename, text, languageVersion) : undefined;
162162
}
163163

164164
function writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void) {

src/compiler/types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,6 @@ module ts {
895895
nodeCount: number;
896896
identifierCount: number;
897897
symbolCount: number;
898-
isOpen: boolean;
899-
version: string;
900898
languageVersion: ScriptTarget;
901899
identifiers: Map<string>;
902900
}

src/harness/harness.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -538,8 +538,8 @@ module Harness {
538538
}
539539

540540
export var defaultLibFileName = 'lib.d.ts';
541-
export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest, /*version:*/ "0");
542-
export var defaultES6LibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.es6.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest, /*version:*/ "0");
541+
export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest);
542+
export var defaultES6LibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.es6.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest);
543543

544544

545545
// Cache these between executions so we don't have to re-parse them for every test
@@ -565,7 +565,7 @@ module Harness {
565565
function register(file: { unitName: string; content: string; }) {
566566
if (file.content !== undefined) {
567567
var filename = ts.normalizeSlashes(file.unitName);
568-
filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, scriptTarget, /*version:*/ "0");
568+
filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, scriptTarget);
569569
}
570570
};
571571
inputFiles.forEach(register);
@@ -579,7 +579,7 @@ module Harness {
579579
}
580580
else if (fn === fourslashFilename) {
581581
var tsFn = 'tests/cases/fourslash/' + fourslashFilename;
582-
fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), scriptTarget, /*version*/ "0", /*isOpen*/ false);
582+
fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), scriptTarget);
583583
return fourslashSourceFile;
584584
}
585585
else {
@@ -786,7 +786,7 @@ module Harness {
786786
var register = (file: { unitName: string; content: string; }) => {
787787
if (file.content !== undefined) {
788788
var filename = ts.normalizeSlashes(file.unitName);
789-
filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, options.target, /*version:*/ "0");
789+
filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, options.target);
790790
}
791791
};
792792
inputFiles.forEach(register);

src/harness/harnessLanguageService.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ module Harness.LanguageService {
111111
scriptSnapshot: ts.IScriptSnapshot,
112112
version: string,
113113
isOpen: boolean): ts.SourceFile {
114-
return ts.createSourceFile(fileName, scriptSnapshot.getText(0, scriptSnapshot.getLength()), compilationSettings.target, version, isOpen);
114+
var sourceFile = ts.createSourceFile(fileName, scriptSnapshot.getText(0, scriptSnapshot.getLength()), compilationSettings.target);
115+
sourceFile.version = version;
116+
sourceFile.isOpen = isOpen;
117+
return sourceFile;
115118
}
116119

117120
public updateDocument(
@@ -264,7 +267,10 @@ module Harness.LanguageService {
264267

265268
/** Parse file given its source text */
266269
public parseSourceText(fileName: string, sourceText: ts.IScriptSnapshot): ts.SourceFile {
267-
return ts.createSourceFile(fileName, sourceText.getText(0, sourceText.getLength()), ts.ScriptTarget.Latest, "1", true);
270+
var result = ts.createSourceFile(fileName, sourceText.getText(0, sourceText.getLength()), ts.ScriptTarget.Latest);
271+
result.version = "1";
272+
result.isOpen = true;
273+
return result;
268274
}
269275

270276
/** Parse a file on disk given its fileName */

src/harness/projectsRunner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class ProjectRunner extends RunnerBase {
176176
else {
177177
var text = getSourceFileText(filename);
178178
if (text !== undefined) {
179-
sourceFile = ts.createSourceFile(filename, text, languageVersion, /*version:*/ "0");
179+
sourceFile = ts.createSourceFile(filename, text, languageVersion);
180180
}
181181
}
182182

src/services/services.ts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ module ts {
5959
}
6060

6161
export interface SourceFile {
62+
isOpen: boolean;
63+
version: string;
64+
6265
getScriptSnapshot(): IScriptSnapshot;
6366
getNamedDeclarations(): Declaration[];
6467
update(scriptSnapshot: IScriptSnapshot, version: string, isOpen: boolean, textChangeRange: TextChangeRange): SourceFile;
@@ -866,7 +869,9 @@ module ts {
866869
}
867870

868871
public static createSourceFileObject(filename: string, scriptSnapshot: IScriptSnapshot, languageVersion: ScriptTarget, version: string, isOpen: boolean) {
869-
var newSourceFile = <SourceFileObject><any>createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, version, isOpen);
872+
var newSourceFile = <SourceFileObject><any>createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, /*setParentNodes:*/ true);
873+
newSourceFile.version = version;
874+
newSourceFile.isOpen = isOpen;
870875
newSourceFile.scriptSnapshot = scriptSnapshot;
871876
return newSourceFile;
872877
}
@@ -1678,7 +1683,6 @@ module ts {
16781683
this.host.log("SyntaxTreeCache.Initialize: createSourceFile: " + (new Date().getTime() - start));
16791684

16801685
var start = new Date().getTime();
1681-
fixupParentReferences(sourceFile);
16821686
this.host.log("SyntaxTreeCache.Initialize: fixupParentRefs : " + (new Date().getTime() - start));
16831687
}
16841688
else if (this.currentFileVersion !== version) {
@@ -1693,7 +1697,6 @@ module ts {
16931697
this.host.log("SyntaxTreeCache.Initialize: updateSourceFile: " + (new Date().getTime() - start));
16941698

16951699
var start = new Date().getTime();
1696-
fixupParentReferences(sourceFile);
16971700
this.host.log("SyntaxTreeCache.Initialize: fixupParentRefs : " + (new Date().getTime() - start));
16981701
}
16991702

@@ -1703,22 +1706,6 @@ module ts {
17031706
this.currentFilename = filename;
17041707
this.currentSourceFile = sourceFile;
17051708
}
1706-
1707-
function fixupParentReferences(sourceFile: SourceFile) {
1708-
// normally parent references are set during binding.
1709-
// however here SourceFile data is used only for syntactic features so running the whole binding process is an overhead.
1710-
// walk over the nodes and set parent references
1711-
var parent: Node = sourceFile;
1712-
function walk(n: Node): void {
1713-
n.parent = parent;
1714-
1715-
var saveParent = parent;
1716-
parent = n;
1717-
forEachChild(n, walk);
1718-
parent = saveParent;
1719-
}
1720-
forEachChild(sourceFile, walk);
1721-
}
17221709
}
17231710

17241711
public getCurrentSourceFile(filename: string): SourceFile {

0 commit comments

Comments
 (0)