| 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
|
|
|