Merge pull request #4657 from Microsoft/emptyVariableDeclarationBindingPattern

Fix emitted code for variable statement with no bound variables
This commit is contained in:
Daniel Rosenwasser 2015-09-09 16:47:45 -07:00
commit 96a815878c
63 changed files with 992 additions and 85 deletions

View file

@ -3210,22 +3210,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
}
function ensureIdentifier(expr: Expression): Expression {
if (expr.kind !== SyntaxKind.Identifier) {
let identifier = createTempVariable(TempFlags.Auto);
if (!canDefineTempVariablesInPlace) {
recordTempDeclaration(identifier);
}
emitAssignment(identifier, expr);
expr = identifier;
/**
* Ensures that there exists a declared identifier whose value holds the given expression.
* This function is useful to ensure that the expression's value can be read from in subsequent expressions.
* Unless 'reuseIdentifierExpressions' is false, 'expr' will be returned if it is just an identifier.
*
* @param expr the expression whose value needs to be bound.
* @param reuseIdentifierExpressions true if identifier expressions can simply be returned;
* false if it is necessary to always emit an identifier.
*/
function ensureIdentifier(expr: Expression, reuseIdentifierExpressions: boolean): Expression {
if (expr.kind === SyntaxKind.Identifier && reuseIdentifierExpressions) {
return expr;
}
return expr;
let identifier = createTempVariable(TempFlags.Auto);
if (!canDefineTempVariablesInPlace) {
recordTempDeclaration(identifier);
}
emitAssignment(identifier, expr);
return identifier;
}
function createDefaultValueCheck(value: Expression, defaultValue: Expression): Expression {
// The value expression will be evaluated twice, so for anything but a simple identifier
// we need to generate a temporary variable
value = ensureIdentifier(value);
value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true);
// Return the expression 'value === void 0 ? defaultValue : value'
let equals = <BinaryExpression>createSynthesizedNode(SyntaxKind.BinaryExpression);
equals.left = value;
@ -3276,7 +3286,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
if (properties.length !== 1) {
// For anything but a single element destructuring we need to generate a temporary
// to ensure value is evaluated exactly once.
value = ensureIdentifier(value);
value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true);
}
for (let p of properties) {
if (p.kind === SyntaxKind.PropertyAssignment || p.kind === SyntaxKind.ShorthandPropertyAssignment) {
@ -3291,7 +3301,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
if (elements.length !== 1) {
// For anything but a single element destructuring we need to generate a temporary
// to ensure value is evaluated exactly once.
value = ensureIdentifier(value);
value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true);
}
for (let i = 0; i < elements.length; i++) {
let e = elements[i];
@ -3336,7 +3346,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
if (root.parent.kind !== SyntaxKind.ParenthesizedExpression) {
write("(");
}
value = ensureIdentifier(value);
value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true);
emitDestructuringAssignment(target, value);
write(", ");
emit(value);
@ -3346,7 +3356,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
}
function emitBindingElement(target: BindingElement, value: Expression) {
function emitBindingElement(target: BindingElement | VariableDeclaration, value: Expression) {
if (target.initializer) {
// Combine value and initializer
value = value ? createDefaultValueCheck(value, target.initializer) : target.initializer;
@ -3356,14 +3366,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
value = createVoidZero();
}
if (isBindingPattern(target.name)) {
let pattern = <BindingPattern>target.name;
let elements = pattern.elements;
if (elements.length !== 1) {
// For anything but a single element destructuring we need to generate a temporary
// to ensure value is evaluated exactly once.
value = ensureIdentifier(value);
const pattern = <BindingPattern>target.name;
const elements = pattern.elements;
const numElements = elements.length;
if (numElements !== 1) {
// For anything other than a single-element destructuring we need to generate a temporary
// to ensure value is evaluated exactly once. Additionally, if we have zero elements
// we need to emit *something* to ensure that in case a 'var' keyword was already emitted,
// so in that case, we'll intentionally create that temporary.
value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ numElements !== 0);
}
for (let i = 0; i < elements.length; i++) {
for (let i = 0; i < numElements; i++) {
let element = elements[i];
if (pattern.kind === SyntaxKind.ObjectBindingPattern) {
// Rewrite element to a declaration with an initializer that fetches property
@ -3375,7 +3390,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
// Rewrite element to a declaration that accesses array element at index i
emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i)));
}
else if (i === elements.length - 1) {
else if (i === numElements - 1) {
emitBindingElement(element, createSliceCall(value, i));
}
}

View file

@ -1,6 +1,5 @@
//// [emptyArrayBindingPatternParameter01.ts]
function f([]) {
var x, y, z;
}
@ -9,3 +8,7 @@ function f([]) {
function f(_a) {
var x, y, z;
}
//// [emptyArrayBindingPatternParameter01.d.ts]
declare function f([]: any[]): void;

View file

@ -1,11 +1,10 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter01.ts ===
function f([]) {
>f : Symbol(f, Decl(emptyArrayBindingPatternParameter01.ts, 0, 0))
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))
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter01.ts, 2, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter01.ts, 2, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter01.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter01.ts ===
function f([]) {
>f : ([]: any[]) => void

View file

@ -1,6 +1,5 @@
//// [emptyArrayBindingPatternParameter02.ts]
function f(a, []) {
var x, y, z;
}
@ -9,3 +8,7 @@ function f(a, []) {
function f(a, _a) {
var x, y, z;
}
//// [emptyArrayBindingPatternParameter02.d.ts]
declare function f(a: any, []: any[]): void;

View file

@ -1,12 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter02.ts ===
function f(a, []) {
>f : Symbol(f, Decl(emptyArrayBindingPatternParameter02.ts, 0, 0))
>a : Symbol(a, Decl(emptyArrayBindingPatternParameter02.ts, 2, 11))
>a : Symbol(a, Decl(emptyArrayBindingPatternParameter02.ts, 1, 11))
var x, y, z;
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter02.ts, 3, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter02.ts, 3, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter02.ts, 3, 13))
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter02.ts, 2, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter02.ts, 2, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter02.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter02.ts ===
function f(a, []) {
>f : (a: any, []: any[]) => void
>a : any

View file

@ -1,6 +1,5 @@
//// [emptyArrayBindingPatternParameter03.ts]
function f(a, []) {
var x, y, z;
}
@ -9,3 +8,7 @@ function f(a, []) {
function f(a, _a) {
var x, y, z;
}
//// [emptyArrayBindingPatternParameter03.d.ts]
declare function f(a: any, []: any[]): void;

View file

@ -1,12 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter03.ts ===
function f(a, []) {
>f : Symbol(f, Decl(emptyArrayBindingPatternParameter03.ts, 0, 0))
>a : Symbol(a, Decl(emptyArrayBindingPatternParameter03.ts, 2, 11))
>a : Symbol(a, Decl(emptyArrayBindingPatternParameter03.ts, 1, 11))
var x, y, z;
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter03.ts, 3, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter03.ts, 3, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter03.ts, 3, 13))
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter03.ts, 2, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter03.ts, 2, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter03.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter03.ts ===
function f(a, []) {
>f : (a: any, []: any[]) => void
>a : any

View file

@ -1,6 +1,5 @@
//// [emptyArrayBindingPatternParameter04.ts]
function f([] = [1,2,3,4]) {
var x, y, z;
}
@ -10,3 +9,7 @@ function f(_a) {
var _a = [1, 2, 3, 4];
var x, y, z;
}
//// [emptyArrayBindingPatternParameter04.d.ts]
declare function f([]?: number[]): void;

View file

@ -1,11 +1,10 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter04.ts ===
function f([] = [1,2,3,4]) {
>f : Symbol(f, Decl(emptyArrayBindingPatternParameter04.ts, 0, 0))
var x, y, z;
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter04.ts, 3, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter04.ts, 3, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter04.ts, 3, 13))
>x : Symbol(x, Decl(emptyArrayBindingPatternParameter04.ts, 2, 7))
>y : Symbol(y, Decl(emptyArrayBindingPatternParameter04.ts, 2, 10))
>z : Symbol(z, Decl(emptyArrayBindingPatternParameter04.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter04.ts ===
function f([] = [1,2,3,4]) {
>f : ([]?: number[]) => void
>[1,2,3,4] : number[]

View file

@ -9,3 +9,7 @@ var a: any;
var a;
(a);
(a);
//// [emptyAssignmentPatterns01_ES5.d.ts]
declare var a: any;

View file

@ -9,3 +9,7 @@ var a: any;
var a;
({} = a);
([] = a);
//// [emptyAssignmentPatterns01_ES6.d.ts]
declare var a: any;

View file

@ -11,3 +11,8 @@ 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));
//// [emptyAssignmentPatterns02_ES5.d.ts]
declare var a: any;
declare let x: any, y: any, z: any, a1: any, a2: any, a3: any;

View file

@ -11,3 +11,8 @@ var a;
let x, y, z, a1, a2, a3;
({} = { x, y, z } = a);
([] = [a1, a2, a3] = a);
//// [emptyAssignmentPatterns02_ES6.d.ts]
declare var a: any;
declare let x: any, y: any, z: any, a1: any, a2: any, a3: any;

View file

@ -9,3 +9,7 @@ var a: any;
var a;
(a);
(a);
//// [emptyAssignmentPatterns03_ES5.d.ts]
declare var a: any;

View file

@ -9,3 +9,7 @@ var a: any;
var a;
({} = {} = a);
([] = [] = a);
//// [emptyAssignmentPatterns03_ES6.d.ts]
declare var a: any;

View file

@ -12,3 +12,8 @@ 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;
//// [emptyAssignmentPatterns04_ES5.d.ts]
declare var a: any;
declare let x: any, y: any, z: any, a1: any, a2: any, a3: any;

View file

@ -11,3 +11,8 @@ var a;
let x, y, z, a1, a2, a3;
({ x, y, z } = {} = a);
([a1, a2, a3] = [] = a);
//// [emptyAssignmentPatterns04_ES6.d.ts]
declare var a: any;
declare let x: any, y: any, z: any, a1: any, a2: any, a3: any;

View file

@ -1,6 +1,5 @@
//// [emptyObjectBindingPatternParameter01.ts]
function f({}) {
var x, y, z;
}
@ -9,3 +8,7 @@ function f({}) {
function f(_a) {
var x, y, z;
}
//// [emptyObjectBindingPatternParameter01.d.ts]
declare function f({}: {}): void;

View file

@ -1,11 +1,10 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter01.ts ===
function f({}) {
>f : Symbol(f, Decl(emptyObjectBindingPatternParameter01.ts, 0, 0))
var x, y, z;
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter01.ts, 3, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter01.ts, 3, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter01.ts, 3, 13))
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter01.ts, 2, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter01.ts, 2, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter01.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter01.ts ===
function f({}) {
>f : ({}: {}) => void

View file

@ -1,6 +1,5 @@
//// [emptyObjectBindingPatternParameter02.ts]
function f(a, {}) {
var x, y, z;
}
@ -9,3 +8,7 @@ function f(a, {}) {
function f(a, _a) {
var x, y, z;
}
//// [emptyObjectBindingPatternParameter02.d.ts]
declare function f(a: any, {}: {}): void;

View file

@ -1,12 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter02.ts ===
function f(a, {}) {
>f : Symbol(f, Decl(emptyObjectBindingPatternParameter02.ts, 0, 0))
>a : Symbol(a, Decl(emptyObjectBindingPatternParameter02.ts, 2, 11))
>a : Symbol(a, Decl(emptyObjectBindingPatternParameter02.ts, 1, 11))
var x, y, z;
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter02.ts, 3, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter02.ts, 3, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter02.ts, 3, 13))
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter02.ts, 2, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter02.ts, 2, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter02.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter02.ts ===
function f(a, {}) {
>f : (a: any, {}: {}) => void
>a : any

View file

@ -1,6 +1,5 @@
//// [emptyObjectBindingPatternParameter03.ts]
function f({}, a) {
var x, y, z;
}
@ -9,3 +8,7 @@ function f({}, a) {
function f(_a, a) {
var x, y, z;
}
//// [emptyObjectBindingPatternParameter03.d.ts]
declare function f({}: {}, a: any): void;

View file

@ -1,12 +1,11 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter03.ts ===
function f({}, a) {
>f : Symbol(f, Decl(emptyObjectBindingPatternParameter03.ts, 0, 0))
>a : Symbol(a, Decl(emptyObjectBindingPatternParameter03.ts, 2, 14))
>a : Symbol(a, Decl(emptyObjectBindingPatternParameter03.ts, 1, 14))
var x, y, z;
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter03.ts, 3, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter03.ts, 3, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter03.ts, 3, 13))
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter03.ts, 2, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter03.ts, 2, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter03.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter03.ts ===
function f({}, a) {
>f : ({}: {}, a: any) => void
>a : any

View file

@ -1,6 +1,5 @@
//// [emptyObjectBindingPatternParameter04.ts]
function f({} = {a: 1, b: "2", c: true}) {
var x, y, z;
}
@ -10,3 +9,11 @@ function f(_a) {
var _a = { a: 1, b: "2", c: true };
var x, y, z;
}
//// [emptyObjectBindingPatternParameter04.d.ts]
declare function f({}?: {
a: number;
b: string;
c: boolean;
}): void;

View file

@ -1,14 +1,13 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter04.ts ===
function f({} = {a: 1, b: "2", c: true}) {
>f : Symbol(f, Decl(emptyObjectBindingPatternParameter04.ts, 0, 0))
>a : Symbol(a, Decl(emptyObjectBindingPatternParameter04.ts, 2, 17))
>b : Symbol(b, Decl(emptyObjectBindingPatternParameter04.ts, 2, 22))
>c : Symbol(c, Decl(emptyObjectBindingPatternParameter04.ts, 2, 30))
>a : Symbol(a, Decl(emptyObjectBindingPatternParameter04.ts, 1, 17))
>b : Symbol(b, Decl(emptyObjectBindingPatternParameter04.ts, 1, 22))
>c : Symbol(c, Decl(emptyObjectBindingPatternParameter04.ts, 1, 30))
var x, y, z;
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter04.ts, 3, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter04.ts, 3, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter04.ts, 3, 13))
>x : Symbol(x, Decl(emptyObjectBindingPatternParameter04.ts, 2, 7))
>y : Symbol(y, Decl(emptyObjectBindingPatternParameter04.ts, 2, 10))
>z : Symbol(z, Decl(emptyObjectBindingPatternParameter04.ts, 2, 13))
}

View file

@ -1,6 +1,5 @@
=== tests/cases/conformance/es6/destructuring/emptyObjectBindingPatternParameter04.ts ===
function f({} = {a: 1, b: "2", c: true}) {
>f : ({}?: { a: number; b: string; c: boolean; }) => void
>{a: 1, b: "2", c: true} : { a: number; b: string; c: boolean; }

View file

@ -0,0 +1,101 @@
//// [emptyVariableDeclarationBindingPatterns01_ES5.ts]
(function () {
var a: any;
var {} = a;
let {} = a;
const {} = a;
var [] = a;
let [] = a;
const [] = a;
var {} = a, [] = a;
let {} = a, [] = a;
const {} = a, [] = a;
var { p1: {}, p2: [] } = a;
let { p1: {}, p2: [] } = a;
const { p1: {}, p2: [] } = a;
for (var {} = {}, {} = {}; false; void 0) {
}
function f({} = a, [] = a, { p: {} = a} = a) {
return ({} = a, [] = a, { p: {} = a } = a) => a;
}
})();
(function () {
const ns: number[][] = [];
for (var {} of ns) {
}
for (let {} of ns) {
}
for (const {} of ns) {
}
for (var [] of ns) {
}
for (let [] of ns) {
}
for (const [] of ns) {
}
})();
//// [emptyVariableDeclarationBindingPatterns01_ES5.js]
(function () {
var a;
var _a = a;
var _b = a;
var _c = a;
var _d = a;
var _e = a;
var _f = a;
var _g = a, _h = a;
var _j = a, _k = a;
var _l = a, _m = a;
var _o = a.p1, _p = a.p2;
var _q = a.p1, _r = a.p2;
var _s = a.p1, _t = a.p2;
for (var _u = {}, _v = {}; false; void 0) {
}
function f(_a, _b, _c) {
var _a = a;
var _b = a;
var _d = (_c === void 0 ? a : _c).p, _e = _d === void 0 ? a : _d;
return function (_a, _b, _c) {
var _a = a;
var _b = a;
var _d = (_c === void 0 ? a : _c).p, _e = _d === void 0 ? a : _d;
return a;
};
}
})();
(function () {
var ns = [];
for (var _i = 0; _i < ns.length; _i++) {
var _a = ns[_i];
}
for (var _b = 0; _b < ns.length; _b++) {
var _c = ns[_b];
}
for (var _d = 0; _d < ns.length; _d++) {
var _e = ns[_d];
}
for (var _f = 0; _f < ns.length; _f++) {
var _g = ns[_f];
}
for (var _h = 0; _h < ns.length; _h++) {
var _j = ns[_h];
}
for (var _k = 0; _k < ns.length; _k++) {
var _l = ns[_k];
}
})();

View file

@ -0,0 +1,92 @@
=== tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns01_ES5.ts ===
(function () {
var a: any;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
var {} = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
let {} = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
const {} = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
var [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
let [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
const [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
var {} = a, [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
let {} = a, [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
const {} = a, [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
var { p1: {}, p2: [] } = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
let { p1: {}, p2: [] } = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
const { p1: {}, p2: [] } = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
for (var {} = {}, {} = {}; false; void 0) {
}
function f({} = a, [] = a, { p: {} = a} = a) {
>f : Symbol(f, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 21, 5))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
return ({} = a, [] = a, { p: {} = a } = a) => a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 2, 7))
}
})();
(function () {
const ns: number[][] = [];
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 29, 9))
for (var {} of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 29, 9))
}
for (let {} of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 29, 9))
}
for (const {} of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 29, 9))
}
for (var [] of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 29, 9))
}
for (let [] of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 29, 9))
}
for (const [] of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES5.ts, 29, 9))
}
})();

View file

@ -0,0 +1,115 @@
=== tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns01_ES5.ts ===
(function () {
>(function () { var a: any; var {} = a; let {} = a; const {} = a; var [] = a; let [] = a; const [] = a; var {} = a, [] = a; let {} = a, [] = a; const {} = a, [] = a; var { p1: {}, p2: [] } = a; let { p1: {}, p2: [] } = a; const { p1: {}, p2: [] } = a; for (var {} = {}, {} = {}; false; void 0) { } function f({} = a, [] = a, { p: {} = a} = a) { return ({} = a, [] = a, { p: {} = a } = a) => a; }})() : void
>(function () { var a: any; var {} = a; let {} = a; const {} = a; var [] = a; let [] = a; const [] = a; var {} = a, [] = a; let {} = a, [] = a; const {} = a, [] = a; var { p1: {}, p2: [] } = a; let { p1: {}, p2: [] } = a; const { p1: {}, p2: [] } = a; for (var {} = {}, {} = {}; false; void 0) { } function f({} = a, [] = a, { p: {} = a} = a) { return ({} = a, [] = a, { p: {} = a } = a) => a; }}) : () => void
>function () { var a: any; var {} = a; let {} = a; const {} = a; var [] = a; let [] = a; const [] = a; var {} = a, [] = a; let {} = a, [] = a; const {} = a, [] = a; var { p1: {}, p2: [] } = a; let { p1: {}, p2: [] } = a; const { p1: {}, p2: [] } = a; for (var {} = {}, {} = {}; false; void 0) { } function f({} = a, [] = a, { p: {} = a} = a) { return ({} = a, [] = a, { p: {} = a } = a) => a; }} : () => void
var a: any;
>a : any
var {} = a;
>a : any
let {} = a;
>a : any
const {} = a;
>a : any
var [] = a;
>a : any
let [] = a;
>a : any
const [] = a;
>a : any
var {} = a, [] = a;
>a : any
>a : any
let {} = a, [] = a;
>a : any
>a : any
const {} = a, [] = a;
>a : any
>a : any
var { p1: {}, p2: [] } = a;
>p1 : any
>p2 : any
>a : any
let { p1: {}, p2: [] } = a;
>p1 : any
>p2 : any
>a : any
const { p1: {}, p2: [] } = a;
>p1 : any
>p2 : any
>a : any
for (var {} = {}, {} = {}; false; void 0) {
>{} : {}
>{} : {}
>false : boolean
>void 0 : undefined
>0 : number
}
function f({} = a, [] = a, { p: {} = a} = a) {
>f : ({}?: any, []?: any, { p: {} = a}?: any) => ({}?: any, []?: any, { p: {} = a }?: any) => any
>a : any
>a : any
>p : any
>a : any
>a : any
return ({} = a, [] = a, { p: {} = a } = a) => a;
>({} = a, [] = a, { p: {} = a } = a) => a : ({}?: any, []?: any, { p: {} = a }?: any) => any
>a : any
>a : any
>p : any
>a : any
>a : any
>a : any
}
})();
(function () {
>(function () { const ns: number[][] = []; for (var {} of ns) { } for (let {} of ns) { } for (const {} of ns) { } for (var [] of ns) { } for (let [] of ns) { } for (const [] of ns) { }})() : void
>(function () { const ns: number[][] = []; for (var {} of ns) { } for (let {} of ns) { } for (const {} of ns) { } for (var [] of ns) { } for (let [] of ns) { } for (const [] of ns) { }}) : () => void
>function () { const ns: number[][] = []; for (var {} of ns) { } for (let {} of ns) { } for (const {} of ns) { } for (var [] of ns) { } for (let [] of ns) { } for (const [] of ns) { }} : () => void
const ns: number[][] = [];
>ns : number[][]
>[] : undefined[]
for (var {} of ns) {
>ns : number[][]
}
for (let {} of ns) {
>ns : number[][]
}
for (const {} of ns) {
>ns : number[][]
}
for (var [] of ns) {
>ns : number[][]
}
for (let [] of ns) {
>ns : number[][]
}
for (const [] of ns) {
>ns : number[][]
}
})();

View file

@ -0,0 +1,87 @@
//// [emptyVariableDeclarationBindingPatterns01_ES6.ts]
(function () {
var a: any;
var {} = a;
let {} = a;
const {} = a;
var [] = a;
let [] = a;
const [] = a;
var {} = a, [] = a;
let {} = a, [] = a;
const {} = a, [] = a;
var { p1: {}, p2: [] } = a;
let { p1: {}, p2: [] } = a;
const { p1: {}, p2: [] } = a;
for (var {} = {}, {} = {}; false; void 0) {
}
function f({} = a, [] = a, { p: {} = a} = a) {
return ({} = a, [] = a, { p: {} = a } = a) => a;
}
})();
(function () {
const ns: number[][] = [];
for (var {} of ns) {
}
for (let {} of ns) {
}
for (const {} of ns) {
}
for (var [] of ns) {
}
for (let [] of ns) {
}
for (const [] of ns) {
}
})();
//// [emptyVariableDeclarationBindingPatterns01_ES6.js]
(function () {
var a;
var { } = a;
let { } = a;
const { } = a;
var [] = a;
let [] = a;
const [] = a;
var { } = a, [] = a;
let { } = a, [] = a;
const { } = a, [] = a;
var { p1: { }, p2: [] } = a;
let { p1: { }, p2: [] } = a;
const { p1: { }, p2: [] } = a;
for (var { } = {}, { } = {}; false; void 0) {
}
function f({ } = a, [] = a, { p: { } = a } = a) {
return ({ } = a, [] = a, { p: { } = a } = a) => a;
}
})();
(function () {
const ns = [];
for (var { } of ns) {
}
for (let { } of ns) {
}
for (const { } of ns) {
}
for (var [] of ns) {
}
for (let [] of ns) {
}
for (const [] of ns) {
}
})();

View file

@ -0,0 +1,92 @@
=== tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns01_ES6.ts ===
(function () {
var a: any;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
var {} = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
let {} = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
const {} = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
var [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
let [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
const [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
var {} = a, [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
let {} = a, [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
const {} = a, [] = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
var { p1: {}, p2: [] } = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
let { p1: {}, p2: [] } = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
const { p1: {}, p2: [] } = a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
for (var {} = {}, {} = {}; false; void 0) {
}
function f({} = a, [] = a, { p: {} = a} = a) {
>f : Symbol(f, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 21, 5))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
return ({} = a, [] = a, { p: {} = a } = a) => a;
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
>a : Symbol(a, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 2, 7))
}
})();
(function () {
const ns: number[][] = [];
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 29, 9))
for (var {} of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 29, 9))
}
for (let {} of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 29, 9))
}
for (const {} of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 29, 9))
}
for (var [] of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 29, 9))
}
for (let [] of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 29, 9))
}
for (const [] of ns) {
>ns : Symbol(ns, Decl(emptyVariableDeclarationBindingPatterns01_ES6.ts, 29, 9))
}
})();

View file

@ -0,0 +1,115 @@
=== tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns01_ES6.ts ===
(function () {
>(function () { var a: any; var {} = a; let {} = a; const {} = a; var [] = a; let [] = a; const [] = a; var {} = a, [] = a; let {} = a, [] = a; const {} = a, [] = a; var { p1: {}, p2: [] } = a; let { p1: {}, p2: [] } = a; const { p1: {}, p2: [] } = a; for (var {} = {}, {} = {}; false; void 0) { } function f({} = a, [] = a, { p: {} = a} = a) { return ({} = a, [] = a, { p: {} = a } = a) => a; }})() : void
>(function () { var a: any; var {} = a; let {} = a; const {} = a; var [] = a; let [] = a; const [] = a; var {} = a, [] = a; let {} = a, [] = a; const {} = a, [] = a; var { p1: {}, p2: [] } = a; let { p1: {}, p2: [] } = a; const { p1: {}, p2: [] } = a; for (var {} = {}, {} = {}; false; void 0) { } function f({} = a, [] = a, { p: {} = a} = a) { return ({} = a, [] = a, { p: {} = a } = a) => a; }}) : () => void
>function () { var a: any; var {} = a; let {} = a; const {} = a; var [] = a; let [] = a; const [] = a; var {} = a, [] = a; let {} = a, [] = a; const {} = a, [] = a; var { p1: {}, p2: [] } = a; let { p1: {}, p2: [] } = a; const { p1: {}, p2: [] } = a; for (var {} = {}, {} = {}; false; void 0) { } function f({} = a, [] = a, { p: {} = a} = a) { return ({} = a, [] = a, { p: {} = a } = a) => a; }} : () => void
var a: any;
>a : any
var {} = a;
>a : any
let {} = a;
>a : any
const {} = a;
>a : any
var [] = a;
>a : any
let [] = a;
>a : any
const [] = a;
>a : any
var {} = a, [] = a;
>a : any
>a : any
let {} = a, [] = a;
>a : any
>a : any
const {} = a, [] = a;
>a : any
>a : any
var { p1: {}, p2: [] } = a;
>p1 : any
>p2 : any
>a : any
let { p1: {}, p2: [] } = a;
>p1 : any
>p2 : any
>a : any
const { p1: {}, p2: [] } = a;
>p1 : any
>p2 : any
>a : any
for (var {} = {}, {} = {}; false; void 0) {
>{} : {}
>{} : {}
>false : boolean
>void 0 : undefined
>0 : number
}
function f({} = a, [] = a, { p: {} = a} = a) {
>f : ({}?: any, []?: any, { p: {} = a}?: any) => ({}?: any, []?: any, { p: {} = a }?: any) => any
>a : any
>a : any
>p : any
>a : any
>a : any
return ({} = a, [] = a, { p: {} = a } = a) => a;
>({} = a, [] = a, { p: {} = a } = a) => a : ({}?: any, []?: any, { p: {} = a }?: any) => any
>a : any
>a : any
>p : any
>a : any
>a : any
>a : any
}
})();
(function () {
>(function () { const ns: number[][] = []; for (var {} of ns) { } for (let {} of ns) { } for (const {} of ns) { } for (var [] of ns) { } for (let [] of ns) { } for (const [] of ns) { }})() : void
>(function () { const ns: number[][] = []; for (var {} of ns) { } for (let {} of ns) { } for (const {} of ns) { } for (var [] of ns) { } for (let [] of ns) { } for (const [] of ns) { }}) : () => void
>function () { const ns: number[][] = []; for (var {} of ns) { } for (let {} of ns) { } for (const {} of ns) { } for (var [] of ns) { } for (let [] of ns) { } for (const [] of ns) { }} : () => void
const ns: number[][] = [];
>ns : number[][]
>[] : undefined[]
for (var {} of ns) {
>ns : number[][]
}
for (let {} of ns) {
>ns : number[][]
}
for (const {} of ns) {
>ns : number[][]
}
for (var [] of ns) {
>ns : number[][]
}
for (let [] of ns) {
>ns : number[][]
}
for (const [] of ns) {
>ns : number[][]
}
})();

View file

@ -0,0 +1,31 @@
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES5.ts(3,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES5.ts(4,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES5.ts(5,11): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES5.ts(7,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES5.ts(8,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES5.ts(9,11): error TS1182: A destructuring declaration must have an initializer.
==== tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES5.ts (6 errors) ====
(function () {
var {};
~~
!!! error TS1182: A destructuring declaration must have an initializer.
let {};
~~
!!! error TS1182: A destructuring declaration must have an initializer.
const {};
~~
!!! error TS1182: A destructuring declaration must have an initializer.
var [];
~~
!!! error TS1182: A destructuring declaration must have an initializer.
let [];
~~
!!! error TS1182: A destructuring declaration must have an initializer.
const [];
~~
!!! error TS1182: A destructuring declaration must have an initializer.
})();

View file

@ -0,0 +1,24 @@
//// [emptyVariableDeclarationBindingPatterns02_ES5.ts]
(function () {
var {};
let {};
const {};
var [];
let [];
const [];
})();
//// [emptyVariableDeclarationBindingPatterns02_ES5.js]
(function () {
var _a = void 0;
var _b = void 0;
var _c = void 0;
var _d = void 0;
var _e = void 0;
var _f = void 0;
})();
//// [emptyVariableDeclarationBindingPatterns02_ES5.d.ts]

View file

@ -0,0 +1,31 @@
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES6.ts(3,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES6.ts(4,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES6.ts(5,11): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES6.ts(7,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES6.ts(8,9): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES6.ts(9,11): error TS1182: A destructuring declaration must have an initializer.
==== tests/cases/conformance/es6/destructuring/emptyVariableDeclarationBindingPatterns02_ES6.ts (6 errors) ====
(function () {
var {};
~~
!!! error TS1182: A destructuring declaration must have an initializer.
let {};
~~
!!! error TS1182: A destructuring declaration must have an initializer.
const {};
~~
!!! error TS1182: A destructuring declaration must have an initializer.
var [];
~~
!!! error TS1182: A destructuring declaration must have an initializer.
let [];
~~
!!! error TS1182: A destructuring declaration must have an initializer.
const [];
~~
!!! error TS1182: A destructuring declaration must have an initializer.
})();

View file

@ -0,0 +1,24 @@
//// [emptyVariableDeclarationBindingPatterns02_ES6.ts]
(function () {
var {};
let {};
const {};
var [];
let [];
const [];
})();
//// [emptyVariableDeclarationBindingPatterns02_ES6.js]
(function () {
var { };
let { };
const { };
var [];
let [];
const [];
})();
//// [emptyVariableDeclarationBindingPatterns02_ES6.d.ts]

View file

@ -1,4 +1,4 @@
// @declaration: true
function f([]) {
var x, y, z;

View file

@ -1,4 +1,4 @@
// @declaration: true
function f(a, []) {
var x, y, z;

View file

@ -1,4 +1,4 @@
// @declaration: true
function f(a, []) {
var x, y, z;

View file

@ -1,4 +1,4 @@
// @declaration: true
function f([] = [1,2,3,4]) {
var x, y, z;

View file

@ -1,4 +1,5 @@
// @target: es5
// @declaration: true
var a: any;

View file

@ -1,4 +1,5 @@
// @target: es6
// @declaration: true
var a: any;

View file

@ -1,4 +1,5 @@
// @target: es5
// @declaration: true
var a: any;
let x, y, z, a1, a2, a3;

View file

@ -1,4 +1,5 @@
// @target: es6
// @declaration: true
var a: any;
let x, y, z, a1, a2, a3;

View file

@ -1,4 +1,5 @@
// @target: es5
// @declaration: true
var a: any;

View file

@ -1,4 +1,5 @@
// @target: es6
// @declaration: true
var a: any;

View file

@ -1,4 +1,5 @@
// @target: es5
// @declaration: true
var a: any;
let x, y, z, a1, a2, a3;

View file

@ -1,4 +1,5 @@
// @target: es6
// @declaration: true
var a: any;
let x, y, z, a1, a2, a3;

View file

@ -1,4 +1,4 @@
// @declaration: true
function f({}) {
var x, y, z;

View file

@ -1,4 +1,4 @@
// @declaration: true
function f(a, {}) {
var x, y, z;

View file

@ -1,4 +1,4 @@
// @declaration: true
function f({}, a) {
var x, y, z;

View file

@ -1,4 +1,4 @@
// @declaration: true
function f({} = {a: 1, b: "2", c: true}) {
var x, y, z;

View file

@ -0,0 +1,50 @@
// @target: es5
(function () {
var a: any;
var {} = a;
let {} = a;
const {} = a;
var [] = a;
let [] = a;
const [] = a;
var {} = a, [] = a;
let {} = a, [] = a;
const {} = a, [] = a;
var { p1: {}, p2: [] } = a;
let { p1: {}, p2: [] } = a;
const { p1: {}, p2: [] } = a;
for (var {} = {}, {} = {}; false; void 0) {
}
function f({} = a, [] = a, { p: {} = a} = a) {
return ({} = a, [] = a, { p: {} = a } = a) => a;
}
})();
(function () {
const ns: number[][] = [];
for (var {} of ns) {
}
for (let {} of ns) {
}
for (const {} of ns) {
}
for (var [] of ns) {
}
for (let [] of ns) {
}
for (const [] of ns) {
}
})();

View file

@ -0,0 +1,50 @@
// @target: es6
(function () {
var a: any;
var {} = a;
let {} = a;
const {} = a;
var [] = a;
let [] = a;
const [] = a;
var {} = a, [] = a;
let {} = a, [] = a;
const {} = a, [] = a;
var { p1: {}, p2: [] } = a;
let { p1: {}, p2: [] } = a;
const { p1: {}, p2: [] } = a;
for (var {} = {}, {} = {}; false; void 0) {
}
function f({} = a, [] = a, { p: {} = a} = a) {
return ({} = a, [] = a, { p: {} = a } = a) => a;
}
})();
(function () {
const ns: number[][] = [];
for (var {} of ns) {
}
for (let {} of ns) {
}
for (const {} of ns) {
}
for (var [] of ns) {
}
for (let [] of ns) {
}
for (const [] of ns) {
}
})();

View file

@ -0,0 +1,12 @@
// @target: es5
// @declaration: true
(function () {
var {};
let {};
const {};
var [];
let [];
const [];
})();

View file

@ -0,0 +1,12 @@
// @target: es6
// @declaration: true
(function () {
var {};
let {};
const {};
var [];
let [];
const [];
})();