tor-browser

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

spread-call-eval.js (1307B)


      1 load(libdir + "asserts.js");
      2 load(libdir + "iteration.js");
      3 
      4 assertEq(eval(...[]), undefined);
      5 assertEq(eval(...["1 + 2"]), 3);
      6 
      7 let a = 10, b = 1;
      8 assertEq(eval(...["a + b"]), 11);
      9 
     10 (function() {
     11  let a = 20;
     12  assertEq(eval(...["a + b"]), 21);
     13 })();
     14 
     15 with ({ a: 30 }) {
     16  assertEq(eval(...["a + b"]), 31);
     17 }
     18 
     19 let line0 = Error().lineNumber;
     20 try {             // line0 + 1
     21  eval(...["("]); // line0 + 2
     22 } catch (e) {
     23  assertEq(e.lineNumber, 1);
     24 }
     25 
     26 // other iterable objects
     27 assertEq(eval(...["a + b"][Symbol.iterator]()), 11);
     28 assertEq(eval(...new Set(["a + b"])), 11);
     29 let itr = {};
     30 itr[Symbol.iterator] = function() {
     31    return {
     32        i: 0,
     33        next: function() {
     34            this.i++;
     35            if (this.i == 1)
     36                return { value: "a + b", done: false };
     37            else
     38                return { value: undefined, done: true };
     39        }
     40    };
     41 };
     42 assertEq(eval(...itr), 11);
     43 function* gen() {
     44    yield "a + b";
     45 }
     46 assertEq(eval(...gen()), 11);
     47 
     48 let c = ["C"], d = "D";
     49 assertEq(eval(...c=["c[0] + d"]), "c[0] + dD");
     50 
     51 // 12.2.4.1.2 Runtime Semantics: ArrayAccumulation
     52 // If Type(spreadObj) is not Object, then throw a TypeError exception.
     53 assertThrowsInstanceOf(() => eval("a + b", ...null), TypeError);
     54 assertThrowsInstanceOf(() => eval("a + b", ...undefined), TypeError);