Skip to content

Commit 683ecc9

Browse files
committed
Merge pull request microsoft#5701 from Microsoft/cleanupWork
clean residual state in binder and emitter, clean test data in versio…
2 parents 20347ad + a26d89d commit 683ecc9

3 files changed

Lines changed: 122 additions & 77 deletions

File tree

src/compiler/binder.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ namespace ts {
139139
file.classifiableNames = classifiableNames;
140140
}
141141

142+
file = undefined;
143+
options = undefined;
142144
parent = undefined;
143145
container = undefined;
144146
blockScopeContainer = undefined;

src/compiler/emitter.ts

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
516516
let decorateEmitted: boolean;
517517
let paramEmitted: boolean;
518518
let awaiterEmitted: boolean;
519-
let tempFlags: TempFlags;
519+
let tempFlags: TempFlags = 0;
520520
let tempVariables: Identifier[];
521521
let tempParameters: Identifier[];
522522
let externalImports: (ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration)[];
@@ -584,33 +584,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
584584
return doEmit;
585585

586586
function doEmit(jsFilePath: string, rootFile?: SourceFile) {
587-
// reset the state
588-
writer.reset();
589-
currentSourceFile = undefined;
590-
currentText = undefined;
591-
currentLineMap = undefined;
592-
exportFunctionForFile = undefined;
593587
generatedNameSet = {};
594588
nodeToGeneratedName = [];
595-
computedPropertyNamesToGeneratedNames = undefined;
596-
convertedLoopState = undefined;
597-
598-
extendsEmitted = false;
599-
decorateEmitted = false;
600-
paramEmitted = false;
601-
awaiterEmitted = false;
602-
tempFlags = 0;
603-
tempVariables = undefined;
604-
tempParameters = undefined;
605-
externalImports = undefined;
606-
exportSpecifiers = undefined;
607-
exportEquals = undefined;
608-
hasExportStars = undefined;
609-
detachedCommentsInfo = undefined;
610-
sourceMapData = undefined;
611-
isEs6Module = false;
612-
renamedDependencies = undefined;
613-
isCurrentFileExternalModule = false;
614589
root = rootFile;
615590

616591
if (compilerOptions.sourceMap || compilerOptions.inlineSourceMap) {
@@ -634,6 +609,34 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
634609

635610
writeLine();
636611
writeEmittedFiles(writer.getText(), jsFilePath, /*writeByteOrderMark*/ compilerOptions.emitBOM);
612+
613+
// reset the state
614+
writer.reset();
615+
currentSourceFile = undefined;
616+
currentText = undefined;
617+
currentLineMap = undefined;
618+
exportFunctionForFile = undefined;
619+
generatedNameSet = undefined;
620+
nodeToGeneratedName = undefined;
621+
computedPropertyNamesToGeneratedNames = undefined;
622+
convertedLoopState = undefined;
623+
extendsEmitted = false;
624+
decorateEmitted = false;
625+
paramEmitted = false;
626+
awaiterEmitted = false;
627+
tempFlags = 0;
628+
tempVariables = undefined;
629+
tempParameters = undefined;
630+
externalImports = undefined;
631+
exportSpecifiers = undefined;
632+
exportEquals = undefined;
633+
hasExportStars = undefined;
634+
detachedCommentsInfo = undefined;
635+
sourceMapData = undefined;
636+
isEs6Module = false;
637+
renamedDependencies = undefined;
638+
isCurrentFileExternalModule = false;
639+
root = undefined;
637640
}
638641

639642
function emitSourceFile(sourceFile: SourceFile): void {

tests/cases/unittests/versionCache.ts

Lines changed: 91 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ module ts {
2020
}
2121

2222
describe('VersionCache TS code', () => {
23-
var testContent = `/// <reference path="z.ts" />
23+
let validateEditAtLineCharIndex: (line: number, char: number, deleteLength: number, insertString: string) => void;
24+
25+
before(() => {
26+
let testContent = `/// <reference path="z.ts" />
2427
var x = 10;
2528
var y = { zebra: 12, giraffe: "ell" };
2629
z.a;
@@ -31,16 +34,21 @@ k=y;
3134
var p:Point=new Point();
3235
var q:Point=<Point>p;`
3336

34-
let {lines, lineMap} = server.LineIndex.linesFromText(testContent);
35-
assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line");
37+
let {lines, lineMap} = server.LineIndex.linesFromText(testContent);
38+
assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line");
3639

37-
let lineIndex = new server.LineIndex();
38-
lineIndex.load(lines);
40+
let lineIndex = new server.LineIndex();
41+
lineIndex.load(lines);
3942

40-
function validateEditAtLineCharIndex(line: number, char: number, deleteLength: number, insertString: string): void {
41-
let position = lineColToPosition(lineIndex, line, char);
42-
validateEdit(lineIndex, testContent, position, deleteLength, insertString);
43-
}
43+
validateEditAtLineCharIndex = (line: number, char: number, deleteLength: number, insertString: string) => {
44+
let position = lineColToPosition(lineIndex, line, char);
45+
validateEdit(lineIndex, testContent, position, deleteLength, insertString);
46+
};
47+
});
48+
49+
after(() => {
50+
validateEditAtLineCharIndex = undefined;
51+
})
4452

4553
it('change 9 1 0 1 {"y"}', () => {
4654
validateEditAtLineCharIndex(9, 1, 0, "y");
@@ -68,22 +76,35 @@ var q:Point=<Point>p;`
6876
});
6977

7078
describe('VersionCache simple text', () => {
71-
let testContent = `in this story:
79+
let validateEditAtPosition: (position: number, deleteLength: number, insertString: string) => void;
80+
let testContent: string;
81+
let lines: string[];
82+
let lineMap: number[];
83+
before(() => {
84+
testContent = `in this story:
7285
the lazy brown fox
7386
jumped over the cow
7487
that ate the grass
7588
that was purple at the tips
7689
and grew 1cm per day`;
7790

78-
let {lines, lineMap} = server.LineIndex.linesFromText(testContent);
79-
assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line");
91+
({lines, lineMap} = server.LineIndex.linesFromText(testContent));
92+
assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line");
93+
94+
let lineIndex = new server.LineIndex();
95+
lineIndex.load(lines);
8096

81-
let lineIndex = new server.LineIndex();
82-
lineIndex.load(lines);
97+
validateEditAtPosition = (position: number, deleteLength: number, insertString: string) => {
98+
validateEdit(lineIndex, testContent, position, deleteLength, insertString);
99+
}
100+
});
83101

84-
function validateEditAtPosition(position: number, deleteLength: number, insertString: string): void {
85-
validateEdit(lineIndex, testContent, position, deleteLength, insertString);
86-
}
102+
after(() => {
103+
validateEditAtPosition = undefined;
104+
testContent = undefined;
105+
lines = undefined;
106+
lineMap = undefined;
107+
});
87108

88109
it('Insert at end of file', () => {
89110
validateEditAtPosition(testContent.length, 0, "hmmmm...\r\n");
@@ -159,50 +180,69 @@ and grew 1cm per day`;
159180
});
160181

161182
describe('VersionCache stress test', () => {
162-
const iterationCount = 20;
163-
//const interationCount = 20000; // uncomment for testing
164-
165-
// Use scanner.ts, decent size, does not change frequentlly
166-
let testFileName = "src/compiler/scanner.ts";
167-
let testContent = Harness.IO.readFile(testFileName);
168-
let totalChars = testContent.length;
169-
assert.isTrue(totalChars > 0, "Failed to read test file.");
170-
171-
let {lines, lineMap} = server.LineIndex.linesFromText(testContent);
172-
assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line");
173-
174-
let lineIndex = new server.LineIndex();
175-
lineIndex.load(lines);
176-
177183
let rsa: number[] = [];
178184
let la: number[] = [];
179185
let las: number[] = [];
180186
let elas: number[] = [];
181187
let ersa: number[] = [];
182188
let ela: number[] = [];
183-
let etotalChars = totalChars;
184-
185-
for (let j = 0; j < 100000; j++) {
186-
rsa[j] = Math.floor(Math.random() * totalChars);
187-
la[j] = Math.floor(Math.random() * (totalChars - rsa[j]));
188-
if (la[j] > 4) {
189-
las[j] = 4;
190-
}
191-
else {
192-
las[j] = la[j];
193-
}
194-
if (j < 4000) {
195-
ersa[j] = Math.floor(Math.random() * etotalChars);
196-
ela[j] = Math.floor(Math.random() * (etotalChars - ersa[j]));
197-
if (ela[j] > 4) {
198-
elas[j] = 4;
189+
const iterationCount = 20;
190+
//const iterationCount = 20000; // uncomment for testing
191+
let lines: string[];
192+
let lineMap: number[];
193+
let lineIndex: server.LineIndex;
194+
let testContent: string;
195+
196+
before(() => {
197+
// Use scanner.ts, decent size, does not change frequently
198+
let testFileName = "src/compiler/scanner.ts";
199+
testContent = Harness.IO.readFile(testFileName);
200+
let totalChars = testContent.length;
201+
assert.isTrue(totalChars > 0, "Failed to read test file.");
202+
203+
({lines, lineMap} = server.LineIndex.linesFromText(testContent));
204+
assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line");
205+
206+
lineIndex = new server.LineIndex();
207+
lineIndex.load(lines);
208+
209+
let etotalChars = totalChars;
210+
211+
for (let j = 0; j < 100000; j++) {
212+
rsa[j] = Math.floor(Math.random() * totalChars);
213+
la[j] = Math.floor(Math.random() * (totalChars - rsa[j]));
214+
if (la[j] > 4) {
215+
las[j] = 4;
199216
}
200217
else {
201-
elas[j] = ela[j];
218+
las[j] = la[j];
219+
}
220+
if (j < 4000) {
221+
ersa[j] = Math.floor(Math.random() * etotalChars);
222+
ela[j] = Math.floor(Math.random() * (etotalChars - ersa[j]));
223+
if (ela[j] > 4) {
224+
elas[j] = 4;
225+
}
226+
else {
227+
elas[j] = ela[j];
228+
}
229+
etotalChars += (las[j] - elas[j]);
202230
}
203-
etotalChars += (las[j] - elas[j]);
204231
}
205-
}
232+
});
233+
234+
after(() => {
235+
rsa = undefined;
236+
la = undefined;
237+
las = undefined;
238+
elas = undefined;
239+
ersa = undefined;
240+
ela = undefined;
241+
lines = undefined;
242+
lineMap = undefined;
243+
lineIndex = undefined;
244+
testContent = undefined;
245+
});
206246

207247
it("Range (average length 1/4 file size)", () => {
208248
for (let i = 0; i < iterationCount; i++) {

0 commit comments

Comments
 (0)