function uint32ToNumberMinusOne() { return (-1) >>> 0; } noInline(uint32ToNumberMinusOne); function uint32ToNumberMinusOnePlusInteger(a) { return ((-1) >>> 0) + a; } noInline(uint32ToNumberMinusOnePlusInteger); function inlineMinusOne() { return -1; } function uint32ToNumberOnHiddenMinusOne() { return inlineMinusOne() >>> 0; } noInline(uint32ToNumberOnHiddenMinusOne); function uint32ToNumberOnHiddenMinusOnePlusInteger(a) { return (inlineMinusOne() >>> 0) + a; } noInline(uint32ToNumberOnHiddenMinusOnePlusInteger); function inlineLargeNegativeNumber1() { return -2251799813685248; } function inlineLargeNegativeNumber2() { return -2251799813685249; } function inlineLargeNegativeNumber3() { return -2251799813685250; } function uint32ToNumberOnHiddenLargeNegativeNumber1() { return inlineLargeNegativeNumber1() >>> 0; } noInline(uint32ToNumberOnHiddenLargeNegativeNumber1); function uint32ToNumberOnHiddenLargeNegativeNumber2() { return inlineLargeNegativeNumber2() >>> 0; } noInline(uint32ToNumberOnHiddenLargeNegativeNumber2); function uint32ToNumberOnHiddenLargeNegativeNumber3() { return inlineLargeNegativeNumber3() >>> 0; } noInline(uint32ToNumberOnHiddenLargeNegativeNumber3); for (let i = 0; i < 1e6; ++i) { if (uint32ToNumberMinusOne() !== 4294967295) throw "Failed uint32ToNumberMinusOne()"; if (uint32ToNumberMinusOnePlusInteger(1) !== 4294967296) throw "Failed uint32ToNumberMinusOnePlusOne()"; if (uint32ToNumberOnHiddenMinusOne() !== 4294967295) throw "Failed uint32ToNumberOnHiddenMinusOne()"; if (uint32ToNumberOnHiddenMinusOnePlusInteger(1) !== 4294967296) throw "Failed uint32ToNumberOnHiddenMinusOnePlusInteger()"; if (uint32ToNumberOnHiddenLargeNegativeNumber1() !== 0) throw "Failed uint32ToNumberOnHiddenLargeNegativeNumber1()"; if (uint32ToNumberOnHiddenLargeNegativeNumber2() !== 4294967295) throw "Failed uint32ToNumberOnHiddenLargeNegativeNumber2()"; if (uint32ToNumberOnHiddenLargeNegativeNumber3() !== 4294967294) throw "Failed uint32ToNumberOnHiddenLargeNegativeNumber3()"; }