diff --git a/tests/baselines/reference/declarationInAmbientContext.errors.txt b/tests/baselines/reference/declarationInAmbientContext.errors.txt new file mode 100644 index 0000000000..85e8808a27 --- /dev/null +++ b/tests/baselines/reference/declarationInAmbientContext.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/destructuring/declarationInAmbientContext.ts(1,13): error TS1166: Destructuring declarations are not allowed in ambient contexts. +tests/cases/conformance/es6/destructuring/declarationInAmbientContext.ts(2,13): error TS1166: Destructuring declarations are not allowed in ambient contexts. + + +==== tests/cases/conformance/es6/destructuring/declarationInAmbientContext.ts (2 errors) ==== + declare var [a, b]; // Error, destructuring declaration not allowed in ambient context + ~~~~~~ +!!! error TS1166: Destructuring declarations are not allowed in ambient contexts. + declare var {c, d}; // Error, destructuring declaration not allowed in ambient context + ~~~~~~ +!!! error TS1166: Destructuring declarations are not allowed in ambient contexts. + \ No newline at end of file diff --git a/tests/baselines/reference/declarationWithNoInitializer.errors.txt b/tests/baselines/reference/declarationWithNoInitializer.errors.txt new file mode 100644 index 0000000000..6d5c2022a9 --- /dev/null +++ b/tests/baselines/reference/declarationWithNoInitializer.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/destructuring/declarationWithNoInitializer.ts(1,5): error TS1165: A destructuring declaration must have an initializer. +tests/cases/conformance/es6/destructuring/declarationWithNoInitializer.ts(2,5): error TS1165: A destructuring declaration must have an initializer. + + +==== tests/cases/conformance/es6/destructuring/declarationWithNoInitializer.ts (2 errors) ==== + var [a, b]; // Error, no initializer + ~~~~~~ +!!! error TS1165: A destructuring declaration must have an initializer. + var {c, d}; // Error, no initializer + ~~~~~~ +!!! error TS1165: A destructuring declaration must have an initializer. + \ No newline at end of file diff --git a/tests/baselines/reference/declarationsAndAssignments.errors.txt b/tests/baselines/reference/declarationsAndAssignments.errors.txt new file mode 100644 index 0000000000..2c9a54c869 --- /dev/null +++ b/tests/baselines/reference/declarationsAndAssignments.errors.txt @@ -0,0 +1,202 @@ +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(5,16): error TS2460: Type '[number, string]' has no property '2'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(56,17): error TS2322: Type 'number' is not assignable to type 'string'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,13): error TS2460: Type '[number]' has no property '1'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,16): error TS2460: Type '[number]' has no property '2'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(67,9): error TS2461: Type '{ [x: number]: undefined; }' is not an array type. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(68,9): error TS2461: Type '{ [x: number]: number; 0: number; 1: number; }' is not an array type. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(73,11): error TS2459: Type '{}' has no property 'a' and no string index signature. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(73,14): error TS2459: Type '{}' has no property 'b' and no string index signature. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(74,11): error TS2459: Type 'undefined[]' has no property 'a' and no string index signature. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(74,14): error TS2459: Type 'undefined[]' has no property 'b' and no string index signature. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(106,5): error TS2345: Argument of type '[number, [string, { y: boolean; }]]' is not assignable to parameter of type '[number, [string, { x: any; y?: boolean; }]]'. + Types of property '1' are incompatible. + Type '[string, { y: boolean; }]' is not assignable to type '[string, { x: any; y?: boolean; }]'. + Types of property '1' are incompatible. + Type '{ y: boolean; }' is not assignable to type '{ x: any; y?: boolean; }'. + Property 'x' is missing in type '{ y: boolean; }'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,6): error TS2322: Type 'string' is not assignable to type 'number'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): error TS2322: Type 'number' is not assignable to type 'string'. + + +==== tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts (13 errors) ==== + function f0() { + var [] = [1, "hello"]; + var [x] = [1, "hello"]; + var [x, y] = [1, "hello"]; + var [x, y, z] = [1, "hello"]; // Error + ~ +!!! error TS2460: Type '[number, string]' has no property '2'. + var [,, z] = [0, 1, 2]; + var x: number; + var y: string; + } + + function f1() { + var a = [1, "hello"]; + var [x] = a; + var [x, y] = a; + var [x, y, z] = a; + var x: number | string; + var y: number | string; + var z: number | string; + } + + function f2() { + var { } = { x: 5, y: "hello" }; + var { x } = { x: 5, y: "hello" }; + var { y } = { x: 5, y: "hello" }; + var { x, y } = { x: 5, y: "hello" }; + var x: number; + var y: string; + var { x: a } = { x: 5, y: "hello" }; + var { y: b } = { x: 5, y: "hello" }; + var { x: a, y: b } = { x: 5, y: "hello" }; + var a: number; + var b: string; + } + + function f3() { + var [x, [y, [z]]] = [1, ["hello", [true]]]; + var x: number; + var y: string; + var z: boolean; + } + + function f4() { + var { a: x, b: { a: y, b: { a: z }}} = { a: 1, b: { a: "hello", b: { a: true } } }; + var x: number; + var y: string; + var z: boolean; + } + + function f6() { + var [x = 0, y = ""] = [1, "hello"]; + var x: number; + var y: string; + } + + function f7() { + var [x = 0, y = 1] = [1, "hello"]; // Error, initializer for y must be string + ~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + var x: number; + var y: string; + } + + function f8() { + var [a, b, c] = []; // Ok, [] is an array + var [d, e, f] = [1]; // Error, [1] is a tuple + ~ +!!! error TS2460: Type '[number]' has no property '1'. + ~ +!!! error TS2460: Type '[number]' has no property '2'. + } + + function f9() { + var [a, b] = {}; // Error, not array type + ~~~~~~ +!!! error TS2461: Type '{ [x: number]: undefined; }' is not an array type. + var [c, d] = { 0: 10, 1: 20 }; // Error, not array type + ~~~~~~ +!!! error TS2461: Type '{ [x: number]: number; 0: number; 1: number; }' is not an array type. + var [e, f] = [10, 20]; + } + + function f10() { + var { a, b } = {}; // Error + ~ +!!! error TS2459: Type '{}' has no property 'a' and no string index signature. + ~ +!!! error TS2459: Type '{}' has no property 'b' and no string index signature. + var { a, b } = []; // Error + ~ +!!! error TS2459: Type 'undefined[]' has no property 'a' and no string index signature. + ~ +!!! error TS2459: Type 'undefined[]' has no property 'b' and no string index signature. + } + + function f11() { + var { x: a, y: b } = { x: 10, y: "hello" }; + var { 0: a, 1: b } = { 0: 10, 1: "hello" }; + var { "<": a, ">": b } = { "<": 10, ">": "hello" }; + var { 0: a, 1: b } = [10, "hello"]; + var a: number; + var b: string; + } + + function f12() { + var [a, [b, { x, y: c }] = ["abc", { x: 10, y: false }]] = [1, ["hello", { x: 5, y: true }]]; + var a: number; + var b: string; + var x: number; + var c: boolean; + } + + function f13() { + var [x, y] = [1, "hello"]; + var [a, b] = [[x, y], { x: x, y: y }]; + } + + function f14([a = 1, [b = "hello", { x, y: c = false }]]) { + var a: number; + var b: string; + var c: boolean; + } + f14([2, ["abc", { x: 0, y: true }]]); + f14([2, ["abc", { x: 0 }]]); + f14([2, ["abc", { y: false }]]); // Error, no x + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '[number, [string, { y: boolean; }]]' is not assignable to parameter of type '[number, [string, { x: any; y?: boolean; }]]'. +!!! error TS2345: Types of property '1' are incompatible. +!!! error TS2345: Type '[string, { y: boolean; }]' is not assignable to type '[string, { x: any; y?: boolean; }]'. +!!! error TS2345: Types of property '1' are incompatible. +!!! error TS2345: Type '{ y: boolean; }' is not assignable to type '{ x: any; y?: boolean; }'. +!!! error TS2345: Property 'x' is missing in type '{ y: boolean; }'. + + module M { + export var [a, b] = [1, 2]; + } + + function f15() { + var a = "hello"; + var b = 1; + var c = true; + return { a, b, c }; + } + + function f16() { + var { a, b, c } = f15(); + } + + function f17({ a = "", b = 0, c = false }) { + } + + f17({}); + f17({ a: "hello" }); + f17({ c: true }); + f17(f15()); + + function g4() { + var a: number; + var b: string; + var aa: number[]; + ({ a, b } = { a, b }); + ({ a, b } = { b, a }); + [aa[0], b] = [a, b]; + [a, b] = [b, a]; // Error + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + ~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + [a = 1, b = "abc"] = [2, "def"]; + } + + function g5() { + var a, b; + [a, b] = [1, 2]; + [a, b] = [b, a]; + ({ a, b } = { b, a }); + [[a, b] = [1, 2]] = [[2, 3]]; + var x = ([a, b] = [1, 2]); + } + \ No newline at end of file diff --git a/tests/baselines/reference/declarationsAndAssignments.js b/tests/baselines/reference/declarationsAndAssignments.js new file mode 100644 index 0000000000..ba2e74dc42 --- /dev/null +++ b/tests/baselines/reference/declarationsAndAssignments.js @@ -0,0 +1,288 @@ +//// [declarationsAndAssignments.ts] +function f0() { + var [] = [1, "hello"]; + var [x] = [1, "hello"]; + var [x, y] = [1, "hello"]; + var [x, y, z] = [1, "hello"]; // Error + var [,, z] = [0, 1, 2]; + var x: number; + var y: string; +} + +function f1() { + var a = [1, "hello"]; + var [x] = a; + var [x, y] = a; + var [x, y, z] = a; + var x: number | string; + var y: number | string; + var z: number | string; +} + +function f2() { + var { } = { x: 5, y: "hello" }; + var { x } = { x: 5, y: "hello" }; + var { y } = { x: 5, y: "hello" }; + var { x, y } = { x: 5, y: "hello" }; + var x: number; + var y: string; + var { x: a } = { x: 5, y: "hello" }; + var { y: b } = { x: 5, y: "hello" }; + var { x: a, y: b } = { x: 5, y: "hello" }; + var a: number; + var b: string; +} + +function f3() { + var [x, [y, [z]]] = [1, ["hello", [true]]]; + var x: number; + var y: string; + var z: boolean; +} + +function f4() { + var { a: x, b: { a: y, b: { a: z }}} = { a: 1, b: { a: "hello", b: { a: true } } }; + var x: number; + var y: string; + var z: boolean; +} + +function f6() { + var [x = 0, y = ""] = [1, "hello"]; + var x: number; + var y: string; +} + +function f7() { + var [x = 0, y = 1] = [1, "hello"]; // Error, initializer for y must be string + var x: number; + var y: string; +} + +function f8() { + var [a, b, c] = []; // Ok, [] is an array + var [d, e, f] = [1]; // Error, [1] is a tuple +} + +function f9() { + var [a, b] = {}; // Error, not array type + var [c, d] = { 0: 10, 1: 20 }; // Error, not array type + var [e, f] = [10, 20]; +} + +function f10() { + var { a, b } = {}; // Error + var { a, b } = []; // Error +} + +function f11() { + var { x: a, y: b } = { x: 10, y: "hello" }; + var { 0: a, 1: b } = { 0: 10, 1: "hello" }; + var { "<": a, ">": b } = { "<": 10, ">": "hello" }; + var { 0: a, 1: b } = [10, "hello"]; + var a: number; + var b: string; +} + +function f12() { + var [a, [b, { x, y: c }] = ["abc", { x: 10, y: false }]] = [1, ["hello", { x: 5, y: true }]]; + var a: number; + var b: string; + var x: number; + var c: boolean; +} + +function f13() { + var [x, y] = [1, "hello"]; + var [a, b] = [[x, y], { x: x, y: y }]; +} + +function f14([a = 1, [b = "hello", { x, y: c = false }]]) { + var a: number; + var b: string; + var c: boolean; +} +f14([2, ["abc", { x: 0, y: true }]]); +f14([2, ["abc", { x: 0 }]]); +f14([2, ["abc", { y: false }]]); // Error, no x + +module M { + export var [a, b] = [1, 2]; +} + +function f15() { + var a = "hello"; + var b = 1; + var c = true; + return { a, b, c }; +} + +function f16() { + var { a, b, c } = f15(); +} + +function f17({ a = "", b = 0, c = false }) { +} + +f17({}); +f17({ a: "hello" }); +f17({ c: true }); +f17(f15()); + +function g4() { + var a: number; + var b: string; + var aa: number[]; + ({ a, b } = { a, b }); + ({ a, b } = { b, a }); + [aa[0], b] = [a, b]; + [a, b] = [b, a]; // Error + [a = 1, b = "abc"] = [2, "def"]; +} + +function g5() { + var a, b; + [a, b] = [1, 2]; + [a, b] = [b, a]; + ({ a, b } = { b, a }); + [[a, b] = [1, 2]] = [[2, 3]]; + var x = ([a, b] = [1, 2]); +} + + +//// [declarationsAndAssignments.js] +function f0() { + var _a = [1, "hello"]; + var x = ([1, "hello"])[0]; + var _b = [1, "hello"], x = _b[0], y = _b[1]; + var _c = [1, "hello"], x = _c[0], y = _c[1], z = _c[2]; // Error + var _d = [0, 1, 2], z = _d[2]; + var x; + var y; +} +function f1() { + var a = [1, "hello"]; + var x = a[0]; + var x = a[0], y = a[1]; + var x = a[0], y = a[1], z = a[2]; + var x; + var y; + var z; +} +function f2() { + var _a = { x: 5, y: "hello" }; + var x = ({ x: 5, y: "hello" }).x; + var y = ({ x: 5, y: "hello" }).y; + var _b = { x: 5, y: "hello" }, x = _b.x, y = _b.y; + var x; + var y; + var a = ({ x: 5, y: "hello" }).x; + var b = ({ x: 5, y: "hello" }).y; + var _c = { x: 5, y: "hello" }, a = _c.x, b = _c.y; + var a; + var b; +} +function f3() { + var _a = [1, ["hello", [true]]], x = _a[0], _b = _a[1], y = _b[0], z = _b[1][0]; + var x; + var y; + var z; +} +function f4() { + var _a = { a: 1, b: { a: "hello", b: { a: true } } }, x = _a.a, _b = _a.b, y = _b.a, z = _b.b.a; + var x; + var y; + var z; +} +function f6() { + var _a = [1, "hello"], _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? "" : _c; + var x; + var y; +} +function f7() { + var _a = [1, "hello"], _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? 1 : _c; // Error, initializer for y must be string + var x; + var y; +} +function f8() { + var _a = [], a = _a[0], b = _a[1], c = _a[2]; // Ok, [] is an array + var _b = [1], d = _b[0], e = _b[1], f = _b[2]; // Error, [1] is a tuple +} +function f9() { + var _a = {}, a = _a[0], b = _a[1]; // Error, not array type + var _b = { 0: 10, 1: 20 }, c = _b[0], d = _b[1]; // Error, not array type + var _c = [10, 20], e = _c[0], f = _c[1]; +} +function f10() { + var _a = {}, a = _a.a, b = _a.b; // Error + var _b = [], a = _b.a, b = _b.b; // Error +} +function f11() { + var _a = { x: 10, y: "hello" }, a = _a.x, b = _a.y; + var _b = { 0: 10, 1: "hello" }, a = _b[0], b = _b[1]; + var _c = { "<": 10, ">": "hello" }, a = _c["<"], b = _c[">"]; + var _d = [10, "hello"], a = _d[0], b = _d[1]; + var a; + var b; +} +function f12() { + var _a = [1, ["hello", { x: 5, y: true }]], a = _a[0], _b = _a[1], _c = _b === void 0 ? ["abc", { x: 10, y: false }] : _b, b = _c[0], _d = _c[1], x = _d.x, c = _d.y; + var a; + var b; + var x; + var c; +} +function f13() { + var _a = [1, "hello"], x = _a[0], y = _a[1]; + var _b = [[x, y], { x: x, y: y }], a = _b[0], b = _b[1]; +} +function f14(_a) { + var _b = _a[0], a = _b === void 0 ? 1 : _b, _c = _a[1], _d = _c[0], b = _d === void 0 ? "hello" : _d, _e = _c[1], x = _e.x, _f = _e.y, c = _f === void 0 ? false : _f; + var a; + var b; + var c; +} +f14([2, ["abc", { x: 0, y: true }]]); +f14([2, ["abc", { x: 0 }]]); +f14([2, ["abc", { y: false }]]); // Error, no x +var M; +(function (M) { + _a = [1, 2], M.a = _a[0], M.b = _a[1]; + var _a; +})(M || (M = {})); +function f15() { + var a = "hello"; + var b = 1; + var c = true; + return { a: a, b: b, c: c }; +} +function f16() { + var _a = f15(), a = _a.a, b = _a.b, c = _a.c; +} +function f17(_a) { + var _b = _a.a, a = _b === void 0 ? "" : _b, _c = _a.b, b = _c === void 0 ? 0 : _c, _d = _a.c, c = _d === void 0 ? false : _d; +} +f17({}); +f17({ a: "hello" }); +f17({ c: true }); +f17(f15()); +function g4() { + var a; + var b; + var aa; + (_a = { a: a, b: b }, a = _a.a, b = _a.b, _a); + (_b = { b: b, a: a }, a = _b.a, b = _b.b, _b); + _c = [a, b], aa[0] = _c[0], b = _c[1]; + _d = [b, a], a = _d[0], b = _d[1]; // Error + _e = [2, "def"], _f = _e[0], a = _f === void 0 ? 1 : _f, _g = _e[1], b = _g === void 0 ? "abc" : _g; + var _a, _b, _c, _d, _e, _f, _g; +} +function g5() { + var a, b; + _a = [1, 2], a = _a[0], b = _a[1]; + _b = [b, a], a = _b[0], b = _b[1]; + (_c = { b: b, a: a }, a = _c.a, b = _c.b, _c); + _d = ([[2, 3]])[0], _e = _d === void 0 ? [1, 2] : _d, a = _e[0], b = _e[1]; + var x = (_f = [1, 2], a = _f[0], b = _f[1], _f); + var _a, _b, _c, _d, _e, _f; +} diff --git a/tests/cases/conformance/es6/destructuring/declarationInAmbientContext.ts b/tests/cases/conformance/es6/destructuring/declarationInAmbientContext.ts new file mode 100644 index 0000000000..a3db3753de --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/declarationInAmbientContext.ts @@ -0,0 +1,2 @@ +declare var [a, b]; // Error, destructuring declaration not allowed in ambient context +declare var {c, d}; // Error, destructuring declaration not allowed in ambient context diff --git a/tests/cases/conformance/es6/destructuring/declarationWithNoInitializer.ts b/tests/cases/conformance/es6/destructuring/declarationWithNoInitializer.ts new file mode 100644 index 0000000000..1fb8b07e58 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/declarationWithNoInitializer.ts @@ -0,0 +1,2 @@ +var [a, b]; // Error, no initializer +var {c, d}; // Error, no initializer diff --git a/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts b/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts new file mode 100644 index 0000000000..04cdd153a5 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts @@ -0,0 +1,149 @@ +function f0() { + var [] = [1, "hello"]; + var [x] = [1, "hello"]; + var [x, y] = [1, "hello"]; + var [x, y, z] = [1, "hello"]; // Error + var [,, z] = [0, 1, 2]; + var x: number; + var y: string; +} + +function f1() { + var a = [1, "hello"]; + var [x] = a; + var [x, y] = a; + var [x, y, z] = a; + var x: number | string; + var y: number | string; + var z: number | string; +} + +function f2() { + var { } = { x: 5, y: "hello" }; + var { x } = { x: 5, y: "hello" }; + var { y } = { x: 5, y: "hello" }; + var { x, y } = { x: 5, y: "hello" }; + var x: number; + var y: string; + var { x: a } = { x: 5, y: "hello" }; + var { y: b } = { x: 5, y: "hello" }; + var { x: a, y: b } = { x: 5, y: "hello" }; + var a: number; + var b: string; +} + +function f3() { + var [x, [y, [z]]] = [1, ["hello", [true]]]; + var x: number; + var y: string; + var z: boolean; +} + +function f4() { + var { a: x, b: { a: y, b: { a: z }}} = { a: 1, b: { a: "hello", b: { a: true } } }; + var x: number; + var y: string; + var z: boolean; +} + +function f6() { + var [x = 0, y = ""] = [1, "hello"]; + var x: number; + var y: string; +} + +function f7() { + var [x = 0, y = 1] = [1, "hello"]; // Error, initializer for y must be string + var x: number; + var y: string; +} + +function f8() { + var [a, b, c] = []; // Ok, [] is an array + var [d, e, f] = [1]; // Error, [1] is a tuple +} + +function f9() { + var [a, b] = {}; // Error, not array type + var [c, d] = { 0: 10, 1: 20 }; // Error, not array type + var [e, f] = [10, 20]; +} + +function f10() { + var { a, b } = {}; // Error + var { a, b } = []; // Error +} + +function f11() { + var { x: a, y: b } = { x: 10, y: "hello" }; + var { 0: a, 1: b } = { 0: 10, 1: "hello" }; + var { "<": a, ">": b } = { "<": 10, ">": "hello" }; + var { 0: a, 1: b } = [10, "hello"]; + var a: number; + var b: string; +} + +function f12() { + var [a, [b, { x, y: c }] = ["abc", { x: 10, y: false }]] = [1, ["hello", { x: 5, y: true }]]; + var a: number; + var b: string; + var x: number; + var c: boolean; +} + +function f13() { + var [x, y] = [1, "hello"]; + var [a, b] = [[x, y], { x: x, y: y }]; +} + +function f14([a = 1, [b = "hello", { x, y: c = false }]]) { + var a: number; + var b: string; + var c: boolean; +} +f14([2, ["abc", { x: 0, y: true }]]); +f14([2, ["abc", { x: 0 }]]); +f14([2, ["abc", { y: false }]]); // Error, no x + +module M { + export var [a, b] = [1, 2]; +} + +function f15() { + var a = "hello"; + var b = 1; + var c = true; + return { a, b, c }; +} + +function f16() { + var { a, b, c } = f15(); +} + +function f17({ a = "", b = 0, c = false }) { +} + +f17({}); +f17({ a: "hello" }); +f17({ c: true }); +f17(f15()); + +function g4() { + var a: number; + var b: string; + var aa: number[]; + ({ a, b } = { a, b }); + ({ a, b } = { b, a }); + [aa[0], b] = [a, b]; + [a, b] = [b, a]; // Error + [a = 1, b = "abc"] = [2, "def"]; +} + +function g5() { + var a, b; + [a, b] = [1, 2]; + [a, b] = [b, a]; + ({ a, b } = { b, a }); + [[a, b] = [1, 2]] = [[2, 3]]; + var x = ([a, b] = [1, 2]); +}