tor-browser

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

set-value-on-data-descriptor.js (1714B)


      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  Sets the new value.
      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  5. If IsDataDescriptor(ownDesc) is true, then
     19    a. If ownDesc.[[Writable]] is false, return false.
     20    b. If Type(Receiver) is not Object, return false.
     21    c. Let existingDescriptor be Receiver.[[GetOwnProperty]](P).
     22    d. ReturnIfAbrupt(existingDescriptor).
     23    e. If existingDescriptor is not undefined, then
     24      i. If IsAccessorDescriptor(existingDescriptor) is true, return false.
     25      ii. If existingDescriptor.[[Writable]] is false, return false.
     26      iii. Let valueDesc be the PropertyDescriptor{[[Value]]: V}.
     27      iv. Return Receiver.[[DefineOwnProperty]](P, valueDesc).
     28    f. Else Receiver does not currently have a property P,
     29      i. Return CreateDataProperty(Receiver, P, V).
     30  ...
     31 features: [Reflect, Reflect.set]
     32 ---*/
     33 
     34 var o1 = {
     35  p: 43
     36 };
     37 var result = Reflect.set(o1, 'p', 42);
     38 assert.sameValue(result, true, 'returns true on a successful setting');
     39 assert.sameValue(
     40  o1.p, 42,
     41  'sets the new value'
     42 );
     43 
     44 var o2 = {
     45  p: 43
     46 };
     47 var receiver = {
     48  p: 44
     49 };
     50 var result = Reflect.set(o2, 'p', 42, receiver);
     51 assert.sameValue(result, true, 'returns true on a successful setting');
     52 assert.sameValue(o2.p, 43, 'with a receiver, does not set a value on target');
     53 assert.sameValue(receiver.p, 42, 'sets the new value on the receiver');
     54 
     55 reportCompare(0, 0);