Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1043)

Unified Diff: src/compiler/control-builders.cc

Issue 873423004: First stab at try-catch and try-finally in TurboFan. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698