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

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 1662983002: [interpreter] add source positions for call and call-new. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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
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-array-builder.h" 5 #include "src/interpreter/bytecode-array-builder.h"
6 6
7 namespace v8 { 7 namespace v8 {
8 namespace internal { 8 namespace internal {
9 namespace interpreter { 9 namespace interpreter {
10 10
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 DISALLOW_COPY_AND_ASSIGN(PreviousBytecodeHelper); 64 DISALLOW_COPY_AND_ASSIGN(PreviousBytecodeHelper);
65 }; 65 };
66 66
67 BytecodeArrayBuilder::BytecodeArrayBuilder(Isolate* isolate, Zone* zone) 67 BytecodeArrayBuilder::BytecodeArrayBuilder(Isolate* isolate, Zone* zone)
68 : isolate_(isolate), 68 : isolate_(isolate),
69 zone_(zone), 69 zone_(zone),
70 bytecodes_(zone), 70 bytecodes_(zone),
71 bytecode_generated_(false), 71 bytecode_generated_(false),
72 constant_array_builder_(isolate, zone), 72 constant_array_builder_(isolate, zone),
73 handler_table_builder_(isolate, zone), 73 handler_table_builder_(isolate, zone),
74 source_position_table_builder_(isolate, zone),
74 last_block_end_(0), 75 last_block_end_(0),
75 last_bytecode_start_(~0), 76 last_bytecode_start_(~0),
76 exit_seen_in_block_(false), 77 exit_seen_in_block_(false),
77 unbound_jumps_(0), 78 unbound_jumps_(0),
78 parameter_count_(-1), 79 parameter_count_(-1),
79 local_register_count_(-1), 80 local_register_count_(-1),
80 context_register_count_(-1), 81 context_register_count_(-1),
81 temporary_register_count_(0), 82 temporary_register_count_(0),
82 free_temporaries_(zone), 83 free_temporaries_(zone),
83 register_translator_(this) {} 84 register_translator_(this) {}
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray() { 147 Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray() {
147 DCHECK_EQ(bytecode_generated_, false); 148 DCHECK_EQ(bytecode_generated_, false);
148 EnsureReturn(); 149 EnsureReturn();
149 150
150 int bytecode_size = static_cast<int>(bytecodes_.size()); 151 int bytecode_size = static_cast<int>(bytecodes_.size());
151 int register_count = 152 int register_count =
152 fixed_and_temporary_register_count() + translation_register_count(); 153 fixed_and_temporary_register_count() + translation_register_count();
153 int frame_size = register_count * kPointerSize; 154 int frame_size = register_count * kPointerSize;
154 Handle<FixedArray> constant_pool = constant_array_builder()->ToFixedArray(); 155 Handle<FixedArray> constant_pool = constant_array_builder()->ToFixedArray();
155 Handle<FixedArray> handler_table = handler_table_builder()->ToHandlerTable(); 156 Handle<FixedArray> handler_table = handler_table_builder()->ToHandlerTable();
157 Handle<FixedArray> source_position_table =
158 source_position_table_builder()->ToFixedArray();
156 Handle<BytecodeArray> output = isolate_->factory()->NewBytecodeArray( 159 Handle<BytecodeArray> output = isolate_->factory()->NewBytecodeArray(
157 bytecode_size, &bytecodes_.front(), frame_size, parameter_count(), 160 bytecode_size, &bytecodes_.front(), frame_size, parameter_count(),
158 constant_pool); 161 constant_pool);
159 output->set_handler_table(*handler_table); 162 output->set_handler_table(*handler_table);
163 output->set_source_position_table(*source_position_table);
160 bytecode_generated_ = true; 164 bytecode_generated_ = true;
161 return output; 165 return output;
162 } 166 }
163 167
164 168
165 template <size_t N> 169 template <size_t N>
166 void BytecodeArrayBuilder::Output(Bytecode bytecode, uint32_t(&operands)[N]) { 170 void BytecodeArrayBuilder::Output(Bytecode bytecode, uint32_t(&operands)[N]) {
167 // Don't output dead code. 171 // Don't output dead code.
168 if (exit_seen_in_block_) return; 172 if (exit_seen_in_block_) return;
169 173
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 BytecodeArrayBuilder& BytecodeArrayBuilder::DeleteLookupSlot() { 1205 BytecodeArrayBuilder& BytecodeArrayBuilder::DeleteLookupSlot() {
1202 Output(Bytecode::kDeleteLookupSlot); 1206 Output(Bytecode::kDeleteLookupSlot);
1203 return *this; 1207 return *this;
1204 } 1208 }
1205 1209
1206 1210
1207 size_t BytecodeArrayBuilder::GetConstantPoolEntry(Handle<Object> object) { 1211 size_t BytecodeArrayBuilder::GetConstantPoolEntry(Handle<Object> object) {
1208 return constant_array_builder()->Insert(object); 1212 return constant_array_builder()->Insert(object);
1209 } 1213 }
1210 1214
1215 void BytecodeArrayBuilder::SetStatementPosition(Statement* stmt) {
1216 if (stmt->position() == RelocInfo::kNoPosition) return;
1217 source_position_table_builder_.AddStatementPosition(bytecodes_.size(),
1218 stmt->position());
1219 }
1220
1221 void BytecodeArrayBuilder::SetExpressionPosition(Expression* expr) {
1222 if (expr->position() == RelocInfo::kNoPosition) return;
1223 source_position_table_builder_.AddExpressionPosition(bytecodes_.size(),
1224 expr->position());
1225 }
1226
1211 void BytecodeArrayBuilder::ForgeTemporaryRegister() { 1227 void BytecodeArrayBuilder::ForgeTemporaryRegister() {
1212 temporary_register_count_++; 1228 temporary_register_count_++;
1213 } 1229 }
1214 1230
1215 int BytecodeArrayBuilder::BorrowTemporaryRegister() { 1231 int BytecodeArrayBuilder::BorrowTemporaryRegister() {
1216 if (free_temporaries_.empty()) { 1232 if (free_temporaries_.empty()) {
1217 ForgeTemporaryRegister(); 1233 ForgeTemporaryRegister();
1218 return last_temporary_register().index(); 1234 return last_temporary_register().index();
1219 } else { 1235 } else {
1220 auto pos = free_temporaries_.begin(); 1236 auto pos = free_temporaries_.begin();
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 } 1829 }
1814 1830
1815 // static 1831 // static
1816 bool BytecodeArrayBuilder::FitsInReg16OperandUntranslated(Register value) { 1832 bool BytecodeArrayBuilder::FitsInReg16OperandUntranslated(Register value) {
1817 return value.is_short_operand(); 1833 return value.is_short_operand();
1818 } 1834 }
1819 1835
1820 } // namespace interpreter 1836 } // namespace interpreter
1821 } // namespace internal 1837 } // namespace internal
1822 } // namespace v8 1838 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698