From bef7f988d2a954c44fb4c8f99e91d9122ef275e3 Mon Sep 17 00:00:00 2001
From: Aleksey Shvayka <shvaikalesh@gmail.com>
Date: Fri, 18 Nov 2016 00:26:34 +0200
Subject: [PATCH] Ensure Proxy [[Get]] and [[Set]] pass correct receiver (#792)

* Ensure Proxy [[Get]] passes correct receiver

* add [[Get]] test for proxy in prototype

* diversify how traps are missing

* ensure [[Set]] passes correct receiver

* rename to match other tests

* remove extra tests

* add esid

* add description
---
 .../Proxy/get/trap-is-undefined-receiver.js   | 25 +++++++++++++++++
 .../Proxy/set/trap-is-undefined-receiver.js   | 28 +++++++++++++++++++
 2 files changed, 53 insertions(+)
 create mode 100644 test/built-ins/Proxy/get/trap-is-undefined-receiver.js
 create mode 100644 test/built-ins/Proxy/set/trap-is-undefined-receiver.js

diff --git a/test/built-ins/Proxy/get/trap-is-undefined-receiver.js b/test/built-ins/Proxy/get/trap-is-undefined-receiver.js
new file mode 100644
index 0000000000..8a0a44502f
--- /dev/null
+++ b/test/built-ins/Proxy/get/trap-is-undefined-receiver.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 9.5.8
+esid: sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
+description: >
+	Pass to target's [[Get]] correct receiver if trap is missing
+info: >
+    [[Get]] (P, Receiver)
+
+    7. If trap is undefined, then
+        a. Return ? target.[[Get]](P, Receiver).
+---*/
+
+var target = {
+    get attr() {
+        return this;
+    }
+};
+
+var p = new Proxy(target, { get: null });
+assert.sameValue(p.attr, p);
+
+var pParent = Object.create(new Proxy(target, {}));
+assert.sameValue(pParent.attr, pParent);
diff --git a/test/built-ins/Proxy/set/trap-is-undefined-receiver.js b/test/built-ins/Proxy/set/trap-is-undefined-receiver.js
new file mode 100644
index 0000000000..a82fcdb191
--- /dev/null
+++ b/test/built-ins/Proxy/set/trap-is-undefined-receiver.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 9.5.9
+esid: sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver
+description: >
+	Pass to target's [[Set]] correct receiver if trap is missing
+info: >
+    [[Set]] (P, V, Receiver)
+
+    7. If trap is undefined, then
+        a. Return ? target.[[Set]](P, V, Receiver).
+---*/
+
+var context;
+var target = {
+    set attr(val) {
+        context = this;
+    }
+};
+
+var p = new Proxy(target, { set: null });
+p.attr = 1;
+assert.sameValue(context, p);
+
+var pParent = Object.create(new Proxy(target, {}));
+pParent.attr = 3;
+assert.sameValue(context, pParent);
-- 
GitLab