| function bar(value) { |
| return typeof value; |
| } |
| noInline(bar); |
| |
| function foo(value) { |
| switch (bar(value)) { |
| case "undefined": |
| return 0; |
| case "object": |
| return 1; |
| case "function": |
| return 2; |
| case "boolean": |
| return 3; |
| case "number": |
| return 4; |
| case "string": |
| return 5; |
| default: |
| return 6; |
| } |
| } |
| |
| noInline(foo); |
| |
| function test(value, expected) { |
| var result = foo(value); |
| if (result != expected) |
| throw "Error: bad type code for " + value + ": " + result + " (expected " + expected + ")"; |
| } |
| |
| for (var i = 0; i < 10000; ++i) { |
| test(void 0, 0); |
| test({}, 1); |
| test(function() { return 42; }, 2); |
| test(true, 3); |
| test(42, 4); |
| test(42.5, 4); |
| test("hello", 5); |
| } |