description(

"This test checks that JavaScriptCore does not crash when uwinding the stack that includes a host function."

);

function twoHostFunctions() {
    var stack = [];
    stack.push({ "args": twoHostFunctions.arguments });
    stack.push({ "args": twoHostFunctions.arguments });
    testPassed("Two host functions called in a row.");
}

function arrayOperatorFunction(element) {
    return element + 5;
}

var myArray = new Array (0, 1, 2);
function hostCallsUser(array) {
    return array.map(arrayOperatorFunction);
}

function throwException() {
    throw "Exception thrown";
}

function hostAndException() {
    var stack = [];
    stack.push({ "args": hostAndException.arguments });
    throwException();
}

twoHostFunctions();
myArray = hostCallsUser(myArray);
shouldBe(myArray, new Array( 5, 6, 7 ) );

try {
    hostAndException();
} catch (e) {
    testPassed("Exception thrown and caught");
}
