tor-browser

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

array-pattern-emulates-undefined.js (1314B)


      1 // Copyright (C) 2020 Alexey Shvayka. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 esid: sec-destructuring-binding-patterns-runtime-semantics-bindinginitialization
      5 description: >
      6  Destructuring initializer is not evaluated when value is an object
      7  with [[IsHTMLDDA]] internal slot.
      8 info: |
      9  BindingPattern : ArrayBindingPattern
     10 
     11  1. Let iteratorRecord be ? GetIterator(value).
     12  2. Let result be IteratorBindingInitialization of ArrayBindingPattern with arguments
     13  iteratorRecord and environment.
     14  3. If iteratorRecord.[[Done]] is false, return ? IteratorClose(iteratorRecord, result).
     15  4. Return result.
     16 
     17  Runtime Semantics: IteratorBindingInitialization
     18 
     19  SingleNameBinding : BindingIdentifier Initializer[opt]
     20 
     21  [...]
     22  5. If Initializer is present and v is undefined, then
     23    [...]
     24  6. If environment is undefined, return ? PutValue(lhs, v).
     25 features: [destructuring-binding, IsHTMLDDA]
     26 ---*/
     27 
     28 var IsHTMLDDA = $262.IsHTMLDDA;
     29 var initCount = 0;
     30 var counter = function() {
     31  initCount += 1;
     32 };
     33 
     34 var x;
     35 ([x = counter()] = [IsHTMLDDA]);
     36 
     37 assert.sameValue(x, IsHTMLDDA);
     38 assert.sameValue(initCount, 0);
     39 
     40 var base = {};
     41 ([base.y = counter()] = [IsHTMLDDA]);
     42 
     43 assert.sameValue(base.y, IsHTMLDDA);
     44 assert.sameValue(initCount, 0);
     45 
     46 reportCompare(0, 0);