| function foo(i) { |
| switch (i) { |
| case 0: |
| case 1: |
| case 2: |
| case 3: |
| case 4: |
| case 5: |
| case 6: |
| case 7: |
| case 8: |
| case 9: |
| return 42; |
| default: |
| return "error"; |
| } |
| } |
| |
| function bar(p) { |
| if (p) |
| return foo(effectful42() - 42); |
| else |
| return 42; |
| } |
| |
| noInline(bar); |
| |
| function test(p) { |
| var result = bar(p); |
| if (result != 42) |
| throw "Error: bad result: " + result; |
| } |
| |
| // Make sure that the call to foo() looks like it has happened. |
| for (var i = 0; i < 2; ++i) |
| test(true); |
| |
| // Warm up bar and cause inlining, but make sure that foo() doesn't get DFG'd. |
| for (var i = 0; i < 10000; ++i) |
| test(false); |
| |
| // And finally test the switch statement. |
| test(true); |