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/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 1138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1149 expr->ComputeFlags(true)); | 1149 expr->ComputeFlags(true)); |
1150 Register index, literal; | 1150 Register index, literal; |
1151 | 1151 |
1152 // Evaluate all the non-constant subexpressions and store them into the | 1152 // Evaluate all the non-constant subexpressions and store them into the |
1153 // newly cloned array. | 1153 // newly cloned array. |
1154 bool literal_in_accumulator = true; | 1154 bool literal_in_accumulator = true; |
1155 for (int array_index = 0; array_index < expr->values()->length(); | 1155 for (int array_index = 0; array_index < expr->values()->length(); |
1156 array_index++) { | 1156 array_index++) { |
1157 Expression* subexpr = expr->values()->at(array_index); | 1157 Expression* subexpr = expr->values()->at(array_index); |
1158 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; | 1158 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; |
1159 if (subexpr->IsSpread()) { | 1159 DCHECK(!subexpr->IsSpread()); |
1160 // TODO(rmcilroy): Deal with spread expressions. | |
1161 UNIMPLEMENTED(); | |
1162 } | |
1163 | 1160 |
1164 if (literal_in_accumulator) { | 1161 if (literal_in_accumulator) { |
1165 index = register_allocator()->NewRegister(); | 1162 index = register_allocator()->NewRegister(); |
1166 literal = register_allocator()->NewRegister(); | 1163 literal = register_allocator()->NewRegister(); |
1167 builder()->StoreAccumulatorInRegister(literal); | 1164 builder()->StoreAccumulatorInRegister(literal); |
1168 literal_in_accumulator = false; | 1165 literal_in_accumulator = false; |
1169 } | 1166 } |
1170 | 1167 |
1171 FeedbackVectorSlot slot = expr->LiteralFeedbackSlot(); | 1168 FeedbackVectorSlot slot = expr->LiteralFeedbackSlot(); |
1172 builder() | 1169 builder() |
(...skipping 1000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2173 } | 2170 } |
2174 | 2171 |
2175 | 2172 |
2176 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { | 2173 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { |
2177 return info()->feedback_vector()->GetIndex(slot); | 2174 return info()->feedback_vector()->GetIndex(slot); |
2178 } | 2175 } |
2179 | 2176 |
2180 } // namespace interpreter | 2177 } // namespace interpreter |
2181 } // namespace internal | 2178 } // namespace internal |
2182 } // namespace v8 | 2179 } // namespace v8 |
OLD | NEW |