| //@requireOptions("--useLLInt=false", "--forceICFailure=true") |
| // Regression test: Ensure that we don't crash when op_get_private_field caching results in |
| // giving up on caching.` |
| |
| function assert(expr, message) { |
| if (!expr) |
| throw new Error(`Assertion Failed: ${message}`); |
| } |
| Object.assign(assert, { |
| equals(actual, expected) { |
| assert(actual === expected, `expected ${expected} but found ${actual}`); |
| }, |
| throws(fn, errorType) { |
| try { |
| fn(); |
| } catch (e) { |
| if (typeof errorType === "function") |
| assert(e instanceof errorType, `expected to throw ${errorType.name} but threw ${e}`); |
| return; |
| } |
| assert(false, `expected to throw, but no exception was thrown.`); |
| } |
| }); |
| |
| class C { |
| #x = 5; |
| get(o) { return o.#x; } |
| } |
| let get = C.prototype.get; |
| function testAccess() { |
| assert.equals(get(new C), 5); |
| } |
| noInline(testAccess); |
| function testThrows() { |
| assert.throws(() => get(globalThis), TypeError); |
| } |
| noInline(testThrows); |
| |
| for (var i = 0; i < 20; ++i) { |
| testAccess(); |
| testThrows(); |
| } |