This tests that we can correctly call Function.prototype.call in the DFG, but more precisely, that we give the correct this object in case it is undefined

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS myObject.call() is [myObject, "myObject.call"] on all iterations including after DFG tier-up.
PASS myFunction('arg1') is [this, "myFunction", "arg1"] on all iterations including after DFG tier-up.
PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"] on all iterations including after DFG tier-up.
PASS myFunction.call() is [this, "myFunction", undefined] on all iterations including after DFG tier-up.
PASS myFunction.call(null) is [this, "myFunction", undefined] on all iterations including after DFG tier-up.
PASS myFunction.call(undefined) is [this, "myFunction", undefined] on all iterations including after DFG tier-up.
PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"] on all iterations including after DFG tier-up.
PASS myFunction.aliasedCall() is [this, "myFunction", undefined] on all iterations including after DFG tier-up.
PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined] on all iterations including after DFG tier-up.
PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined] on all iterations including after DFG tier-up.
PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject] on all iterations including after DFG tier-up.
PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"] on all iterations including after DFG tier-up.
PASS successfullyParsed is true

TEST COMPLETE

