Index: src/compiler/control-builders.cc |
diff --git a/src/compiler/control-builders.cc b/src/compiler/control-builders.cc |
index 6cf2905e613e3e6b4837a262cbe1c3588906d606..582723a40c50699d77a15d4f39479afc45ed3d61 100644 |
--- a/src/compiler/control-builders.cc |
+++ b/src/compiler/control-builders.cc |
@@ -147,6 +147,64 @@ void BlockBuilder::EndBlock() { |
break_environment_->Merge(environment()); |
set_environment(break_environment_); |
} |
+ |
+ |
+void TryCatchBuilder::BeginTry() { |
+ catch_environment_ = environment()->CopyAsUnreachable(); |
+ catch_environment_->values()->push_back(nullptr); |
} |
+ |
+ |
+void TryCatchBuilder::Throw(Node* exception) { |
+ environment()->values()->push_back(exception); |
+ catch_environment_->Merge(environment()); |
+ environment()->values()->pop_back(); |
+ environment()->MarkAsUnreachable(); |
} |
-} // namespace v8::internal::compiler |
+ |
+ |
+void TryCatchBuilder::EndTry() { |
+ exit_environment_ = environment(); |
+ exception_node_ = catch_environment_->values()->back(); |
+ catch_environment_->values()->pop_back(); |
+ set_environment(catch_environment_); |
+} |
+ |
+ |
+void TryCatchBuilder::EndCatch() { |
+ exit_environment_->Merge(environment()); |
+ set_environment(exit_environment_); |
+} |
+ |
+ |
+void TryFinallyBuilder::BeginTry() { |
+ finally_environment_ = environment()->CopyAsUnreachable(); |
+ finally_environment_->values()->push_back(nullptr); |
+} |
+ |
+ |
+void TryFinallyBuilder::LeaveTry(Node* token) { |
+ environment()->values()->push_back(token); |
+ finally_environment_->Merge(environment()); |
+ environment()->values()->pop_back(); |
+} |
+ |
+ |
+void TryFinallyBuilder::EndTry(Node* fallthrough_token) { |
+ environment()->values()->push_back(fallthrough_token); |
+ finally_environment_->Merge(environment()); |
+ environment()->values()->pop_back(); |
+ token_node_ = finally_environment_->values()->back(); |
+ finally_environment_->values()->pop_back(); |
+ set_environment(finally_environment_); |
+} |
+ |
+ |
+void TryFinallyBuilder::EndFinally() { |
+ // Nothing to be done here. |
+} |
+ |
+ |
+} // namespace compiler |
+} // namespace internal |
+} // namespace v8 |