function ropify(a,b,c) { return a + b + c; } noInline(ropify); function ropify2(a,b,c) { return a + b + c; } noInline(ropify2); let test = new String("test"); for (let i = 0; i < 100000; i++) { if (ropify("a", "b", test) !== "abtest") throw "wrong on warmup"; } String.prototype[Symbol.toPrimitive] = function() { return "changed"; } if (ropify("a", "b", test) !== "abchanged") throw "watchpoint didn't fire"; // Test we don't start doing the wrong thing if the prototype chain has been mucked with. for (let i = 0; i < 100000; i++) { if (ropify2("a", "b", test) !== "abchanged") throw "wrong on warmup"; }