| "use strict" |
| |
| function unreachableCodeTest() { |
| var a; |
| |
| var b = null; |
| if (b) { |
| a = 5; |
| } |
| return a == b; |
| } |
| noInline(unreachableCodeTest); |
| |
| for (let i = 0; i < 1e4; ++i) { |
| if (!unreachableCodeTest()) |
| throw "Failed unreachableCodeTest() with i = " + i; |
| } |
| |
| |
| function inlinedCompareToNull(a) { |
| return a == null; |
| } |
| |
| function inlinedComparedToUndefined(a) { |
| return a == undefined; |
| } |
| |
| // Warmup. Litter the profile with every types. |
| function warmupInlineFunctions() { |
| let returnValue = 0; |
| for (let i = 0; i < 1e4; ++i) { |
| returnValue += inlinedCompareToNull("foo"); |
| returnValue += inlinedCompareToNull(null); |
| returnValue += inlinedCompareToNull(Math); |
| returnValue += inlinedCompareToNull(5); |
| returnValue += inlinedCompareToNull(5.5); |
| |
| returnValue += inlinedComparedToUndefined("foo"); |
| returnValue += inlinedComparedToUndefined(null); |
| returnValue += inlinedComparedToUndefined(Math); |
| returnValue += inlinedComparedToUndefined(5); |
| returnValue += inlinedComparedToUndefined(5.5); |
| } |
| return returnValue; |
| } |
| noInline(warmupInlineFunctions); |
| warmupInlineFunctions(); |
| |
| function testInlineFunctions(undefinedArg, nullArg) { |
| if (inlinedCompareToNull("foo")) |
| throw "Failed inlinedCompareToNull(\"foo\")"; |
| |
| if (!inlinedCompareToNull(null)) |
| throw "Failed !inlinedCompareToNull(null)"; |
| |
| if (!inlinedCompareToNull(undefined)) |
| throw "Failed !inlinedCompareToNull(undefined)"; |
| |
| if (!inlinedCompareToNull(undefinedArg)) |
| throw "Failed !inlinedCompareToNull(undefinedArg)"; |
| |
| if (!inlinedCompareToNull(nullArg)) |
| throw "Failed !inlinedCompareToNull(nullArg)"; |
| |
| } |
| noInline(testInlineFunctions); |
| |
| for (let i = 0; i < 1e4; ++i) { |
| testInlineFunctions(undefined, null); |
| } |