This is an automated email from the ASF dual-hosted git repository.

davisp pushed a commit to reference refs/pull/297/head
in repository https://gitbox.apache.org/repos/asf/couchdb-escodegen.git

commit 37badf382f744fc8de7ba0eeff2fac9480b0813c
Author: Tyler Waters <[email protected]>
AuthorDate: Sat Jun 4 12:30:11 2016 -0700

    Support for defaults when destructuring parameters
    
    Fixes #296
---
 escodegen.js    | 22 ++++++++-----
 test/harmony.js | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 111 insertions(+), 8 deletions(-)

diff --git a/escodegen.js b/escodegen.js
index 0360521..e92b283 100644
--- a/escodegen.js
+++ b/escodegen.js
@@ -980,14 +980,20 @@
         return result;
     };
 
-    CodeGenerator.prototype.generatePropertyKey = function (expr, computed) {
+    CodeGenerator.prototype.generatePropertyKey = function (expr, computed, 
value) {
         var result = [];
 
         if (computed) {
             result.push('[');
         }
 
-        result.push(this.generateExpression(expr, Precedence.Sequence, E_TTT));
+        if (value.type === 'AssignmentPattern') {
+            result.push(this.AssignmentPattern(value, Precedence.Sequence, 
E_TTT));
+        }
+        else {
+            result.push(this.generateExpression(expr, Precedence.Sequence, 
E_TTT));
+        }
+
         if (computed) {
             result.push(']');
         }
@@ -2113,13 +2119,13 @@
             }
             if (expr.kind === 'get' || expr.kind === 'set') {
                 fragment = [
-                    join(expr.kind, this.generatePropertyKey(expr.key, 
expr.computed)),
+                    join(expr.kind, this.generatePropertyKey(expr.key, 
expr.computed, expr.value)),
                     this.generateFunctionBody(expr.value)
                 ];
             } else {
                 fragment = [
                     generateMethodPrefix(expr),
-                    this.generatePropertyKey(expr.key, expr.computed),
+                    this.generatePropertyKey(expr.key, expr.computed, 
expr.value),
                     this.generateFunctionBody(expr.value)
                 ];
             }
@@ -2130,25 +2136,25 @@
             if (expr.kind === 'get' || expr.kind === 'set') {
                 return [
                     expr.kind, noEmptySpace(),
-                    this.generatePropertyKey(expr.key, expr.computed),
+                    this.generatePropertyKey(expr.key, expr.computed, 
expr.value),
                     this.generateFunctionBody(expr.value)
                 ];
             }
 
             if (expr.shorthand) {
-                return this.generatePropertyKey(expr.key, expr.computed);
+                return this.generatePropertyKey(expr.key, expr.computed, 
expr.value);
             }
 
             if (expr.method) {
                 return [
                     generateMethodPrefix(expr),
-                    this.generatePropertyKey(expr.key, expr.computed),
+                    this.generatePropertyKey(expr.key, expr.computed, 
expr.value),
                     this.generateFunctionBody(expr.value)
                 ];
             }
 
             return [
-                this.generatePropertyKey(expr.key, expr.computed),
+                this.generatePropertyKey(expr.key, expr.computed, expr.value),
                 ':' + space,
                 this.generateExpression(expr.value, Precedence.Assignment, 
E_TTT)
             ];
diff --git a/test/harmony.js b/test/harmony.js
index 2087e4f..9941f18 100644
--- a/test/harmony.js
+++ b/test/harmony.js
@@ -510,6 +510,103 @@ data = {
     },
 
     'Object destructuring (and aliasing)':  {
+        '({a = "b", b = {\n        c: "d",\n        e: "f"\n    }} = {}) => 
{\n};': {
+            generateFrom: {
+                type: "ExpressionStatement",
+                expression: {
+                    type: "ArrowFunctionExpression",
+                    id: null,
+                    params: [{
+                        type: "ObjectPattern",
+                        properties: [{
+                            type: "Property",
+                            key: {
+                                type: "Identifier",
+                                name: "a"
+                            },
+                            computed: false,
+                            value: {
+                                type: "AssignmentPattern",
+                                left: {
+                                    type: "Identifier",
+                                    name: "a"
+                                },
+                                right: {
+                                    type: "Literal",
+                                    value: "b",
+                                    raw: "\"b\""
+                                }
+                            },
+                            kind: "init",
+                            method: false,
+                            shorthand: true
+                        }, {
+                            type: "Property",
+                            key: {
+                                type: "Identifier",
+                                name: "b"
+                            },
+                            computed: false,
+                            value: {
+                                type: "AssignmentPattern",
+                                left: {
+                                    type: "Identifier",
+                                    name: "b"
+                                },
+                                right: {
+                                    type: "ObjectExpression",
+                                    properties: [{
+                                        type: "Property",
+                                        key: {
+                                            type: "Identifier",
+                                            name: "c"
+                                        },
+                                        computed: false,
+                                        value: {
+                                            type: "Literal",
+                                            value: "d",
+                                            raw: "\"d\""
+                                        },
+                                        kind: "init",
+                                        method: false,
+                                        shorthand: false
+                                    }, {
+                                        type: "Property",
+                                        key: {
+                                            type: "Identifier",
+                                            name: "e"
+                                        },
+                                        computed: false,
+                                        value: {
+                                            type: "Literal",
+                                            value: "f",
+                                            raw: "\"f\""
+                                        },
+                                        kind: "init",
+                                        method: false,
+                                        shorthand: false
+                                    }]
+                                }
+                            },
+                            kind: "init",
+                            method: false,
+                            shorthand: true
+                        }]
+                    }],
+                    defaults: [{
+                        type: "ObjectExpression",
+                        properties: []
+                    }],
+                    body: {
+                        type: "BlockStatement",
+                        body: []
+                    },
+                    generator: false,
+                    expression: false
+                }
+            }
+        },
+
         'var {\n    a,\n    b: C\n} = {};' : {
             generateFrom: {
                 type: 'Program',

Reply via email to