| // Test that the ClonedArguments created by the Function.arguments will properly |
| // keep its callee alive. This test should not crash and should not print any error |
| // messages. |
| |
| var cachedArguments = []; |
| var numberOfEntries = 1000; |
| |
| function makeTransientFunction(i) { |
| function transientFunc() { |
| cachedArguments[i] = transientFunc.arguments; |
| } |
| return transientFunc; |
| } |
| |
| for (i = 0; i < numberOfEntries; i++) { |
| var transientFunc = makeTransientFunction(i); |
| transientFunc(); |
| // At this point, the only reference to the transient function is from |
| // cachedArguments[i].callee. |
| } |
| |
| gc(); |
| |
| // Allocate a bunch of memory to stomp over the transient functions that may have been |
| // erroneously collected. webkit.org/b/145709 |
| for (i = 0; i < numberOfEntries; i++) { |
| new Object(); |
| } |
| |
| for (i = 0; i < numberOfEntries; i++) { |
| var callee = cachedArguments[i].callee; |
| if (typeof callee != "function") |
| print("ERROR: callee is " + callee); |
| } |