// Copyright (C) 2019 Alexey Shvayka. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver description: > Ordinary [[Set]] forwards call to Proxy "set" trap with correct arguments. info: | OrdinarySet ( O, P, V, Receiver ) ... 3. Return OrdinarySetWithOwnDescriptor(O, P, V, Receiver, ownDesc). OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc ) ... 2. If ownDesc is undefined, then a. Let parent be ? O.[[GetPrototypeOf]](). b. If parent is not null, then i. Return ? parent.[[Set]](P, V, Receiver). [[Set]] ( P, V, Receiver ) ... 8. Let booleanTrapResult be ! ToBoolean(? Call(trap, handler, « target, P, V, Receiver »)). ... 12. Return true. includes: [proxyTrapsHelper.js] features: [Proxy] ---*/ var _handler, _target, _prop, _value, _receiver; var target = {}; var handler = allowProxyTraps({ set: function(target, prop, value, receiver) { _handler = this; _target = target; _prop = prop; _value = value; _receiver = receiver; return true; }, }); var proxy = new Proxy(target, handler); var receiver = Object.create(proxy); receiver.prop = 'value'; assert.sameValue(_handler, handler, 'handler object is the trap context'); assert.sameValue(_target, target, 'first argument is the target object'); assert.sameValue(_prop, 'prop', 'second argument is the property name'); assert.sameValue(_value, 'value', 'third argument is the new value'); assert.sameValue(_receiver, receiver, 'fourth argument is the receiver object'); reportCompare(0, 0);