tor-browser

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

coerce-symbol-to-prim-err.js (1510B)


      1 // Copyright (C) 2016 the V8 project authors. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 esid: sec-addition-operator-plus-runtime-semantics-evaluation
      5 es6id: 12.7.3.1
      6 description: >
      7    Behavior when error thrown by invocation of `Symbol.toPrimitive` method
      8    during coercion
      9 info: |
     10    [...]
     11    5. Let lprim be ? ToPrimitive(lval).
     12    6. Let rprim be ? ToPrimitive(rval).
     13    [...]
     14 
     15    ES6 Section 7.1.1 ToPrimitive ( input [, PreferredType] )
     16 
     17    [...]
     18    4. Let exoticToPrim be GetMethod(input, @@toPrimitive).
     19    5. ReturnIfAbrupt(exoticToPrim).
     20    6. If exoticToPrim is not undefined, then
     21       a. Let result be Call(exoticToPrim, input, «hint»).
     22       b. ReturnIfAbrupt(result).
     23 features: [Symbol.toPrimitive]
     24 ---*/
     25 
     26 var thrower = {};
     27 var counter = {};
     28 var log;
     29 
     30 Object.defineProperty(thrower, Symbol.toPrimitive, {
     31  get: function() {
     32    log += 'accessThrower';
     33    return function() { throw new Test262Error(); };
     34  }
     35 });
     36 Object.defineProperty(counter, Symbol.toPrimitive, {
     37  get: function() {
     38    log += 'accessCounter';
     39    return function() { log += 'callCounter'; };
     40  }
     41 });
     42 
     43 log = '';
     44 
     45 assert.throws(Test262Error, function() {
     46  thrower + counter;
     47 }, 'error thrown by left-hand side');
     48 assert.sameValue(log, 'accessThrower');
     49 
     50 log = '';
     51 
     52 assert.throws(Test262Error, function() {
     53  counter + thrower;
     54 }, 'error thrown by right-hand side');
     55 assert.sameValue(log, 'accessCountercallCounteraccessThrower');
     56 
     57 reportCompare(0, 0);