function assert(b) { if (!b) throw new Error; } noInline(assert); function getProperties(obj) { let properties = []; for (let name of Object.getOwnPropertyNames(obj)) { properties.push(name); } return properties; } function theFunc(obj, index) { let args = [42, 20]; let functions = getProperties(obj); let func = functions[index % functions.length]; obj[func](...args); } let obj = { valueOf: function (x, y) { assert(x === 42); assert(y === 20); try { } catch (e) {} } }; for (let i = 0; i < 1e5; ++i) { for (let _i = 0; _i < 100; _i++) { } theFunc(obj, 897989); }