| description( |
| "Test method-check related bugs" |
| ); |
| |
| function func2() { } |
| |
| // This test yields PASS, if malloc does not reuse the memory address for the structure of String prototype |
| function func() |
| { |
| String.prototype.a = function() { } |
| String.prototype.b = function() { } |
| |
| if (window.GCController) |
| GCController.collect(); |
| else { |
| // The following 3 lines cause gc() flush on a Debian |
| // Linux machine, but there is no garantee, it works on |
| // any other computer. (Not even another Debian Linux) |
| // If func2() is not called or a much bigger or lower |
| // value than 5000 is chosen, the crash won't happen |
| func2() |
| for (var i = 0; i < 5000; ++i) |
| new Boolean() |
| } |
| |
| var str = "" |
| for (var i = 0; i < 5; ++i) |
| str.a() |
| } |
| |
| func() |
| func() |
| |
| // Test that method caching correctly invalidates (doesn't incorrectly continue to call a previously cached function). |
| var total = 0; |
| function addOne() |
| { |
| ++total; |
| } |
| function addOneHundred() |
| { |
| total+=100; |
| } |
| var totalizer = { |
| makeCall: function(callback) |
| { |
| this.callback = callback; |
| this.callback(); |
| } |
| }; |
| for (var i=0; i<100; ++i) |
| totalizer.makeCall(addOne); |
| totalizer.makeCall(addOneHundred); |
| shouldBe('total', '200'); |
| |
| // Check that we don't assert when method_check is applied to a non-JSFunction |
| for (var i = 0; i < 10000; i++) |
| Array.constructor(1); |