Merge branch 'master' of https://github.com/Microsoft/TypeScript into tupleTypesAny

This commit is contained in:
Jason Freeman
2015-07-17 14:16:28 -07:00
38 changed files with 532 additions and 8 deletions

View File

@@ -3249,7 +3249,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
function emitAssignmentExpression(root: BinaryExpression) {
let target = root.left;
let value = root.right;
if (isAssignmentExpressionStatement) {
if (isEmptyObjectLiteralOrArrayLiteral(target)) {
emit(value);
}
else if (isAssignmentExpressionStatement) {
emitDestructuringAssignment(target, value);
}
else {

View File

@@ -1981,6 +1981,17 @@ namespace ts {
(node.parent.kind === SyntaxKind.PropertyAccessExpression && (<PropertyAccessExpression>node.parent).name === node);
}
export function isEmptyObjectLiteralOrArrayLiteral(expression: Node): boolean {
let kind = expression.kind;
if (kind === SyntaxKind.ObjectLiteralExpression) {
return (<ObjectLiteralExpression>expression).properties.length === 0;
}
if (kind === SyntaxKind.ArrayLiteralExpression) {
return (<ArrayLiteralExpression>expression).elements.length === 0;
}
return false;
}
export function getLocalSymbolForExportDefault(symbol: Symbol) {
return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & NodeFlags.Default) ? symbol.valueDeclaration.localSymbol : undefined;
}

View File

@@ -2,7 +2,7 @@
function f([]) {
var x, y, z;
var x, y, z;
}
//// [emptyArrayBindingPatternParameter01.js]

View File

@@ -4,8 +4,8 @@
function f([]) {
>f : Symbol(f, Decl(emptyArrayBindingPatternParameter01.ts, 0, 0))
var x, y, z;
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter01.ts, 3, 4))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter01.ts, 3, 7))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter01.ts, 3, 10))
var x, y, z;
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter01.ts, 3, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter01.ts, 3, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter01.ts, 3, 13))
}

View File

@@ -4,7 +4,7 @@
function f([]) {
>f : ([]: any[]) => void
var x, y, z;
var x, y, z;
>x : any
>y : any
>z : any

View File

@@ -0,0 +1,11 @@
//// [emptyAssignmentPatterns01_ES5.ts]
var a: any;
({} = a);
([] = a);
//// [emptyAssignmentPatterns01_ES5.js]
var a;
(a);
(a);

View File

@@ -0,0 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES5.ts, 1, 3))
({} = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES5.ts, 1, 3))
([] = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES5.ts, 1, 3))

View File

@@ -0,0 +1,17 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts ===
var a: any;
>a : any
({} = a);
>({} = a) : any
>{} = a : any
>{} : {}
>a : any
([] = a);
>([] = a) : any
>[] = a : any
>[] : undefined[]
>a : any

View File

@@ -0,0 +1,11 @@
//// [emptyAssignmentPatterns01_ES6.ts]
var a: any;
({} = a);
([] = a);
//// [emptyAssignmentPatterns01_ES6.js]
var a;
({} = a);
([] = a);

View File

@@ -0,0 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES6.ts, 1, 3))
({} = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES6.ts, 1, 3))
([] = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns01_ES6.ts, 1, 3))

View File

@@ -0,0 +1,17 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts ===
var a: any;
>a : any
({} = a);
>({} = a) : any
>{} = a : any
>{} : {}
>a : any
([] = a);
>([] = a) : any
>[] = a : any
>[] : undefined[]
>a : any

View File

@@ -0,0 +1,13 @@
//// [emptyAssignmentPatterns02_ES5.ts]
var a: any;
let x, y, z, a1, a2, a3;
({} = { x, y, z } = a);
([] = [ a1, a2, a3] = a);
//// [emptyAssignmentPatterns02_ES5.js]
var a;
var x, y, z, a1, a2, a3;
((x = a.x, y = a.y, z = a.z, a));
((a1 = a[0], a2 = a[1], a3 = a[2], a));

View File

@@ -0,0 +1,25 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES5.ts, 1, 3))
let x, y, z, a1, a2, a3;
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 3))
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 6))
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 9))
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 20))
({} = { x, y, z } = a);
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES5.ts, 4, 7))
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES5.ts, 4, 10))
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES5.ts, 4, 13))
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES5.ts, 1, 3))
([] = [ a1, a2, a3] = a);
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES5.ts, 2, 20))
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES5.ts, 1, 3))

View File

@@ -0,0 +1,35 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts ===
var a: any;
>a : any
let x, y, z, a1, a2, a3;
>x : any
>y : any
>z : any
>a1 : any
>a2 : any
>a3 : any
({} = { x, y, z } = a);
>({} = { x, y, z } = a) : any
>{} = { x, y, z } = a : any
>{} : {}
>{ x, y, z } = a : any
>{ x, y, z } : { x: any; y: any; z: any; }
>x : any
>y : any
>z : any
>a : any
([] = [ a1, a2, a3] = a);
>([] = [ a1, a2, a3] = a) : any
>[] = [ a1, a2, a3] = a : any
>[] : undefined[]
>[ a1, a2, a3] = a : any
>[ a1, a2, a3] : [any, any, any]
>a1 : any
>a2 : any
>a3 : any
>a : any

View File

@@ -0,0 +1,13 @@
//// [emptyAssignmentPatterns02_ES6.ts]
var a: any;
let x, y, z, a1, a2, a3;
({} = { x, y, z } = a);
([] = [ a1, a2, a3] = a);
//// [emptyAssignmentPatterns02_ES6.js]
var a;
let x, y, z, a1, a2, a3;
({} = { x, y, z } = a);
([] = [a1, a2, a3] = a);

View File

@@ -0,0 +1,25 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES6.ts, 1, 3))
let x, y, z, a1, a2, a3;
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 3))
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 6))
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 9))
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 20))
({} = { x, y, z } = a);
>x : Symbol(x, Decl(emptyAssignmentPatterns02_ES6.ts, 4, 7))
>y : Symbol(y, Decl(emptyAssignmentPatterns02_ES6.ts, 4, 10))
>z : Symbol(z, Decl(emptyAssignmentPatterns02_ES6.ts, 4, 13))
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES6.ts, 1, 3))
([] = [ a1, a2, a3] = a);
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns02_ES6.ts, 2, 20))
>a : Symbol(a, Decl(emptyAssignmentPatterns02_ES6.ts, 1, 3))

View File

@@ -0,0 +1,35 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts ===
var a: any;
>a : any
let x, y, z, a1, a2, a3;
>x : any
>y : any
>z : any
>a1 : any
>a2 : any
>a3 : any
({} = { x, y, z } = a);
>({} = { x, y, z } = a) : any
>{} = { x, y, z } = a : any
>{} : {}
>{ x, y, z } = a : any
>{ x, y, z } : { x: any; y: any; z: any; }
>x : any
>y : any
>z : any
>a : any
([] = [ a1, a2, a3] = a);
>([] = [ a1, a2, a3] = a) : any
>[] = [ a1, a2, a3] = a : any
>[] : undefined[]
>[ a1, a2, a3] = a : any
>[ a1, a2, a3] : [any, any, any]
>a1 : any
>a2 : any
>a3 : any
>a : any

View File

@@ -0,0 +1,11 @@
//// [emptyAssignmentPatterns03_ES5.ts]
var a: any;
({} = {} = a);
([] = [] = a);
//// [emptyAssignmentPatterns03_ES5.js]
var a;
(a);
(a);

View File

@@ -0,0 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES5.ts, 1, 3))
({} = {} = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES5.ts, 1, 3))
([] = [] = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES5.ts, 1, 3))

View File

@@ -0,0 +1,21 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts ===
var a: any;
>a : any
({} = {} = a);
>({} = {} = a) : any
>{} = {} = a : any
>{} : {}
>{} = a : any
>{} : {}
>a : any
([] = [] = a);
>([] = [] = a) : any
>[] = [] = a : any
>[] : undefined[]
>[] = a : any
>[] : undefined[]
>a : any

View File

@@ -0,0 +1,11 @@
//// [emptyAssignmentPatterns03_ES6.ts]
var a: any;
({} = {} = a);
([] = [] = a);
//// [emptyAssignmentPatterns03_ES6.js]
var a;
({} = {} = a);
([] = [] = a);

View File

@@ -0,0 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES6.ts, 1, 3))
({} = {} = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES6.ts, 1, 3))
([] = [] = a);
>a : Symbol(a, Decl(emptyAssignmentPatterns03_ES6.ts, 1, 3))

View File

@@ -0,0 +1,21 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts ===
var a: any;
>a : any
({} = {} = a);
>({} = {} = a) : any
>{} = {} = a : any
>{} : {}
>{} = a : any
>{} : {}
>a : any
([] = [] = a);
>([] = [] = a) : any
>[] = [] = a : any
>[] : undefined[]
>[] = a : any
>[] : undefined[]
>a : any

View File

@@ -0,0 +1,14 @@
//// [emptyAssignmentPatterns04_ES5.ts]
var a: any;
let x, y, z, a1, a2, a3;
({ x, y, z } = {} = a);
([ a1, a2, a3] = [] = a);
//// [emptyAssignmentPatterns04_ES5.js]
var a;
var x, y, z, a1, a2, a3;
(_a = a, x = _a.x, y = _a.y, z = _a.z, _a);
(_b = a, a1 = _b[0], a2 = _b[1], a3 = _b[2], _b);
var _a, _b;

View File

@@ -0,0 +1,25 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES5.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns04_ES5.ts, 1, 3))
let x, y, z, a1, a2, a3;
>x : Symbol(x, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 3))
>y : Symbol(y, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 6))
>z : Symbol(z, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 9))
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 20))
({ x, y, z } = {} = a);
>x : Symbol(x, Decl(emptyAssignmentPatterns04_ES5.ts, 4, 2))
>y : Symbol(y, Decl(emptyAssignmentPatterns04_ES5.ts, 4, 5))
>z : Symbol(z, Decl(emptyAssignmentPatterns04_ES5.ts, 4, 8))
>a : Symbol(a, Decl(emptyAssignmentPatterns04_ES5.ts, 1, 3))
([ a1, a2, a3] = [] = a);
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns04_ES5.ts, 2, 20))
>a : Symbol(a, Decl(emptyAssignmentPatterns04_ES5.ts, 1, 3))

View File

@@ -0,0 +1,35 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES5.ts ===
var a: any;
>a : any
let x, y, z, a1, a2, a3;
>x : any
>y : any
>z : any
>a1 : any
>a2 : any
>a3 : any
({ x, y, z } = {} = a);
>({ x, y, z } = {} = a) : any
>{ x, y, z } = {} = a : any
>{ x, y, z } : { x: any; y: any; z: any; }
>x : any
>y : any
>z : any
>{} = a : any
>{} : {}
>a : any
([ a1, a2, a3] = [] = a);
>([ a1, a2, a3] = [] = a) : any
>[ a1, a2, a3] = [] = a : any
>[ a1, a2, a3] : [any, any, any]
>a1 : any
>a2 : any
>a3 : any
>[] = a : any
>[] : undefined[]
>a : any

View File

@@ -0,0 +1,13 @@
//// [emptyAssignmentPatterns04_ES6.ts]
var a: any;
let x, y, z, a1, a2, a3;
({ x, y, z } = {} = a);
([ a1, a2, a3] = [] = a);
//// [emptyAssignmentPatterns04_ES6.js]
var a;
let x, y, z, a1, a2, a3;
({ x, y, z } = {} = a);
([a1, a2, a3] = [] = a);

View File

@@ -0,0 +1,25 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES6.ts ===
var a: any;
>a : Symbol(a, Decl(emptyAssignmentPatterns04_ES6.ts, 1, 3))
let x, y, z, a1, a2, a3;
>x : Symbol(x, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 3))
>y : Symbol(y, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 6))
>z : Symbol(z, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 9))
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 20))
({ x, y, z } = {} = a);
>x : Symbol(x, Decl(emptyAssignmentPatterns04_ES6.ts, 4, 2))
>y : Symbol(y, Decl(emptyAssignmentPatterns04_ES6.ts, 4, 5))
>z : Symbol(z, Decl(emptyAssignmentPatterns04_ES6.ts, 4, 8))
>a : Symbol(a, Decl(emptyAssignmentPatterns04_ES6.ts, 1, 3))
([ a1, a2, a3] = [] = a);
>a1 : Symbol(a1, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 12))
>a2 : Symbol(a2, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 16))
>a3 : Symbol(a3, Decl(emptyAssignmentPatterns04_ES6.ts, 2, 20))
>a : Symbol(a, Decl(emptyAssignmentPatterns04_ES6.ts, 1, 3))

View File

@@ -0,0 +1,35 @@
=== tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES6.ts ===
var a: any;
>a : any
let x, y, z, a1, a2, a3;
>x : any
>y : any
>z : any
>a1 : any
>a2 : any
>a3 : any
({ x, y, z } = {} = a);
>({ x, y, z } = {} = a) : any
>{ x, y, z } = {} = a : any
>{ x, y, z } : { x: any; y: any; z: any; }
>x : any
>y : any
>z : any
>{} = a : any
>{} : {}
>a : any
([ a1, a2, a3] = [] = a);
>([ a1, a2, a3] = [] = a) : any
>[ a1, a2, a3] = [] = a : any
>[ a1, a2, a3] : [any, any, any]
>a1 : any
>a2 : any
>a3 : any
>[] = a : any
>[] : undefined[]
>a : any

View File

@@ -1,5 +1,5 @@
function f([]) {
var x, y, z;
var x, y, z;
}

View File

@@ -0,0 +1,6 @@
// @target: es5
var a: any;
({} = a);
([] = a);

View File

@@ -0,0 +1,6 @@
// @target: es6
var a: any;
({} = a);
([] = a);

View File

@@ -0,0 +1,7 @@
// @target: es5
var a: any;
let x, y, z, a1, a2, a3;
({} = { x, y, z } = a);
([] = [ a1, a2, a3] = a);

View File

@@ -0,0 +1,7 @@
// @target: es6
var a: any;
let x, y, z, a1, a2, a3;
({} = { x, y, z } = a);
([] = [ a1, a2, a3] = a);

View File

@@ -0,0 +1,6 @@
// @target: es5
var a: any;
({} = {} = a);
([] = [] = a);

View File

@@ -0,0 +1,6 @@
// @target: es6
var a: any;
({} = {} = a);
([] = [] = a);

View File

@@ -0,0 +1,7 @@
// @target: es5
var a: any;
let x, y, z, a1, a2, a3;
({ x, y, z } = {} = a);
([ a1, a2, a3] = [] = a);

View File

@@ -0,0 +1,7 @@
// @target: es6
var a: any;
let x, y, z, a1, a2, a3;
({ x, y, z } = {} = a);
([ a1, a2, a3] = [] = a);