Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/js/src/jit-test/tests/warp/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 6 kB image not shown  

Quelle  guard-has-getter-setter.js   Sprache: JAVA

 
// Access property once.
function simple() {
  var obj = {
    get p() {
      return 1;
    }
  };

  // Use objects with different shapes to enter megamorphic state for
  // the JSOp::GetProp opcode.
  var array = [
    Object.create(obj, {a: {value: 1}}),
    Object.create(obj, {b: {value: 2}}),
    Object.create(obj, {c: {value: 3}}),
    Object.create(obj, {d: {value: 4}}),
    Object.create(obj, {e: {value: 5}}),
    Object.create(obj, {f: {value: 6}}),
    Object.create(obj, {g: {value: 7}}),
    Object.create(obj, {h: {value: 8}}),
  ];

  var r = 0;
  for (var i = 0; i < 200; ++i) {
    var o = array[i & 7];
    r += o.p;
  }
  assertEq(r, 200);
}
simple();

// Access property multiple times (consecutive) to test that MGuardHasGetterSetter
// ops can be merged.
function consecutive() {
  var obj = {
    get p() {
      return 1;
    }
  };

  // Use objects with different shapes to enter megamorphic state for
  // the JSOp::GetProp opcode.
  var array = [
    Object.create(obj, {a: {value: 1}}),
    Object.create(obj, {b: {value: 2}}),
    Object.create(obj, {c: {value: 3}}),
    Object.create(obj, {d: {value: 4}}),
    Object.create(obj, {e: {value: 5}}),
    Object.create(obj, {f: {value: 6}}),
    Object.create(obj, {g: {value: 7}}),
    Object.create(obj, {h: {value: 8}}),
  ];

  var r = 0;
  for (var i = 0; i < 200; ++i) {
    var o = array[i & 7];

    r += o.p;
    r += o.p;
    r += o.p;
    r += o.p;
  }
  assertEq(r, 4 * 200);
}
consecutive();

// Access property multiple times (loop) to test LICM.
function loop() {
  var obj = {
    get p() {
      return 1;
    }
  };

  // Use objects with different shapes to enter megamorphic state for
  // the JSOp::GetProp opcode.
  var array = [
    Object.create(obj, {a: {value: 1}}),
    Object.create(obj, {b: {value: 2}}),
    Object.create(obj, {c: {value: 3}}),
    Object.create(obj, {d: {value: 4}}),
    Object.create(obj, {e: {value: 5}}),
    Object.create(obj, {f: {value: 6}}),
    Object.create(obj, {g: {value: 7}}),
    Object.create(obj, {h: {value: 8}}),
  ];

  var r = 0;
  for (var i = 0; i < 200; ++i) {
    var o = array[i & 7];

    for (var j = 0; j < 5; ++j) {
      r += o.p;
    }
  }
  assertEq(r, 5 * 200);
}
loop();

// Bailout when prototype changes.
function modifyProto() {
  var obj = {
    get p() {
      return 1;
    }
  };

  var obj2 = {
    get p() {
      return 2;
    }
  };

  // Use objects with different shapes to enter megamorphic state for
  // the JSOp::GetProp opcode.
  var array = [
    Object.create(obj, {a: {value: 1}}),
    Object.create(obj, {b: {value: 2}}),
    Object.create(obj, {c: {value: 3}}),
    Object.create(obj, {d: {value: 4}}),
    Object.create(obj, {e: {value: 5}}),
    Object.create(obj, {f: {value: 6}}),
    Object.create(obj, {g: {value: 7}}),
    Object.create(obj, {h: {value: 8}}),
  ];

  var r = 0;
  for (var i = 0; i < 200; ++i) {
    var o = array[i & 7];

    r += o.p;

    // Always execute Object.setPrototypeOf() to avoid cold code bailouts,
    // which would happen for conditional code like if-statements. But only
    // actually change |o|'s prototype once.
    var j = (i === 100) | 0;
    var q = [{}, o][j];
    Object.setPrototypeOf(q, obj2);

    r += o.p;
  }
  assertEq(r, 2 * 200 + Math.floor(100 / 8) * 2 + 1);
}
modifyProto();

// Bailout when property is changed to own data property.
function modifyToOwnValue() {
  var obj = {
    get p() {
      return 1;
    }
  };

  // Use objects with different shapes to enter megamorphic state for
  // the JSOp::GetProp opcode.
  var array = [
    Object.create(obj, {a: {value: 1}}),
    Object.create(obj, {b: {value: 2}}),
    Object.create(obj, {c: {value: 3}}),
    Object.create(obj, {d: {value: 4}}),
    Object.create(obj, {e: {value: 5}}),
    Object.create(obj, {f: {value: 6}}),
    Object.create(obj, {g: {value: 7}}),
    Object.create(obj, {h: {value: 8}}),
  ];

  var r = 0;
  for (var i = 0; i < 200; ++i) {
    var o = array[i & 7];

    r += o.p;

    // Always execute Object.setPrototypeOf() to avoid cold code bailouts,
    // which would happen for conditional code like if-statements. But only
    // actually change |o|'s prototype once.
    var j = (i === 100) | 0;
    var q = [{}, o][j];
    Object.defineProperty(q, "p", {value: 2});

    r += o.p;
  }
  assertEq(r, 2 * 200 + Math.floor(100 / 8) * 2 + 1);
}
modifyToOwnValue();

// Bailout when property is changed to own accessor property.
function modifyToOwnAccessor() {
  var obj = {
    get p() {
      return 1;
    }
  };

  // Use objects with different shapes to enter megamorphic state for
  // the JSOp::GetProp opcode.
  var array = [
    Object.create(obj, {a: {value: 1}}),
    Object.create(obj, {b: {value: 2}}),
    Object.create(obj, {c: {value: 3}}),
    Object.create(obj, {d: {value: 4}}),
    Object.create(obj, {e: {value: 5}}),
    Object.create(obj, {f: {value: 6}}),
    Object.create(obj, {g: {value: 7}}),
    Object.create(obj, {h: {value: 8}}),
  ];

  var r = 0;
  for (var i = 0; i < 200; ++i) {
    var o = array[i & 7];

    r += o.p;

    // Always execute Object.setPrototypeOf() to avoid cold code bailouts,
    // which would happen for conditional code like if-statements. But only
    // actually change |o|'s prototype once.
    var j = (i === 100) | 0;
    var q = [{}, o][j];
    Object.defineProperty(q, "p", {get() { return 2; }});

    r += o.p;
  }
  assertEq(r, 2 * 200 + Math.floor(100 / 8) * 2 + 1);
}
modifyToOwnAccessor();

// Bailout when changing accessor.
function modifyProtoAccessor() {
  var obj = {
    get p() {
      return 1;
    }
  };

  // Use objects with different shapes to enter megamorphic state for
  // the JSOp::GetProp opcode.
  var array = [
    Object.create(obj, {a: {value: 1}}),
    Object.create(obj, {b: {value: 2}}),
    Object.create(obj, {c: {value: 3}}),
    Object.create(obj, {d: {value: 4}}),
    Object.create(obj, {e: {value: 5}}),
    Object.create(obj, {f: {value: 6}}),
    Object.create(obj, {g: {value: 7}}),
    Object.create(obj, {h: {value: 8}}),
  ];

  var r = 0;
  for (var i = 0; i < 200; ++i) {
    var o = array[i & 7];

    r += o.p;

    // Always execute Object.setPrototypeOf() to avoid cold code bailouts,
    // which would happen for conditional code like if-statements. But only
    // actually change |o|'s prototype once.
    var j = (i === 100) | 0;
    var q = [{}, obj][j];
    Object.defineProperty(q, "p", {get() { return 2; }});

    r += o.p;
  }
  assertEq(r, 2 * 200 + 100 * 2 - 1);
}
modifyProtoAccessor();

Messung V0.5
C=94 H=94 G=93

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.