| // Constructing calls should throw if !callee->isInterpretedConstructor(). |
| // This tests the polymorphic call path. |
| |
| for (var i=0; i<20; i++) |
| Function.prototype(); |
| |
| var funs = [ |
| function() { return 1; }, |
| function() { return 2; }, |
| function() { return 3; }, |
| function() { return 4; }, |
| function() { return 5; }, |
| function() { return 6; }, |
| function() { return 7; }, |
| function() { return 8; }, |
| function() { return 9; }, |
| function() { return 10; }, |
| Function.prototype |
| ]; |
| |
| function f(callee) { |
| new callee; |
| } |
| function g() { |
| var c = 0; |
| for (var i=0; i<50; i++) { |
| try { |
| f(funs[i % funs.length]); |
| } catch (e) { |
| assertEq(e.message.includes("not a constructor"), true); |
| c++; |
| } |
| } |
| assertEq(c, 4); |
| } |
| g(); |