| OLD | NEW |
| 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/control-flow-builders.h" | 9 #include "src/interpreter/control-flow-builders.h" |
| 10 #include "src/objects.h" | 10 #include "src/objects.h" |
| (...skipping 1310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1321 int depth = execution_context()->ContextChainDepth(variable->scope()); | 1321 int depth = execution_context()->ContextChainDepth(variable->scope()); |
| 1322 ContextScope* context = execution_context()->Previous(depth); | 1322 ContextScope* context = execution_context()->Previous(depth); |
| 1323 Register context_reg; | 1323 Register context_reg; |
| 1324 if (context) { | 1324 if (context) { |
| 1325 context_reg = context->reg(); | 1325 context_reg = context->reg(); |
| 1326 } else { | 1326 } else { |
| 1327 context_reg = execution_result()->NewRegister(); | 1327 context_reg = execution_result()->NewRegister(); |
| 1328 // Walk the context chain to find the context at the given depth. | 1328 // Walk the context chain to find the context at the given depth. |
| 1329 // TODO(rmcilroy): Perform this work in a bytecode handler once we have | 1329 // TODO(rmcilroy): Perform this work in a bytecode handler once we have |
| 1330 // a generic mechanism for performing jumps in interpreter.cc. | 1330 // a generic mechanism for performing jumps in interpreter.cc. |
| 1331 // TODO(mythria): Also update bytecode graph builder with correct depth |
| 1332 // when this changes. |
| 1331 builder() | 1333 builder() |
| 1332 ->LoadAccumulatorWithRegister(execution_context()->reg()) | 1334 ->LoadAccumulatorWithRegister(execution_context()->reg()) |
| 1333 .StoreAccumulatorInRegister(context_reg); | 1335 .StoreAccumulatorInRegister(context_reg); |
| 1334 for (int i = 0; i < depth; ++i) { | 1336 for (int i = 0; i < depth; ++i) { |
| 1335 builder() | 1337 builder() |
| 1336 ->LoadContextSlot(context_reg, Context::PREVIOUS_INDEX) | 1338 ->LoadContextSlot(context_reg, Context::PREVIOUS_INDEX) |
| 1337 .StoreAccumulatorInRegister(context_reg); | 1339 .StoreAccumulatorInRegister(context_reg); |
| 1338 } | 1340 } |
| 1339 } | 1341 } |
| 1340 builder()->LoadContextSlot(context_reg, variable->index()); | 1342 builder()->LoadContextSlot(context_reg, variable->index()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1397 ContextScope* context = execution_context()->Previous(depth); | 1399 ContextScope* context = execution_context()->Previous(depth); |
| 1398 Register context_reg; | 1400 Register context_reg; |
| 1399 if (context) { | 1401 if (context) { |
| 1400 context_reg = context->reg(); | 1402 context_reg = context->reg(); |
| 1401 } else { | 1403 } else { |
| 1402 Register value_temp = execution_result()->NewRegister(); | 1404 Register value_temp = execution_result()->NewRegister(); |
| 1403 context_reg = execution_result()->NewRegister(); | 1405 context_reg = execution_result()->NewRegister(); |
| 1404 // Walk the context chain to find the context at the given depth. | 1406 // Walk the context chain to find the context at the given depth. |
| 1405 // TODO(rmcilroy): Perform this work in a bytecode handler once we have | 1407 // TODO(rmcilroy): Perform this work in a bytecode handler once we have |
| 1406 // a generic mechanism for performing jumps in interpreter.cc. | 1408 // a generic mechanism for performing jumps in interpreter.cc. |
| 1409 // TODO(mythria): Also update bytecode graph builder with correct depth |
| 1410 // when this changes. |
| 1407 builder() | 1411 builder() |
| 1408 ->StoreAccumulatorInRegister(value_temp) | 1412 ->StoreAccumulatorInRegister(value_temp) |
| 1409 .LoadAccumulatorWithRegister(execution_context()->reg()) | 1413 .LoadAccumulatorWithRegister(execution_context()->reg()) |
| 1410 .StoreAccumulatorInRegister(context_reg); | 1414 .StoreAccumulatorInRegister(context_reg); |
| 1411 for (int i = 0; i < depth; ++i) { | 1415 for (int i = 0; i < depth; ++i) { |
| 1412 builder() | 1416 builder() |
| 1413 ->LoadContextSlot(context_reg, Context::PREVIOUS_INDEX) | 1417 ->LoadContextSlot(context_reg, Context::PREVIOUS_INDEX) |
| 1414 .StoreAccumulatorInRegister(context_reg); | 1418 .StoreAccumulatorInRegister(context_reg); |
| 1415 } | 1419 } |
| 1416 builder()->LoadAccumulatorWithRegister(value_temp); | 1420 builder()->LoadAccumulatorWithRegister(value_temp); |
| (...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2228 } | 2232 } |
| 2229 | 2233 |
| 2230 | 2234 |
| 2231 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { | 2235 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { |
| 2232 return info()->feedback_vector()->GetIndex(slot); | 2236 return info()->feedback_vector()->GetIndex(slot); |
| 2233 } | 2237 } |
| 2234 | 2238 |
| 2235 } // namespace interpreter | 2239 } // namespace interpreter |
| 2236 } // namespace internal | 2240 } // namespace internal |
| 2237 } // namespace v8 | 2241 } // namespace v8 |
| OLD | NEW |