tor-browser

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

target-is-non-extensible-existing-data-property.js (1759B)


      1 // Copyright (C) 2021 Alexey Shvayka. All rights reserved.
      2 // This code is governed by the license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-object.assign
      6 description: >
      7  [[Set]] to existing data property of non-extensible `target` is successful.
      8 info: |
      9  OrdinaryPreventExtensions ( O )
     10 
     11  1. Set O.[[Extensible]] to false.
     12 
     13  Object.assign ( target, ...sources )
     14 
     15  [...]
     16  3. For each element nextSource of sources, do
     17    a. If nextSource is neither undefined nor null, then
     18      [...]
     19      iii. For each element nextKey of keys, do
     20        1. Let desc be ? from.[[GetOwnProperty]](nextKey).
     21        2. If desc is not undefined and desc.[[Enumerable]] is true, then
     22          [...]
     23          b. Perform ? Set(to, nextKey, propValue, true).
     24 
     25  OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
     26 
     27  [...]
     28  3. If IsDataDescriptor(ownDesc) is true, then
     29    [...]
     30    c. Let existingDescriptor be ? Receiver.[[GetOwnProperty]](P).
     31    d. If existingDescriptor is not undefined, then
     32      [...]
     33      iii. Let valueDesc be the PropertyDescriptor { [[Value]]: V }.
     34      iv. Return ? Receiver.[[DefineOwnProperty]](P, valueDesc).
     35 
     36  ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
     37 
     38  [...]
     39  9. If O is not undefined, then
     40    a. For each field of Desc that is present, set the corresponding attribute
     41       of the property named P of object O to the value of the field.
     42  10. Return true.
     43 features: [Symbol]
     44 ---*/
     45 
     46 var target1 = Object.preventExtensions({ foo: 1 });
     47 
     48 Object.assign(target1, { foo: 2 });
     49 assert.sameValue(target1.foo, 2);
     50 
     51 
     52 var sym = Symbol();
     53 var target2 = { [sym]: 1 };
     54 
     55 Object.preventExtensions(target2);
     56 Object.assign(target2, { [sym]: 2 });
     57 assert.sameValue(target2[sym], 2);
     58 
     59 reportCompare(0, 0);