blob: 64b082bb9cd25dbcc76c237f5416df8c739ac0ad [file] [log] [blame]
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");