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

Side by Side Diff: src/interpreter/bytecode-generator.cc

Issue 1665833002: [interpreter] Switch context during stack unwinding. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased. Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « src/frames.cc ('k') | src/isolate.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/interpreter/bytecode-generator.h" 5 #include "src/interpreter/bytecode-generator.h"
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/interpreter/bytecode-register-allocator.h" 9 #include "src/interpreter/bytecode-register-allocator.h"
10 #include "src/interpreter/control-flow-builders.h" 10 #include "src/interpreter/control-flow-builders.h"
(...skipping 1101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1112 1112
1113 1113
1114 void BytecodeGenerator::VisitTryCatchStatement(TryCatchStatement* stmt) { 1114 void BytecodeGenerator::VisitTryCatchStatement(TryCatchStatement* stmt) {
1115 TryCatchBuilder try_control_builder(builder()); 1115 TryCatchBuilder try_control_builder(builder());
1116 Register no_reg; 1116 Register no_reg;
1117 1117
1118 // Preserve the context in a dedicated register, so that it can be restored 1118 // Preserve the context in a dedicated register, so that it can be restored
1119 // when the handler is entered by the stack-unwinding machinery. 1119 // when the handler is entered by the stack-unwinding machinery.
1120 // TODO(mstarzinger): Be smarter about register allocation. 1120 // TODO(mstarzinger): Be smarter about register allocation.
1121 Register context = register_allocator()->NewRegister(); 1121 Register context = register_allocator()->NewRegister();
1122 builder()->MoveRegister(Register::current_context(), context);
1122 1123
1123 // Evaluate the try-block inside a control scope. This simulates a handler 1124 // Evaluate the try-block inside a control scope. This simulates a handler
1124 // that is intercepting 'throw' control commands. 1125 // that is intercepting 'throw' control commands.
1125 try_control_builder.BeginTry(context); 1126 try_control_builder.BeginTry(context);
1126 { 1127 {
1127 ControlScopeForTryCatch scope(this, &try_control_builder); 1128 ControlScopeForTryCatch scope(this, &try_control_builder);
1128 Visit(stmt->try_block()); 1129 Visit(stmt->try_block());
1129 } 1130 }
1130 try_control_builder.EndTry(); 1131 try_control_builder.EndTry();
1131 1132
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 // - BreakStatement/ContinueStatement: Undefined and not used. 1166 // - BreakStatement/ContinueStatement: Undefined and not used.
1166 // - Falling through into finally-block: Undefined and not used. 1167 // - Falling through into finally-block: Undefined and not used.
1167 Register token = register_allocator()->NewRegister(); 1168 Register token = register_allocator()->NewRegister();
1168 Register result = register_allocator()->NewRegister(); 1169 Register result = register_allocator()->NewRegister();
1169 ControlScope::DeferredCommands commands(this, token, result); 1170 ControlScope::DeferredCommands commands(this, token, result);
1170 1171
1171 // Preserve the context in a dedicated register, so that it can be restored 1172 // Preserve the context in a dedicated register, so that it can be restored
1172 // when the handler is entered by the stack-unwinding machinery. 1173 // when the handler is entered by the stack-unwinding machinery.
1173 // TODO(mstarzinger): Be smarter about register allocation. 1174 // TODO(mstarzinger): Be smarter about register allocation.
1174 Register context = register_allocator()->NewRegister(); 1175 Register context = register_allocator()->NewRegister();
1176 builder()->MoveRegister(Register::current_context(), context);
1175 1177
1176 // Evaluate the try-block inside a control scope. This simulates a handler 1178 // Evaluate the try-block inside a control scope. This simulates a handler
1177 // that is intercepting all control commands. 1179 // that is intercepting all control commands.
1178 try_control_builder.BeginTry(context); 1180 try_control_builder.BeginTry(context);
1179 { 1181 {
1180 ControlScopeForTryFinally scope(this, &try_control_builder, &commands); 1182 ControlScopeForTryFinally scope(this, &try_control_builder, &commands);
1181 Visit(stmt->try_block()); 1183 Visit(stmt->try_block());
1182 } 1184 }
1183 try_control_builder.EndTry(); 1185 try_control_builder.EndTry();
1184 1186
(...skipping 1367 matching lines...) Expand 10 before | Expand all | Expand 10 after
2552 } 2554 }
2553 2555
2554 2556
2555 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 2557 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
2556 return info()->feedback_vector()->GetIndex(slot); 2558 return info()->feedback_vector()->GetIndex(slot);
2557 } 2559 }
2558 2560
2559 } // namespace interpreter 2561 } // namespace interpreter
2560 } // namespace internal 2562 } // namespace internal
2561 } // namespace v8 2563 } // namespace v8
OLDNEW
« no previous file with comments | « src/frames.cc ('k') | src/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698