tor-browser

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

target-is-frozen-accessor-property-set-succeeds.js (1715B)


      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 accessor property of frozen `target` succeeds.
      8 info: |
      9  SetIntegrityLevel ( O, level )
     10 
     11  [...]
     12  3. Let status be ? O.[[PreventExtensions]]().
     13  [...]
     14  7. Else,
     15    a. Assert: level is frozen.
     16    b. For each element k of keys, do
     17      i. Let currentDesc be ? O.[[GetOwnProperty]](k).
     18      ii. If currentDesc is not undefined, then
     19        1. If IsAccessorDescriptor(currentDesc) is true, then
     20          a. Let desc be the PropertyDescriptor { [[Configurable]]: false }.
     21        [...]
     22        3. Perform ? DefinePropertyOrThrow(O, k, desc).
     23  8. Return true.
     24 
     25  Object.assign ( target, ...sources )
     26 
     27  [...]
     28  3. For each element nextSource of sources, do
     29    a. If nextSource is neither undefined nor null, then
     30      [...]
     31      iii. For each element nextKey of keys, do
     32        1. Let desc be ? from.[[GetOwnProperty]](nextKey).
     33        2. If desc is not undefined and desc.[[Enumerable]] is true, then
     34          [...]
     35          b. Perform ? Set(to, nextKey, propValue, true).
     36 
     37  OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
     38 
     39  [...]
     40  7. Perform ? Call(setter, Receiver, « V »).
     41  8. Return true.
     42 features: [Symbol]
     43 ---*/
     44 
     45 var value1 = 1;
     46 var target1 = {
     47  set foo(val) { value1 = val; },
     48 };
     49 
     50 Object.freeze(target1);
     51 Object.assign(target1, { foo: 2 });
     52 assert.sameValue(value1, 2);
     53 
     54 
     55 var sym = Symbol();
     56 var value2 = 1;
     57 var target2 = Object.freeze({
     58  set [sym](val) { value2 = val; },
     59 });
     60 
     61 Object.freeze(target2);
     62 Object.assign(target2, { [sym]: 2 });
     63 assert.sameValue(value2, 2);
     64 
     65 reportCompare(0, 0);