48 lines
991 B
JavaScript
48 lines
991 B
JavaScript
description("Regression test for https://webkit.org/b/150434.");
|
|
|
|
// This test verifies that we can process an exception thrown from a natively called function
|
|
// that was tail called from a JS function that was native called itself.
|
|
// We use bind to create a native wrapper around JS functions.
|
|
|
|
var myException = "This shouldn't crash!";
|
|
|
|
function bar(a, idx)
|
|
{
|
|
"use strict";
|
|
|
|
if (idx > 0)
|
|
throw myException;
|
|
|
|
return a;
|
|
}
|
|
|
|
boundBar = bar.bind(null, 42);
|
|
|
|
function foo(a, idx)
|
|
{
|
|
"use strict";
|
|
|
|
return boundBar(idx);
|
|
}
|
|
|
|
boundFoo = foo.bind(null, 41);
|
|
|
|
function test()
|
|
{
|
|
for (var i = 0; i < 200000; i++) {
|
|
try {
|
|
if (boundFoo(i) != 42)
|
|
testFailed("Got wrong result from foo()!");
|
|
} catch (e) {
|
|
if (e != myException)
|
|
print(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
noInline(test);
|
|
|
|
test();
|
|
|
|
testPassed("Properly handled an exception from a tail called native function that was called by a native function");
|