tor-browser

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

bigint-non-primitive.js (2779B)


      1 // Copyright (C) 2017 Josh Wolfe. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 description: Unsigned right shift always throws for non-primitive BigInt values
      5 esid: sec-unsigned-right-shift-operator-runtime-semantics-evaluation
      6 info: |
      7  ShiftExpression : ShiftExpression >>> AdditiveExpression
      8 
      9  1. Let lref be the result of evaluating ShiftExpression.
     10  2. Let lval be ? GetValue(lref).
     11  3. Let rref be the result of evaluating AdditiveExpression.
     12  4. Let rval be ? GetValue(rref).
     13  5. Let lnum be ? ToNumeric(lval).
     14  6. Let rnum be ? ToNumeric(rval).
     15  7. If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
     16  8. Let T be Type(lnum).
     17  9. Return T::unsignedRightShift(lnum, rnum).
     18 
     19  Note: BigInt::unsignedRightShift always throws a TypeError
     20 
     21 features: [BigInt, Symbol.toPrimitive]
     22 ---*/
     23 assert.throws(TypeError, function() {
     24  Object(0b101n) >>> 1n;
     25 }, 'Object(0b101n) >>> 1n throws TypeError');
     26 
     27 assert.throws(TypeError, function() {
     28  Object(0b101n) >>> Object(1n);
     29 }, 'Object(0b101n) >>> Object(1n) throws TypeError');
     30 
     31 function err() {
     32  throw new Test262Error();
     33 }
     34 
     35 assert.throws(TypeError, function() {
     36  ({
     37    [Symbol.toPrimitive]: function() {
     38      return 0b101n;
     39    },
     40 
     41    valueOf: err,
     42    toString: err
     43  }) >>> 1n;
     44 }, '({[Symbol.toPrimitive]: function() {return 0b101n;}, valueOf: err, toString: err}) >>> 1n throws TypeError');
     45 
     46 assert.throws(TypeError, function() {
     47  ({
     48    valueOf: function() {
     49      return 0b101n;
     50    },
     51 
     52    toString: err
     53  }) >>> 1n;
     54 }, '({valueOf: function() {return 0b101n;}, toString: err}) >>> 1n throws TypeError');
     55 
     56 assert.throws(TypeError, function() {
     57  ({
     58    toString: function() {
     59      return 0b101n;
     60    }
     61  }) >>> 1n;
     62 }, '({toString: function() {return 0b101n;}}) >>> 1n throws TypeError');
     63 
     64 assert.throws(TypeError, function() {
     65  0b101n >>> {
     66    [Symbol.toPrimitive]: function() {
     67      return 1n;
     68    },
     69 
     70    valueOf: err,
     71    toString: err
     72  };
     73 }, '0b101n >>> {[Symbol.toPrimitive]: function() {return 1n;}, valueOf: err, toString: err} throws TypeError');
     74 
     75 assert.throws(TypeError, function() {
     76  0b101n >>> {
     77    valueOf: function() {
     78      return 1n;
     79    },
     80 
     81    toString: err
     82  };
     83 }, '0b101n >>> {valueOf: function() {return 1n;}, toString: err} throws TypeError');
     84 
     85 assert.throws(TypeError, function() {
     86  0b101n >>> {
     87    toString: function() {
     88      return 1n;
     89    }
     90  };
     91 }, '0b101n >>> {toString: function() {return 1n;}} throws TypeError');
     92 
     93 assert.throws(TypeError, function() {
     94  ({
     95    valueOf: function() {
     96      return 0b101n;
     97    }
     98  }) >>> {
     99    valueOf: function() {
    100      return 1n;
    101    }
    102  };
    103 }, '({valueOf: function() {return 0b101n;}}) >>> {valueOf: function() {return 1n;}} throws TypeError');
    104 
    105 reportCompare(0, 0);