Index: src/full-codegen.cc |
diff --git a/src/full-codegen.cc b/src/full-codegen.cc |
index a25669777144553769883aa0d97b6c4b96d261c4..95957d61411ed219736607dd607a23d77b3c7792 100644 |
--- a/src/full-codegen.cc |
+++ b/src/full-codegen.cc |
@@ -1209,11 +1209,14 @@ void FullCodeGenerator::VisitTryCatchStatement(TryCatchStatement* stmt) { |
// Try block code. Sets up the exception handler chain. |
__ bind(&try_entry); |
+ |
+ try_catch_depth_++; |
EnterTryBlock(stmt->index(), &handler_entry); |
{ TryCatch try_body(this); |
Visit(stmt->try_block()); |
} |
ExitTryBlock(stmt->index()); |
+ try_catch_depth_--; |
__ bind(&exit); |
} |
@@ -1428,7 +1431,9 @@ void FullCodeGenerator::VisitThrow(Throw* expr) { |
void FullCodeGenerator::EnterTryBlock(int index, Label* handler) { |
handler_table()->SetRangeStart(index, masm()->pc_offset()); |
- handler_table()->SetRangeHandler(index, handler->pos()); |
+ HandlerTable::CatchPrediction prediction = |
+ try_catch_depth_ > 0 ? HandlerTable::CAUGHT : HandlerTable::UNCAUGHT; |
+ handler_table()->SetRangeHandler(index, handler->pos(), prediction); |
// Determine expression stack depth of try statement. |
int stack_depth = info_->scope()->num_stack_slots(); // Include stack locals. |