43 lines
1.0 KiB
JavaScript
43 lines
1.0 KiB
JavaScript
//@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();
|
|
}
|