From 9a9e00487f27834579b6276e53ce5eda760986ad Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 16 Jul 2015 16:34:07 -0700 Subject: [PATCH 1/7] Added tests. --- .../es6/destructuring/emptyAssignmentPatterns01_ES5.ts | 6 ++++++ .../es6/destructuring/emptyAssignmentPatterns01_ES6.ts | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts new file mode 100644 index 00000000000..dd10e552615 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES5.ts @@ -0,0 +1,6 @@ +// @target: es5 + +var a: any; + +({} = a); +([] = a); \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts new file mode 100644 index 00000000000..043f0cf1108 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns01_ES6.ts @@ -0,0 +1,6 @@ +// @target: es6 + +var a: any; + +({} = a); +([] = a); \ No newline at end of file From 255fc65410128cb2f0fc8c21daa44e271ff5e6f4 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 16 Jul 2015 16:34:47 -0700 Subject: [PATCH 2/7] Tabs to spaces. --- .../es6/destructuring/emptyArrayBindingPatternParameter01.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter01.ts b/tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter01.ts index 0dea1fe795c..64b198b0916 100644 --- a/tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter01.ts +++ b/tests/cases/conformance/es6/destructuring/emptyArrayBindingPatternParameter01.ts @@ -1,5 +1,5 @@ function f([]) { - var x, y, z; + var x, y, z; } \ No newline at end of file From 895535bd2232b25b0389854c2eee7eb058e9b294 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 16 Jul 2015 16:50:09 -0700 Subject: [PATCH 3/7] Accepted baselines. --- .../emptyArrayBindingPatternParameter01.js | 2 +- .../emptyArrayBindingPatternParameter01.symbols | 8 ++++---- .../emptyArrayBindingPatternParameter01.types | 2 +- .../reference/emptyAssignmentPatterns01_ES5.js | 11 +++++++++++ .../emptyAssignmentPatterns01_ES5.symbols | 11 +++++++++++ .../emptyAssignmentPatterns01_ES5.types | 17 +++++++++++++++++ .../reference/emptyAssignmentPatterns01_ES6.js | 11 +++++++++++ .../emptyAssignmentPatterns01_ES6.symbols | 11 +++++++++++ .../emptyAssignmentPatterns01_ES6.types | 17 +++++++++++++++++ 9 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 tests/baselines/reference/emptyAssignmentPatterns01_ES5.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns01_ES5.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns01_ES5.types create mode 100644 tests/baselines/reference/emptyAssignmentPatterns01_ES6.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns01_ES6.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns01_ES6.types diff --git a/tests/baselines/reference/emptyArrayBindingPatternParameter01.js b/tests/baselines/reference/emptyArrayBindingPatternParameter01.js index 05b59b7d5f2..5723c74f117 100644 --- a/tests/baselines/reference/emptyArrayBindingPatternParameter01.js +++ b/tests/baselines/reference/emptyArrayBindingPatternParameter01.js @@ -2,7 +2,7 @@ function f([]) { - var x, y, z; + var x, y, z; } //// [emptyArrayBindingPatternParameter01.js] diff --git a/tests/baselines/reference/emptyArrayBindingPatternParameter01.symbols b/tests/baselines/reference/emptyArrayBindingPatternParameter01.symbols index 3207ca97dec..f5089ce5850 100644 --- a/tests/baselines/reference/emptyArrayBindingPatternParameter01.symbols +++ b/tests/baselines/reference/emptyArrayBindingPatternParameter01.symbols @@ -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)) } diff --git a/tests/baselines/reference/emptyArrayBindingPatternParameter01.types b/tests/baselines/reference/emptyArrayBindingPatternParameter01.types index e93394b7371..7ef40d52d59 100644 --- a/tests/baselines/reference/emptyArrayBindingPatternParameter01.types +++ b/tests/baselines/reference/emptyArrayBindingPatternParameter01.types @@ -4,7 +4,7 @@ function f([]) { >f : ([]: any[]) => void - var x, y, z; + var x, y, z; >x : any >y : any >z : any diff --git a/tests/baselines/reference/emptyAssignmentPatterns01_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.js new file mode 100644 index 00000000000..97f050ac2c6 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.js @@ -0,0 +1,11 @@ +//// [emptyAssignmentPatterns01_ES5.ts] + +var a: any; + +({} = a); +([] = a); + +//// [emptyAssignmentPatterns01_ES5.js] +var a; +(, a); +(, a); diff --git a/tests/baselines/reference/emptyAssignmentPatterns01_ES5.symbols b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.symbols new file mode 100644 index 00000000000..97752a1358d --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns01_ES5.types b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.types new file mode 100644 index 00000000000..cbc0a25b074 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.types @@ -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 + diff --git a/tests/baselines/reference/emptyAssignmentPatterns01_ES6.js b/tests/baselines/reference/emptyAssignmentPatterns01_ES6.js new file mode 100644 index 00000000000..fe311ac9061 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns01_ES6.js @@ -0,0 +1,11 @@ +//// [emptyAssignmentPatterns01_ES6.ts] + +var a: any; + +({} = a); +([] = a); + +//// [emptyAssignmentPatterns01_ES6.js] +var a; +({} = a); +([] = a); diff --git a/tests/baselines/reference/emptyAssignmentPatterns01_ES6.symbols b/tests/baselines/reference/emptyAssignmentPatterns01_ES6.symbols new file mode 100644 index 00000000000..345bdd52265 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns01_ES6.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns01_ES6.types b/tests/baselines/reference/emptyAssignmentPatterns01_ES6.types new file mode 100644 index 00000000000..c22c0e72854 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns01_ES6.types @@ -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 + From 987dc1f5d0fc23440bd27ace0c5d87175e5eb637 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 16 Jul 2015 17:23:43 -0700 Subject: [PATCH 4/7] Added tests. --- .../es6/destructuring/emptyAssignmentPatterns02_ES5.ts | 7 +++++++ .../es6/destructuring/emptyAssignmentPatterns02_ES6.ts | 7 +++++++ .../es6/destructuring/emptyAssignmentPatterns03_ES5.ts | 6 ++++++ .../es6/destructuring/emptyAssignmentPatterns03_ES6.ts | 6 ++++++ .../es6/destructuring/emptyAssignmentPatterns04_ES5.ts | 7 +++++++ .../es6/destructuring/emptyAssignmentPatterns04_ES6.ts | 7 +++++++ 6 files changed, 40 insertions(+) create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES5.ts create mode 100644 tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES6.ts diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts new file mode 100644 index 00000000000..60fe89758d6 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES5.ts @@ -0,0 +1,7 @@ +// @target: es5 + +var a: any; +let x, y, z, a1, a2, a3; + +({} = { x, y, z } = a); +([] = [ a1, a2, a3] = a); \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts new file mode 100644 index 00000000000..295401545d4 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns02_ES6.ts @@ -0,0 +1,7 @@ +// @target: es6 + +var a: any; +let x, y, z, a1, a2, a3; + +({} = { x, y, z } = a); +([] = [ a1, a2, a3] = a); \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts new file mode 100644 index 00000000000..080c828ad62 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES5.ts @@ -0,0 +1,6 @@ +// @target: es5 + +var a: any; + +({} = {} = a); +([] = [] = a); \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts new file mode 100644 index 00000000000..10d67254cd8 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns03_ES6.ts @@ -0,0 +1,6 @@ +// @target: es6 + +var a: any; + +({} = {} = a); +([] = [] = a); \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES5.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES5.ts new file mode 100644 index 00000000000..0233ddcda70 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES5.ts @@ -0,0 +1,7 @@ +// @target: es5 + +var a: any; +let x, y, z, a1, a2, a3; + +({ x, y, z } = {} = a); +([ a1, a2, a3] = [] = a); \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES6.ts b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES6.ts new file mode 100644 index 00000000000..3380a56aaa7 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/emptyAssignmentPatterns04_ES6.ts @@ -0,0 +1,7 @@ +// @target: es6 + +var a: any; +let x, y, z, a1, a2, a3; + +({ x, y, z } = {} = a); +([ a1, a2, a3] = [] = a); \ No newline at end of file From 0ec38b759004d6040cd0695f4148840832c71e21 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 16 Jul 2015 17:25:00 -0700 Subject: [PATCH 5/7] Accepted baselines. --- .../emptyAssignmentPatterns02_ES5.js | 14 ++++++++ .../emptyAssignmentPatterns02_ES5.symbols | 25 +++++++++++++ .../emptyAssignmentPatterns02_ES5.types | 35 +++++++++++++++++++ .../emptyAssignmentPatterns02_ES6.js | 13 +++++++ .../emptyAssignmentPatterns02_ES6.symbols | 25 +++++++++++++ .../emptyAssignmentPatterns02_ES6.types | 35 +++++++++++++++++++ .../emptyAssignmentPatterns03_ES5.js | 12 +++++++ .../emptyAssignmentPatterns03_ES5.symbols | 11 ++++++ .../emptyAssignmentPatterns03_ES5.types | 21 +++++++++++ .../emptyAssignmentPatterns03_ES6.js | 11 ++++++ .../emptyAssignmentPatterns03_ES6.symbols | 11 ++++++ .../emptyAssignmentPatterns03_ES6.types | 21 +++++++++++ .../emptyAssignmentPatterns04_ES5.js | 14 ++++++++ .../emptyAssignmentPatterns04_ES5.symbols | 25 +++++++++++++ .../emptyAssignmentPatterns04_ES5.types | 35 +++++++++++++++++++ .../emptyAssignmentPatterns04_ES6.js | 13 +++++++ .../emptyAssignmentPatterns04_ES6.symbols | 25 +++++++++++++ .../emptyAssignmentPatterns04_ES6.types | 35 +++++++++++++++++++ 18 files changed, 381 insertions(+) create mode 100644 tests/baselines/reference/emptyAssignmentPatterns02_ES5.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns02_ES5.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns02_ES5.types create mode 100644 tests/baselines/reference/emptyAssignmentPatterns02_ES6.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns02_ES6.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns02_ES6.types create mode 100644 tests/baselines/reference/emptyAssignmentPatterns03_ES5.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns03_ES5.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns03_ES5.types create mode 100644 tests/baselines/reference/emptyAssignmentPatterns03_ES6.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns03_ES6.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns03_ES6.types create mode 100644 tests/baselines/reference/emptyAssignmentPatterns04_ES5.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns04_ES5.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns04_ES5.types create mode 100644 tests/baselines/reference/emptyAssignmentPatterns04_ES6.js create mode 100644 tests/baselines/reference/emptyAssignmentPatterns04_ES6.symbols create mode 100644 tests/baselines/reference/emptyAssignmentPatterns04_ES6.types diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js new file mode 100644 index 00000000000..253d68c8779 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js @@ -0,0 +1,14 @@ +//// [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; +(_a = (x = a.x, y = a.y, z = a.z, a), _a); +(_b = (a1 = a[0], a2 = a[1], a3 = a[2], a), _b); +var _a, _b; diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES5.symbols b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.symbols new file mode 100644 index 00000000000..a575ea35f24 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES5.types b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.types new file mode 100644 index 00000000000..76897f8516e --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.types @@ -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 + diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES6.js b/tests/baselines/reference/emptyAssignmentPatterns02_ES6.js new file mode 100644 index 00000000000..e9783c7e57d --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES6.js @@ -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); diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES6.symbols b/tests/baselines/reference/emptyAssignmentPatterns02_ES6.symbols new file mode 100644 index 00000000000..e55339cb658 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES6.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES6.types b/tests/baselines/reference/emptyAssignmentPatterns02_ES6.types new file mode 100644 index 00000000000..48c9146e154 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES6.types @@ -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 + diff --git a/tests/baselines/reference/emptyAssignmentPatterns03_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.js new file mode 100644 index 00000000000..7c6d39eb0a2 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.js @@ -0,0 +1,12 @@ +//// [emptyAssignmentPatterns03_ES5.ts] + +var a: any; + +({} = {} = a); +([] = [] = a); + +//// [emptyAssignmentPatterns03_ES5.js] +var a; +(_a = (, a), _a); +(_b = (, a), _b); +var _a, _b; diff --git a/tests/baselines/reference/emptyAssignmentPatterns03_ES5.symbols b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.symbols new file mode 100644 index 00000000000..c57365bc7d0 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns03_ES5.types b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.types new file mode 100644 index 00000000000..4f32b0555ef --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.types @@ -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 + diff --git a/tests/baselines/reference/emptyAssignmentPatterns03_ES6.js b/tests/baselines/reference/emptyAssignmentPatterns03_ES6.js new file mode 100644 index 00000000000..95bfdfefa52 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns03_ES6.js @@ -0,0 +1,11 @@ +//// [emptyAssignmentPatterns03_ES6.ts] + +var a: any; + +({} = {} = a); +([] = [] = a); + +//// [emptyAssignmentPatterns03_ES6.js] +var a; +({} = {} = a); +([] = [] = a); diff --git a/tests/baselines/reference/emptyAssignmentPatterns03_ES6.symbols b/tests/baselines/reference/emptyAssignmentPatterns03_ES6.symbols new file mode 100644 index 00000000000..3e32848207a --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns03_ES6.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns03_ES6.types b/tests/baselines/reference/emptyAssignmentPatterns03_ES6.types new file mode 100644 index 00000000000..1f1d005aac5 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns03_ES6.types @@ -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 + diff --git a/tests/baselines/reference/emptyAssignmentPatterns04_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.js new file mode 100644 index 00000000000..10b024352f4 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.js @@ -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; diff --git a/tests/baselines/reference/emptyAssignmentPatterns04_ES5.symbols b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.symbols new file mode 100644 index 00000000000..20ea8c037c3 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns04_ES5.types b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.types new file mode 100644 index 00000000000..5ae2f0674fa --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.types @@ -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 + diff --git a/tests/baselines/reference/emptyAssignmentPatterns04_ES6.js b/tests/baselines/reference/emptyAssignmentPatterns04_ES6.js new file mode 100644 index 00000000000..eabc2678c05 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns04_ES6.js @@ -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); diff --git a/tests/baselines/reference/emptyAssignmentPatterns04_ES6.symbols b/tests/baselines/reference/emptyAssignmentPatterns04_ES6.symbols new file mode 100644 index 00000000000..ee793cd3187 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns04_ES6.symbols @@ -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)) + diff --git a/tests/baselines/reference/emptyAssignmentPatterns04_ES6.types b/tests/baselines/reference/emptyAssignmentPatterns04_ES6.types new file mode 100644 index 00000000000..6bd85593748 --- /dev/null +++ b/tests/baselines/reference/emptyAssignmentPatterns04_ES6.types @@ -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 + From 0bdc79fbb8dc6eced088b795ca4fb16c93ac2c15 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 16 Jul 2015 17:40:07 -0700 Subject: [PATCH 6/7] Only emit the RHS in an empty assignment pattern. --- src/compiler/emitter.ts | 6 +++++- src/compiler/utilities.ts | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 9c8438565e7..2c235f9fdca 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -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 { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index df3f1c9f174..9d7877ca6e3 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1981,6 +1981,17 @@ namespace ts { (node.parent.kind === SyntaxKind.PropertyAccessExpression && (node.parent).name === node); } + export function isEmptyObjectLiteralOrArrayLiteral(expression: Node): boolean { + let kind = expression.kind; + if (kind === SyntaxKind.ObjectLiteralExpression) { + return (expression).properties.length === 0; + } + if (kind === SyntaxKind.ArrayLiteralExpression) { + return (expression).elements.length === 0; + } + return false; + } + export function getLocalSymbolForExportDefault(symbol: Symbol) { return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & NodeFlags.Default) ? symbol.valueDeclaration.localSymbol : undefined; } From 521d83a934f09af859d1942366ff849311287438 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 16 Jul 2015 17:40:53 -0700 Subject: [PATCH 7/7] Accepted baselines. --- tests/baselines/reference/emptyAssignmentPatterns01_ES5.js | 4 ++-- tests/baselines/reference/emptyAssignmentPatterns02_ES5.js | 5 ++--- tests/baselines/reference/emptyAssignmentPatterns03_ES5.js | 5 ++--- tests/baselines/reference/emptyAssignmentPatterns04_ES5.js | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/tests/baselines/reference/emptyAssignmentPatterns01_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.js index 97f050ac2c6..b89db88e5e5 100644 --- a/tests/baselines/reference/emptyAssignmentPatterns01_ES5.js +++ b/tests/baselines/reference/emptyAssignmentPatterns01_ES5.js @@ -7,5 +7,5 @@ var a: any; //// [emptyAssignmentPatterns01_ES5.js] var a; -(, a); -(, a); +(a); +(a); diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js index 253d68c8779..7b9f1f402f9 100644 --- a/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js @@ -9,6 +9,5 @@ let x, y, z, a1, a2, a3; //// [emptyAssignmentPatterns02_ES5.js] var a; var x, y, z, a1, a2, a3; -(_a = (x = a.x, y = a.y, z = a.z, a), _a); -(_b = (a1 = a[0], a2 = a[1], a3 = a[2], a), _b); -var _a, _b; +((x = a.x, y = a.y, z = a.z, a)); +((a1 = a[0], a2 = a[1], a3 = a[2], a)); diff --git a/tests/baselines/reference/emptyAssignmentPatterns03_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.js index 7c6d39eb0a2..d9ff8ba9ede 100644 --- a/tests/baselines/reference/emptyAssignmentPatterns03_ES5.js +++ b/tests/baselines/reference/emptyAssignmentPatterns03_ES5.js @@ -7,6 +7,5 @@ var a: any; //// [emptyAssignmentPatterns03_ES5.js] var a; -(_a = (, a), _a); -(_b = (, a), _b); -var _a, _b; +(a); +(a); diff --git a/tests/baselines/reference/emptyAssignmentPatterns04_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.js index 10b024352f4..7e342d08e39 100644 --- a/tests/baselines/reference/emptyAssignmentPatterns04_ES5.js +++ b/tests/baselines/reference/emptyAssignmentPatterns04_ES5.js @@ -9,6 +9,6 @@ let x, y, z, a1, a2, a3; //// [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); +(_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;