20 lines
912 B
JavaScript
20 lines
912 B
JavaScript
function assertCallerName(expectedName) {
|
|
const { caller } = assertCallerName;
|
|
if (typeof caller !== "function")
|
|
throw new Error("caller should be a function!");
|
|
if (caller.name !== expectedName)
|
|
throw new Error(`caller.name should be "${expectedName}"! Got "${caller.name}" instead.`);
|
|
}
|
|
|
|
(function sameRealm() { assertCallerName("sameRealm"); })();
|
|
(function sameRealmViaCall() { assertCallerName.call(null, "sameRealmViaCall"); })();
|
|
(function sameRealmViaApply() { assertCallerName.apply(null, ["sameRealmViaApply"]); })();
|
|
|
|
const other = $vm.createGlobalObject();
|
|
other.top = globalThis;
|
|
other.eval(`
|
|
(function crossRealm() { top.assertCallerName("crossRealm"); })();
|
|
(function crossRealmViaCall() { top.assertCallerName.call(null, "crossRealmViaCall"); })();
|
|
(function crossRealmViaApply() { top.assertCallerName.apply(null, ["crossRealmViaApply"]); })();
|
|
`);
|