function shouldBe(actual, expected) { if (actual !== expected) throw new Error('bad value: ' + actual); } { let value = { valueOf() { throw new Error("NG"); } }; let error = null; try { 2 ** value; } catch (e) { error = e; } // global, and valueOf. shouldBe(error.stack.split("\n").length, 2); } { let value = { valueOf() { throw new Error("NG"); } }; let error = null; try { value ** 2; } catch (e) { error = e; } // global, and valueOf. shouldBe(error.stack.split("\n").length, 2); } { let value = { valueOf() { throw new Error("NG"); } }; let error = null; try { Math.pow(value, 2); } catch (e) { error = e; } // global, Math.pow, and valueOf. shouldBe(error.stack.split("\n").length, 3); } { let value = { valueOf() { throw new Error("NG"); } }; let error = null; try { Math.pow(2, value); } catch (e) { error = e; } // global, Math.pow, and valueOf. shouldBe(error.stack.split("\n").length, 3); }