tor-browser

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

scripted-getter-setter.js (1555B)


      1 if (getJitCompilerOptions()["ion.warmup.trigger"] > 50)
      2    setJitCompilerOption("ion.warmup.trigger", 50);
      3 
      4 function getObjects() {
      5    var objs = [];
      6 
      7    // Own scripted getter/setter.
      8    objs.push({x: 0, get prop() {
      9        assertJitStackInvariants();
     10        return ++this.x;
     11    }, set prop(v) {
     12        assertJitStackInvariants();
     13        this.x += v;
     14    }});
     15 
     16    // Scripted getter/setter on prototype. Also verify extra formal args are
     17    // handled correctly.
     18    function getter(a, b, c) {
     19        assertEq(arguments.length, 0);
     20        assertEq(a, undefined);
     21        assertEq(b, undefined);
     22        assertEq(c, undefined);
     23        assertJitStackInvariants();
     24        bailout();
     25        return ++this.y;
     26    }
     27    function setter1(a, b) {
     28        assertEq(arguments.length, 1);
     29        assertEq(b, undefined);
     30        assertJitStackInvariants();
     31        this.y = a;
     32        bailout();
     33        return "unused";
     34    }
     35    var proto = {};
     36    Object.defineProperty(proto, "prop", {get: getter, set: setter1});
     37    objs.push(Object.create(proto));
     38 
     39    function setter2() {
     40        assertEq(arguments.length, 1);
     41        assertJitStackInvariants();
     42        this.y = arguments[0];
     43    }
     44    proto = {};
     45    Object.defineProperty(proto, "prop", {get: getter, set: setter2});
     46    objs.push(Object.create(proto));
     47    return objs;
     48 }
     49 function f() {
     50    var objs = getObjects();
     51    var res = 0;
     52    for (var i=0; i<200; i++) {
     53        var o = objs[i % objs.length];
     54        o.prop = 2;
     55        res += o.prop;
     56    }
     57    assertEq(res, 7233);
     58 }
     59 f();