| Index: src/codegen-ia32.cc
|
| ===================================================================
|
| --- src/codegen-ia32.cc (revision 1489)
|
| +++ src/codegen-ia32.cc (working copy)
|
| @@ -2921,31 +2921,33 @@
|
| VisitStatementsAndSpill(node->finally_block()->statements());
|
|
|
| if (has_valid_frame()) {
|
| - JumpTarget exit(this);
|
| // Restore state and return value or faked TOS.
|
| frame_->EmitPop(ecx);
|
| frame_->EmitPop(eax);
|
| + }
|
|
|
| - // Generate code to jump to the right destination for all used
|
| - // formerly shadowing targets. Deallocate each shadow target.
|
| - for (int i = 0; i < shadows.length(); i++) {
|
| - if (shadows[i]->is_bound()) {
|
| - JumpTarget* original = shadows[i]->other_target();
|
| - __ cmp(Operand(ecx), Immediate(Smi::FromInt(JUMPING + i)));
|
| - if (!function_return_is_shadowed_ && i == kReturnShadowIndex) {
|
| - JumpTarget skip(this);
|
| - skip.Branch(not_equal);
|
| - frame_->PrepareForReturn();
|
| - original->Jump();
|
| - skip.Bind();
|
| - } else {
|
| - original->Branch(equal);
|
| - }
|
| + // Generate code to jump to the right destination for all used
|
| + // formerly shadowing targets. Deallocate each shadow target.
|
| + for (int i = 0; i < shadows.length(); i++) {
|
| + if (has_valid_frame() && shadows[i]->is_bound()) {
|
| + JumpTarget* original = shadows[i]->other_target();
|
| + __ cmp(Operand(ecx), Immediate(Smi::FromInt(JUMPING + i)));
|
| + if (!function_return_is_shadowed_ && i == kReturnShadowIndex) {
|
| + JumpTarget skip(this);
|
| + skip.Branch(not_equal);
|
| + frame_->PrepareForReturn();
|
| + original->Jump();
|
| + skip.Bind();
|
| + } else {
|
| + original->Branch(equal);
|
| }
|
| - delete shadows[i];
|
| }
|
| + delete shadows[i];
|
| + }
|
|
|
| + if (has_valid_frame()) {
|
| // Check if we need to rethrow the exception.
|
| + JumpTarget exit(this);
|
| __ cmp(Operand(ecx), Immediate(Smi::FromInt(THROWING)));
|
| exit.Branch(not_equal);
|
|
|
|
|