|
Lines 468-481
LLINT_SLOW_PATH_DECL(stack_check)
Source/JavaScriptCore/llint/LLIntSlowPaths.cpp_sec1
|
| 468 |
#endif |
468 |
#endif |
| 469 |
|
469 |
|
| 470 |
#endif |
470 |
#endif |
| 471 |
// This stack check is done in the prologue for a function call, and the |
|
|
| 472 |
// CallFrame is not completely set up yet. For example, if the frame needs |
| 473 |
// a lexical environment object, the lexical environment object will only be |
| 474 |
// set up after we start executing the function. If we need to throw a |
| 475 |
// StackOverflowError here, then we need to tell the prologue to start the |
| 476 |
// stack unwinding from the caller frame (which is fully set up) instead. |
| 477 |
// To do that, we return the caller's CallFrame in the second return value. |
| 478 |
// |
| 479 |
// If the stack check succeeds and we don't need to throw the error, then |
471 |
// If the stack check succeeds and we don't need to throw the error, then |
| 480 |
// we'll return 0 instead. The prologue will check for a non-zero value |
472 |
// we'll return 0 instead. The prologue will check for a non-zero value |
| 481 |
// when determining whether to set the callFrame or not. |
473 |
// when determining whether to set the callFrame or not. |
|
Lines 489-495
LLINT_SLOW_PATH_DECL(stack_check)
Source/JavaScriptCore/llint/LLIntSlowPaths.cpp_sec2
|
| 489 |
LLINT_RETURN_TWO(pc, 0); |
481 |
LLINT_RETURN_TWO(pc, 0); |
| 490 |
#endif |
482 |
#endif |
| 491 |
|
483 |
|
| 492 |
exec = exec->callerFrame(vm.topVMEntryFrame); |
|
|
| 493 |
vm.topCallFrame = exec; |
484 |
vm.topCallFrame = exec; |
| 494 |
ErrorHandlingScope errorScope(vm); |
485 |
ErrorHandlingScope errorScope(vm); |
| 495 |
CommonSlowPaths::interpreterThrowInCaller(exec, createStackOverflowError(exec)); |
486 |
CommonSlowPaths::interpreterThrowInCaller(exec, createStackOverflowError(exec)); |