Skip to content

Commit 626b6d4

Browse files
committed
merge with master
2 parents 7be2e50 + 7b22880 commit 626b6d4

File tree

53 files changed

+373
-246
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+373
-246
lines changed

src/compiler/emitter.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,6 @@ module ts {
2828
typeName?: DeclarationName;
2929
}
3030

31-
interface SynthesizedNode extends Node {
32-
leadingCommentRanges?: CommentRange[];
33-
trailingCommentRanges?: CommentRange[];
34-
}
35-
3631
// represents one LexicalEnvironment frame to store unique generated names
3732
interface ScopeFrame {
3833
names: Map<string>;
@@ -2757,7 +2752,7 @@ module ts {
27572752
});
27582753

27592754
// Finally, return the temp variable.
2760-
propertyPatches = createBinaryExpression(propertyPatches, SyntaxKind.CommaToken, tempVar);
2755+
propertyPatches = createBinaryExpression(propertyPatches, SyntaxKind.CommaToken, createIdentifier(tempVar.text, /*startsOnNewLine:*/ true));
27612756

27622757
var result = createParenthesizedExpression(propertyPatches);
27632758

@@ -2780,7 +2775,7 @@ module ts {
27802775
var leftHandSide = createMemberAccessForPropertyName(tempVar, property.name);
27812776
var maybeRightHandSide = tryGetRightHandSideOfPatchingPropertyAssignment(objectLiteral, property);
27822777

2783-
return maybeRightHandSide && createBinaryExpression(leftHandSide, SyntaxKind.EqualsToken, maybeRightHandSide);
2778+
return maybeRightHandSide && createBinaryExpression(leftHandSide, SyntaxKind.EqualsToken, maybeRightHandSide, /*startsOnNewLine:*/ true);
27842779
}
27852780

27862781
function tryGetRightHandSideOfPatchingPropertyAssignment(objectLiteral: ObjectLiteralExpression, property: ObjectLiteralElement) {
@@ -2853,8 +2848,8 @@ module ts {
28532848
return result;
28542849
}
28552850

2856-
function createBinaryExpression(left: Expression, operator: SyntaxKind, right: Expression): BinaryExpression {
2857-
var result = <BinaryExpression>createSynthesizedNode(SyntaxKind.BinaryExpression);
2851+
function createBinaryExpression(left: Expression, operator: SyntaxKind, right: Expression, startsOnNewLine?: boolean): BinaryExpression {
2852+
var result = <BinaryExpression>createSynthesizedNode(SyntaxKind.BinaryExpression, startsOnNewLine);
28582853
result.operatorToken = createSynthesizedNode(operator);
28592854
result.left = left;
28602855
result.right = right;
@@ -2909,8 +2904,8 @@ module ts {
29092904
return result;
29102905
}
29112906

2912-
function createIdentifier(name: string) {
2913-
var result = <Identifier>createSynthesizedNode(SyntaxKind.Identifier);
2907+
function createIdentifier(name: string, startsOnNewLine?: boolean) {
2908+
var result = <Identifier>createSynthesizedNode(SyntaxKind.Identifier, startsOnNewLine);
29142909
result.text = name;
29152910

29162911
return result;
@@ -3254,9 +3249,11 @@ module ts {
32543249

32553250
write(tokenToString(node.operatorToken.kind));
32563251

3252+
var shouldPlaceOnNewLine = !nodeIsSynthesized(node) && !nodeEndIsOnSameLineAsNodeStart(node.operatorToken, node.right);
3253+
32573254
// Check if the right expression is on a different line versus the operator itself. If so,
32583255
// we'll emit newline.
3259-
if (!nodeEndIsOnSameLineAsNodeStart(node.operatorToken, node.right)) {
3256+
if (shouldPlaceOnNewLine || synthesizedNodeStartsOnNewLine(node.right)) {
32603257
increaseIndent();
32613258
writeLine();
32623259
emit(node.right);
@@ -3269,6 +3266,10 @@ module ts {
32693266
}
32703267
}
32713268

3269+
function synthesizedNodeStartsOnNewLine(node: Node) {
3270+
return nodeIsSynthesized(node) && (<SynthesizedNode>node).startsOnNewLine;
3271+
}
3272+
32723273
function emitConditionalExpression(node: ConditionalExpression) {
32733274
emit(node.condition);
32743275
write(" ? ");

src/compiler/program.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
module ts {
55
/* @internal */ export var emitTime = 0;
6+
/* @internal */ export var ioReadTime = 0;
67

78
export function createCompilerHost(options: CompilerOptions): CompilerHost {
89
var currentDirectory: string;
@@ -19,7 +20,9 @@ module ts {
1920

2021
function getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile {
2122
try {
23+
var start = new Date().getTime();
2224
var text = sys.readFile(fileName, options.charset);
25+
ioReadTime += new Date().getTime() - start;
2326
}
2427
catch (e) {
2528
if (onError) {

src/compiler/tsc.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ module ts {
322322
}
323323

324324
function compile(fileNames: string[], compilerOptions: CompilerOptions, compilerHost: CompilerHost) {
325+
ts.ioReadTime = 0;
325326
ts.parseTime = 0;
326327
ts.bindTime = 0;
327328
ts.checkTime = 0;
@@ -330,9 +331,12 @@ module ts {
330331
var start = new Date().getTime();
331332

332333
var program = createProgram(fileNames, compilerOptions, compilerHost);
334+
var programTime = new Date().getTime() - start;
335+
333336
var exitStatus = compileProgram();
334337

335338
var end = new Date().getTime() - start;
339+
var compileTime = end - programTime;
336340

337341
if (compilerOptions.listFiles) {
338342
forEach(program.getSourceFiles(), file => {
@@ -353,10 +357,19 @@ module ts {
353357
reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K");
354358
}
355359

356-
reportTimeStatistic("Parse time", ts.parseTime);
360+
// Individual component times.
361+
// Note: we output 'programTime' as parseTime to match the tsc 1.3 behavior. tsc 1.3
362+
// measured parse time along with read IO as a single counter. We preserve that
363+
// behavior so we can accurately compare times. For actual parse times (in isolation)
364+
// is reported below.
365+
reportTimeStatistic("Parse time", programTime);
357366
reportTimeStatistic("Bind time", ts.bindTime);
358367
reportTimeStatistic("Check time", ts.checkTime);
359368
reportTimeStatistic("Emit time", ts.emitTime);
369+
370+
reportTimeStatistic("Parse time w/o IO", ts.parseTime);
371+
reportTimeStatistic("IO read", ts.ioReadTime);
372+
reportTimeStatistic("Compile time", compileTime);
360373
reportTimeStatistic("Total time", end);
361374
}
362375

src/compiler/utilities.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ module ts {
77
isNoDefaultLib?: boolean
88
}
99

10+
export interface SynthesizedNode extends Node {
11+
leadingCommentRanges?: CommentRange[];
12+
trailingCommentRanges?: CommentRange[];
13+
startsOnNewLine: boolean;
14+
}
15+
1016
export function getDeclarationOfKind(symbol: Symbol, kind: SyntaxKind): Declaration {
1117
var declarations = symbol.declarations;
1218
for (var i = 0; i < declarations.length; i++) {
@@ -1134,11 +1140,11 @@ module ts {
11341140
}
11351141

11361142
// @internal
1137-
export function createSynthesizedNode(kind: SyntaxKind): Node {
1138-
var node = createNode(kind);
1143+
export function createSynthesizedNode(kind: SyntaxKind, startsOnNewLine?: boolean): Node {
1144+
var node = <SynthesizedNode>createNode(kind);
11391145
node.pos = -1;
11401146
node.end = -1;
1141-
1147+
node.startsOnNewLine = startsOnNewLine;
11421148
return node;
11431149
}
11441150

tests/baselines/reference/ES5SymbolProperty1.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ obj[Symbol.foo];
1212

1313
//// [ES5SymbolProperty1.js]
1414
var Symbol;
15-
var obj = (_a = {}, _a[Symbol.foo] =
16-
0, _a);
15+
var obj = (_a = {},
16+
_a[Symbol.foo] = 0,
17+
_a);
1718
obj[Symbol.foo];
1819
var _a;

tests/baselines/reference/FunctionDeclaration8_es6.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
var v = { [yield]: foo }
33

44
//// [FunctionDeclaration8_es6.js]
5-
var v = (_a = {}, _a[yield] =
6-
foo, _a);
5+
var v = (_a = {},
6+
_a[yield] = foo,
7+
_a);
78
var _a;

tests/baselines/reference/FunctionDeclaration9_es6.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ function * foo() {
55

66
//// [FunctionDeclaration9_es6.js]
77
function foo() {
8-
var v = (_a = {}, _a[] =
9-
foo, _a);
8+
var v = (_a = {},
9+
_a[] = foo,
10+
_a);
1011
var _a;
1112
}

tests/baselines/reference/FunctionPropertyAssignments5_es6.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22
var v = { *[foo()]() { } }
33

44
//// [FunctionPropertyAssignments5_es6.js]
5-
var v = (_a = {}, _a[foo()] = function () { }, _a);
5+
var v = (_a = {},
6+
_a[foo()] = function () { },
7+
_a);
68
var _a;

tests/baselines/reference/computedPropertyNames10_ES5.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,17 @@ var v = {
2020
var s;
2121
var n;
2222
var a;
23-
var v = (_a = {}, _a[s] = function () { }, _a[n] = function () { }, _a[s + s] = function () { }, _a[s + n] = function () { }, _a[+s] = function () { }, _a[""] = function () { }, _a[0] = function () { }, _a[a] = function () { }, _a[true] = function () { }, _a["hello bye"] = function () { }, _a["hello " + a + " bye"] = function () { }, _a);
23+
var v = (_a = {},
24+
_a[s] = function () { },
25+
_a[n] = function () { },
26+
_a[s + s] = function () { },
27+
_a[s + n] = function () { },
28+
_a[+s] = function () { },
29+
_a[""] = function () { },
30+
_a[0] = function () { },
31+
_a[a] = function () { },
32+
_a[true] = function () { },
33+
_a["hello bye"] = function () { },
34+
_a["hello " + a + " bye"] = function () { },
35+
_a);
2436
var _a;

tests/baselines/reference/computedPropertyNames11_ES5.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,17 @@ var v = {
2020
var s;
2121
var n;
2222
var a;
23-
var v = (_a = {}, _a[s] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }), _a[n] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }), _a[s + s] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }), _a[s + n] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }), _a[+s] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }), _a[""] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }), _a[0] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }), _a[a] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }), _a[true] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }), _a["hello bye"] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }), _a["hello " + a + " bye"] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }), _a);
23+
var v = (_a = {},
24+
_a[s] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }),
25+
_a[n] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }),
26+
_a[s + s] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }),
27+
_a[s + n] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }),
28+
_a[+s] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }),
29+
_a[""] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }),
30+
_a[0] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }),
31+
_a[a] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }),
32+
_a[true] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }),
33+
_a["hello bye"] = Object.defineProperty({ set: function (v) { }, enumerable: true, configurable: true }),
34+
_a["hello " + a + " bye"] = Object.defineProperty({ get: function () { return 0; }, enumerable: true, configurable: true }),
35+
_a);
2436
var _a;

0 commit comments

Comments
 (0)