Skip to content

Commit 27c339a

Browse files
committed
Merge branch 'master' of https://github.com/Microsoft/TypeScript into tupleTypesAny
2 parents a74d64b + 33794b7 commit 27c339a

38 files changed

+532
-8
lines changed

src/compiler/emitter.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -3249,7 +3249,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
32493249
function emitAssignmentExpression(root: BinaryExpression) {
32503250
let target = root.left;
32513251
let value = root.right;
3252-
if (isAssignmentExpressionStatement) {
3252+
3253+
if (isEmptyObjectLiteralOrArrayLiteral(target)) {
3254+
emit(value);
3255+
}
3256+
else if (isAssignmentExpressionStatement) {
32533257
emitDestructuringAssignment(target, value);
32543258
}
32553259
else {

src/compiler/utilities.ts

+11
Original file line numberDiff line numberDiff line change
@@ -1981,6 +1981,17 @@ namespace ts {
19811981
(node.parent.kind === SyntaxKind.PropertyAccessExpression && (<PropertyAccessExpression>node.parent).name === node);
19821982
}
19831983

1984+
export function isEmptyObjectLiteralOrArrayLiteral(expression: Node): boolean {
1985+
let kind = expression.kind;
1986+
if (kind === SyntaxKind.ObjectLiteralExpression) {
1987+
return (<ObjectLiteralExpression>expression).properties.length === 0;
1988+
}
1989+
if (kind === SyntaxKind.ArrayLiteralExpression) {
1990+
return (<ArrayLiteralExpression>expression).elements.length === 0;
1991+
}
1992+
return false;
1993+
}
1994+
19841995
export function getLocalSymbolForExportDefault(symbol: Symbol) {
19851996
return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & NodeFlags.Default) ? symbol.valueDeclaration.localSymbol : undefined;
19861997
}

tests/baselines/reference/emptyArrayBindingPatternParameter01.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
function f([]) {
5-
var x, y, z;
5+
var x, y, z;
66
}
77

88
//// [emptyArrayBindingPatternParameter01.js]

tests/baselines/reference/emptyArrayBindingPatternParameter01.symbols

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
function f([]) {
55
>f : Symbol(f, Decl(emptyArrayBindingPatternParameter01.ts, 0, 0))
66

7-
var x, y, z;
8-
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter01.ts, 3, 4))
9-
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter01.ts, 3, 7))
10-
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter01.ts, 3, 10))
7+
var x, y, z;
8+
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter01.ts, 3, 7))
9+
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter01.ts, 3, 10))
10+
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter01.ts, 3, 13))
1111
}

tests/baselines/reference/emptyArrayBindingPatternParameter01.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
function f([]) {
55
>f : ([]: any[]) => void
66

7-
var x, y, z;
7+
var x, y, z;
88
>x : any
99
>y : any
1010
>z : any
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [emptyAssignmentPatterns01_ES5.ts]
2+
3+
var a: any;
4+
5+
({} = a);
6+
([] = a);
7+
8+
//// [emptyAssignmentPatterns01_ES5.js]
9+
var a;
10+
(a);
11+
(a);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts ===
2+
3+
var a: any;
4+
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES5.ts, 1, 3))
5+
6+
({} = a);
7+
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES5.ts, 1, 3))
8+
9+
([] = a);
10+
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES5.ts, 1, 3))
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts ===
2+
3+
var a: any;
4+
>a : any
5+
6+
({} = a);
7+
>({} = a) : any
8+
>{} = a : any
9+
>{} : {}
10+
>a : any
11+
12+
([] = a);
13+
>([] = a) : any
14+
>[] = a : any
15+
>[] : undefined[]
16+
>a : any
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [emptyAssignmentPatterns01_ES6.ts]
2+
3+
var a: any;
4+
5+
({} = a);
6+
([] = a);
7+
8+
//// [emptyAssignmentPatterns01_ES6.js]
9+
var a;
10+
({} = a);
11+
([] = a);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts ===
2+
3+
var a: any;
4+
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES6.ts, 1, 3))
5+
6+
({} = a);
7+
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES6.ts, 1, 3))
8+
9+
([] = a);
10+
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES6.ts, 1, 3))
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts ===
2+
3+
var a: any;
4+
>a : any
5+
6+
({} = a);
7+
>({} = a) : any
8+
>{} = a : any
9+
>{} : {}
10+
>a : any
11+
12+
([] = a);
13+
>([] = a) : any
14+
>[] = a : any
15+
>[] : undefined[]
16+
>a : any
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [emptyAssignmentPatterns02_ES5.ts]
2+
3+
var a: any;
4+
let x, y, z, a1, a2, a3;
5+
6+
({} = { x, y, z } = a);
7+
([] = [ a1, a2, a3] = a);
8+
9+
//// [emptyAssignmentPatterns02_ES5.js]
10+
var a;
11+
var x, y, z, a1, a2, a3;
12+
((x = a.x, y = a.y, z = a.z, a));
13+
((a1 = a[0], a2 = a[1], a3 = a[2], a));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts ===
2+
3+
var a: any;
4+
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES5.ts, 1, 3))
5+
6+
let x, y, z, a1, a2, a3;
7+
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 3))
8+
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 6))
9+
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 9))
10+
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 12))
11+
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 16))
12+
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 20))
13+
14+
({} = { x, y, z } = a);
15+
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES5.ts, 4, 7))
16+
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES5.ts, 4, 10))
17+
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES5.ts, 4, 13))
18+
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES5.ts, 1, 3))
19+
20+
([] = [ a1, a2, a3] = a);
21+
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 12))
22+
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 16))
23+
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 20))
24+
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES5.ts, 1, 3))
25+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts ===
2+
3+
var a: any;
4+
>a : any
5+
6+
let x, y, z, a1, a2, a3;
7+
>x : any
8+
>y : any
9+
>z : any
10+
>a1 : any
11+
>a2 : any
12+
>a3 : any
13+
14+
({} = { x, y, z } = a);
15+
>({} = { x, y, z } = a) : any
16+
>{} = { x, y, z } = a : any
17+
>{} : {}
18+
>{ x, y, z } = a : any
19+
>{ x, y, z } : { x: any; y: any; z: any; }
20+
>x : any
21+
>y : any
22+
>z : any
23+
>a : any
24+
25+
([] = [ a1, a2, a3] = a);
26+
>([] = [ a1, a2, a3] = a) : any
27+
>[] = [ a1, a2, a3] = a : any
28+
>[] : undefined[]
29+
>[ a1, a2, a3] = a : any
30+
>[ a1, a2, a3] : [any, any, any]
31+
>a1 : any
32+
>a2 : any
33+
>a3 : any
34+
>a : any
35+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [emptyAssignmentPatterns02_ES6.ts]
2+
3+
var a: any;
4+
let x, y, z, a1, a2, a3;
5+
6+
({} = { x, y, z } = a);
7+
([] = [ a1, a2, a3] = a);
8+
9+
//// [emptyAssignmentPatterns02_ES6.js]
10+
var a;
11+
let x, y, z, a1, a2, a3;
12+
({} = { x, y, z } = a);
13+
([] = [a1, a2, a3] = a);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts ===
2+
3+
var a: any;
4+
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES6.ts, 1, 3))
5+
6+
let x, y, z, a1, a2, a3;
7+
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 3))
8+
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 6))
9+
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 9))
10+
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 12))
11+
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 16))
12+
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 20))
13+
14+
({} = { x, y, z } = a);
15+
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES6.ts, 4, 7))
16+
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES6.ts, 4, 10))
17+
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES6.ts, 4, 13))
18+
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES6.ts, 1, 3))
19+
20+
([] = [ a1, a2, a3] = a);
21+
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 12))
22+
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 16))
23+
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 20))
24+
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES6.ts, 1, 3))
25+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts ===
2+
3+
var a: any;
4+
>a : any
5+
6+
let x, y, z, a1, a2, a3;
7+
>x : any
8+
>y : any
9+
>z : any
10+
>a1 : any
11+
>a2 : any
12+
>a3 : any
13+
14+
({} = { x, y, z } = a);
15+
>({} = { x, y, z } = a) : any
16+
>{} = { x, y, z } = a : any
17+
>{} : {}
18+
>{ x, y, z } = a : any
19+
>{ x, y, z } : { x: any; y: any; z: any; }
20+
>x : any
21+
>y : any
22+
>z : any
23+
>a : any
24+
25+
([] = [ a1, a2, a3] = a);
26+
>([] = [ a1, a2, a3] = a) : any
27+
>[] = [ a1, a2, a3] = a : any
28+
>[] : undefined[]
29+
>[ a1, a2, a3] = a : any
30+
>[ a1, a2, a3] : [any, any, any]
31+
>a1 : any
32+
>a2 : any
33+
>a3 : any
34+
>a : any
35+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [emptyAssignmentPatterns03_ES5.ts]
2+
3+
var a: any;
4+
5+
({} = {} = a);
6+
([] = [] = a);
7+
8+
//// [emptyAssignmentPatterns03_ES5.js]
9+
var a;
10+
(a);
11+
(a);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts ===
2+
3+
var a: any;
4+
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES5.ts, 1, 3))
5+
6+
({} = {} = a);
7+
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES5.ts, 1, 3))
8+
9+
([] = [] = a);
10+
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES5.ts, 1, 3))
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts ===
2+
3+
var a: any;
4+
>a : any
5+
6+
({} = {} = a);
7+
>({} = {} = a) : any
8+
>{} = {} = a : any
9+
>{} : {}
10+
>{} = a : any
11+
>{} : {}
12+
>a : any
13+
14+
([] = [] = a);
15+
>([] = [] = a) : any
16+
>[] = [] = a : any
17+
>[] : undefined[]
18+
>[] = a : any
19+
>[] : undefined[]
20+
>a : any
21+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [emptyAssignmentPatterns03_ES6.ts]
2+
3+
var a: any;
4+
5+
({} = {} = a);
6+
([] = [] = a);
7+
8+
//// [emptyAssignmentPatterns03_ES6.js]
9+
var a;
10+
({} = {} = a);
11+
([] = [] = a);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts ===
2+
3+
var a: any;
4+
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES6.ts, 1, 3))
5+
6+
({} = {} = a);
7+
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES6.ts, 1, 3))
8+
9+
([] = [] = a);
10+
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES6.ts, 1, 3))
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts ===
2+
3+
var a: any;
4+
>a : any
5+
6+
({} = {} = a);
7+
>({} = {} = a) : any
8+
>{} = {} = a : any
9+
>{} : {}
10+
>{} = a : any
11+
>{} : {}
12+
>a : any
13+
14+
([] = [] = a);
15+
>([] = [] = a) : any
16+
>[] = [] = a : any
17+
>[] : undefined[]
18+
>[] = a : any
19+
>[] : undefined[]
20+
>a : any
21+

0 commit comments

Comments
 (0)