tor-browser

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

target-is-non-extensible-existing-accessor-property.js (1297B)


      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 accessor 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  7. Perform ? Call(setter, Receiver, « V »).
     29  8. Return true.
     30 features: [Symbol]
     31 ---*/
     32 
     33 var value1 = 1;
     34 var target1 = Object.preventExtensions({
     35  set foo(val) { value1 = val; },
     36 });
     37 
     38 Object.assign(target1, { foo: 2 });
     39 assert.sameValue(value1, 2);
     40 
     41 
     42 var sym = Symbol();
     43 var value2 = 1;
     44 var target2 = {
     45  set [sym](val) { value2 = val; },
     46 };
     47 
     48 Object.preventExtensions(target2);
     49 Object.assign(target2, { [sym]: 2 });
     50 assert.sameValue(value2, 2);
     51 
     52 reportCompare(0, 0);