From b8e92c2341e9a84ea9f479939d230f4f26313e8e Mon Sep 17 00:00:00 2001
From: Caio Lima <ticaiolima@gmail.com>
Date: Fri, 8 Feb 2019 13:07:30 -0200
Subject: [PATCH] Added case to verify invalid syntax when using private field
 on object destructuring

---
 ...private-field-on-object-destructuring.case | 24 ++++++++++++++
 ...r-private-field-on-object-destructuring.js | 33 +++++++++++++++++++
 ...r-private-field-on-object-destructuring.js | 33 +++++++++++++++++++
 3 files changed, 90 insertions(+)
 create mode 100644 src/class-elements/grammar-private-field-on-object-destructuring.case
 create mode 100644 test/language/expressions/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js
 create mode 100644 test/language/statements/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js

diff --git a/src/class-elements/grammar-private-field-on-object-destructuring.case b/src/class-elements/grammar-private-field-on-object-destructuring.case
new file mode 100644
index 0000000000..e2c9bc742a
--- /dev/null
+++ b/src/class-elements/grammar-private-field-on-object-destructuring.case
@@ -0,0 +1,24 @@
+// Copyright (C) 2019 Caio Lima. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Acessing private field from object destructuring pattern is not a valid syntax
+info: |
+  Updated Productions
+
+  ObjectAssignmentPattern[Yield, Await]:
+     {}
+     {AssignmentRestProperty[?Yield, ?Await]}
+     {AssignmentPropertyList[?Yield, ?Await]}
+     {AssignmentPropertyList[?Yield, ?Await],AssignmentRestProperty[?Yield, ?Await]opt}
+template: syntax/invalid
+features: [class-fields-private]
+---*/
+
+//- elements
+#x = 1;
+
+destructureX() {
+  const { #x: x } = this;
+  return x;
+}
diff --git a/test/language/expressions/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js b/test/language/expressions/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js
new file mode 100644
index 0000000000..797499c9f7
--- /dev/null
+++ b/test/language/expressions/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/grammar-private-field-on-object-destructuring.case
+// - src/class-elements/syntax/invalid/cls-expr-elements-invalid-syntax.template
+/*---
+description: Acessing private field from object destructuring pattern is not a valid syntax (class expression)
+esid: prod-ClassElement
+features: [class-fields-private, class]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Updated Productions
+
+    ObjectAssignmentPattern[Yield, Await]:
+       {}
+       {AssignmentRestProperty[?Yield, ?Await]}
+       {AssignmentPropertyList[?Yield, ?Await]}
+       {AssignmentPropertyList[?Yield, ?Await],AssignmentRestProperty[?Yield, ?Await]opt}
+
+---*/
+
+
+$DONOTEVALUATE();
+
+var C = class {
+  #x = 1;
+
+  destructureX() {
+    const { #x: x } = this;
+    return x;
+  }
+};
diff --git a/test/language/statements/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js b/test/language/statements/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js
new file mode 100644
index 0000000000..08a1478906
--- /dev/null
+++ b/test/language/statements/class/elements/syntax/early-errors/grammar-private-field-on-object-destructuring.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/class-elements/grammar-private-field-on-object-destructuring.case
+// - src/class-elements/syntax/invalid/cls-decl-elements-invalid-syntax.template
+/*---
+description: Acessing private field from object destructuring pattern is not a valid syntax (class declaration)
+esid: prod-ClassElement
+features: [class-fields-private, class]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    Updated Productions
+
+    ObjectAssignmentPattern[Yield, Await]:
+       {}
+       {AssignmentRestProperty[?Yield, ?Await]}
+       {AssignmentPropertyList[?Yield, ?Await]}
+       {AssignmentPropertyList[?Yield, ?Await],AssignmentRestProperty[?Yield, ?Await]opt}
+
+---*/
+
+
+$DONOTEVALUATE();
+
+class C {
+  #x = 1;
+
+  destructureX() {
+    const { #x: x } = this;
+    return x;
+  }
+}
-- 
GitLab