tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

set-value-on-accessor-descriptor-with-receiver.js (1431B)


      1 // Copyright (C) 2015 the V8 project authors. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 es6id: 26.1.13
      5 description: >
      6  Set value on an accessor descriptor property with receiver as `this`.
      7 info: |
      8  26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
      9 
     10  ...
     11  4. If receiver is not present, then
     12    a. Let receiver be target.
     13  5. Return target.[[Set]](key, V, receiver).
     14 
     15  9.1.9 [[Set]] ( P, V, Receiver)
     16 
     17  ...
     18  6. Assert: IsAccessorDescriptor(ownDesc) is true.
     19  7. Let setter be ownDesc.[[Set]].
     20  8. If setter is undefined, return false.
     21  9. Let setterResult be Call(setter, Receiver, «V»).
     22  10. ReturnIfAbrupt(setterResult).
     23  11. Return true.
     24 features: [Reflect, Reflect.set]
     25 ---*/
     26 
     27 var args;
     28 var count = 0
     29 var o1 = {};
     30 var receiver = {};
     31 var _receiver;
     32 Object.defineProperty(o1, 'p', {
     33  set: function(a) {
     34    count++;
     35    args = arguments;
     36    _receiver = this;
     37    return false;
     38  }
     39 });
     40 
     41 var result = Reflect.set(o1, 'p', 42, receiver);
     42 assert.sameValue(
     43  result, true,
     44  'returns true if target.p has an accessor descriptor'
     45 );
     46 assert.sameValue(args.length, 1, 'target.p set is called with 1 argument');
     47 assert.sameValue(args[0], 42, 'target.p set is called with V');
     48 assert.sameValue(count, 1, 'target.p set is called once');
     49 assert.sameValue(
     50  _receiver, receiver,
     51  'target.p set is called with receiver as `this`'
     52 );
     53 
     54 reportCompare(0, 0);