| Index: src/codegen-arm.cc
|
| ===================================================================
|
| --- src/codegen-arm.cc (revision 399)
|
| +++ src/codegen-arm.cc (working copy)
|
| @@ -3182,6 +3182,12 @@
|
| // --- Finally block ---
|
| __ bind(&finally_block);
|
|
|
| + // We keep a single element on the stack - the (possibly faked)
|
| + // result - while evaluating the finally block. Record it, so that a
|
| + // break/continue crossing this statement can restore the stack.
|
| + const int kFinallyStackSize = 1 * kPointerSize;
|
| + break_stack_height_ += kFinallyStackSize;
|
| +
|
| // Push the state on the stack. If necessary move the state to a
|
| // local variable to avoid having extra values on the stack while
|
| // evaluating the finally block.
|
| @@ -3203,7 +3209,12 @@
|
| }
|
| __ pop(r2);
|
|
|
| - __ pop(r0); // Restore value or faked TOS.
|
| + // Restore return value or faked TOS.
|
| + __ pop(r0);
|
| +
|
| + // Record the fact that the result has been removed from the stack.
|
| + break_stack_height_ -= kFinallyStackSize;
|
| +
|
| // Generate code that jumps to the right destination for all used
|
| // shadow labels.
|
| for (int i = 0; i <= nof_escapes; i++) {
|
|
|