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

Side by Side Diff: src/inspector/wasm-translation.cc

Issue 2655653003: [inspector] Expose GetPossibleBreakpoints for wasm (Closed)
Patch Set: Introduce Init method and clang-format wasm-translation.cc Created 3 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/inspector/v8-debugger-script.cc ('k') | src/runtime/runtime-debug.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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/inspector/wasm-translation.h" 5 #include "src/inspector/wasm-translation.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "src/debug/debug-interface.h" 9 #include "src/debug/debug-interface.h"
10 #include "src/inspector/protocol/Debugger.h" 10 #include "src/inspector/protocol/Debugger.h"
11 #include "src/inspector/script-breakpoint.h" 11 #include "src/inspector/script-breakpoint.h"
12 #include "src/inspector/string-util.h" 12 #include "src/inspector/string-util.h"
13 #include "src/inspector/v8-debugger-agent-impl.h" 13 #include "src/inspector/v8-debugger-agent-impl.h"
14 #include "src/inspector/v8-debugger-script.h" 14 #include "src/inspector/v8-debugger-script.h"
15 #include "src/inspector/v8-debugger.h" 15 #include "src/inspector/v8-debugger.h"
16 #include "src/inspector/v8-inspector-impl.h" 16 #include "src/inspector/v8-inspector-impl.h"
17 17
18 using namespace v8_inspector; 18 using namespace v8_inspector;
19 using namespace v8; 19 using namespace v8;
20 20
21 class WasmTranslation::TranslatorImpl { 21 class WasmTranslation::TranslatorImpl {
22 public: 22 public:
23 struct TransLocation { 23 struct TransLocation {
24 WasmTranslation *translation; 24 WasmTranslation* translation;
25 String16 script_id; 25 String16 script_id;
26 int line; 26 int line;
27 int column; 27 int column;
28 TransLocation(WasmTranslation *translation, String16 script_id, int line, 28 TransLocation(WasmTranslation* translation, String16 script_id, int line,
29 int column) 29 int column)
30 : translation(translation), 30 : translation(translation),
31 script_id(script_id), 31 script_id(script_id),
32 line(line), 32 line(line),
33 column(column) {} 33 column(column) {}
34 }; 34 };
35 35
36 virtual void Translate(TransLocation *loc) = 0; 36 virtual void Init(Isolate*, WasmTranslation*, V8DebuggerAgentImpl*) = 0;
37 virtual void TranslateBack(TransLocation *loc) = 0; 37 virtual void Translate(TransLocation*) = 0;
38 virtual void TranslateBack(TransLocation*) = 0;
38 39
39 class RawTranslator; 40 class RawTranslator;
40 class DisassemblingTranslator; 41 class DisassemblingTranslator;
41 }; 42 };
42 43
43 class WasmTranslation::TranslatorImpl::RawTranslator 44 class WasmTranslation::TranslatorImpl::RawTranslator
44 : public WasmTranslation::TranslatorImpl { 45 : public WasmTranslation::TranslatorImpl {
45 public: 46 public:
46 void Translate(TransLocation *loc) {} 47 void Init(Isolate*, WasmTranslation*, V8DebuggerAgentImpl*) {}
47 void TranslateBack(TransLocation *loc) {} 48 void Translate(TransLocation*) {}
49 void TranslateBack(TransLocation*) {}
48 }; 50 };
49 51
50 class WasmTranslation::TranslatorImpl::DisassemblingTranslator 52 class WasmTranslation::TranslatorImpl::DisassemblingTranslator
51 : public WasmTranslation::TranslatorImpl { 53 : public WasmTranslation::TranslatorImpl {
52 using OffsetTable = debug::WasmDisassembly::OffsetTable; 54 using OffsetTable = debug::WasmDisassembly::OffsetTable;
53 55
54 public: 56 public:
55 DisassemblingTranslator(Isolate *isolate, Local<debug::WasmScript> script, 57 DisassemblingTranslator(Isolate* isolate, Local<debug::WasmScript> script)
56 WasmTranslation *translation, 58 : script_(isolate, script) {}
57 V8DebuggerAgentImpl *agent) 59
58 : script_(isolate, script) { 60 void Init(Isolate* isolate, WasmTranslation* translation,
61 V8DebuggerAgentImpl* agent) override {
59 // Register fake scripts for each function in this wasm module/script. 62 // Register fake scripts for each function in this wasm module/script.
63 Handle<debug::WasmScript> script = script_.Get(isolate);
60 int num_functions = script->NumFunctions(); 64 int num_functions = script->NumFunctions();
61 int num_imported_functions = script->NumImportedFunctions(); 65 int num_imported_functions = script->NumImportedFunctions();
62 DCHECK_LE(0, num_imported_functions); 66 DCHECK_LE(0, num_imported_functions);
63 DCHECK_LE(0, num_functions); 67 DCHECK_LE(0, num_functions);
64 DCHECK_GE(num_functions, num_imported_functions); 68 DCHECK_GE(num_functions, num_imported_functions);
65 String16 script_id = String16::fromInteger(script->Id()); 69 String16 script_id = String16::fromInteger(script->Id());
66 for (int func_idx = num_imported_functions; func_idx < num_functions; 70 for (int func_idx = num_imported_functions; func_idx < num_functions;
67 ++func_idx) { 71 ++func_idx) {
68 AddFakeScript(isolate, script_id, func_idx, translation, agent); 72 AddFakeScript(isolate, script_id, func_idx, translation, agent);
69 } 73 }
70 } 74 }
71 75
72 void Translate(TransLocation *loc) { 76 void Translate(TransLocation* loc) override {
73 const OffsetTable &offset_table = GetOffsetTable(loc); 77 const OffsetTable& offset_table = GetOffsetTable(loc);
74 DCHECK(!offset_table.empty()); 78 DCHECK(!offset_table.empty());
75 uint32_t byte_offset = static_cast<uint32_t>(loc->column); 79 uint32_t byte_offset = static_cast<uint32_t>(loc->column);
76 80
77 // Binary search for the given offset. 81 // Binary search for the given offset.
78 unsigned left = 0; // inclusive 82 unsigned left = 0; // inclusive
79 unsigned right = static_cast<unsigned>(offset_table.size()); // exclusive 83 unsigned right = static_cast<unsigned>(offset_table.size()); // exclusive
80 while (right - left > 1) { 84 while (right - left > 1) {
81 unsigned mid = (left + right) / 2; 85 unsigned mid = (left + right) / 2;
82 if (offset_table[mid].byte_offset <= byte_offset) { 86 if (offset_table[mid].byte_offset <= byte_offset) {
83 left = mid; 87 left = mid;
84 } else { 88 } else {
85 right = mid; 89 right = mid;
86 } 90 }
87 } 91 }
88 92
89 loc->script_id = GetFakeScriptId(loc); 93 loc->script_id = GetFakeScriptId(loc);
90 if (offset_table[left].byte_offset == byte_offset) { 94 if (offset_table[left].byte_offset == byte_offset) {
91 loc->line = offset_table[left].line; 95 loc->line = offset_table[left].line;
92 loc->column = offset_table[left].column; 96 loc->column = offset_table[left].column;
93 } else { 97 } else {
94 loc->line = 0; 98 loc->line = 0;
95 loc->column = 0; 99 loc->column = 0;
96 } 100 }
97 } 101 }
98 102
99 void TranslateBack(TransLocation *loc) { 103 void TranslateBack(TransLocation* loc) override {
100 int func_index = GetFunctionIndexFromFakeScriptId(loc->script_id); 104 int func_index = GetFunctionIndexFromFakeScriptId(loc->script_id);
101 const OffsetTable *reverse_table = GetReverseTable(func_index); 105 const OffsetTable* reverse_table = GetReverseTable(func_index);
102 if (!reverse_table) return; 106 if (!reverse_table) return;
103 DCHECK(!reverse_table->empty()); 107 DCHECK(!reverse_table->empty());
108 v8::Isolate* isolate = loc->translation->isolate_;
104 109
105 // Binary search for the given line and column. 110 // Binary search for the given line and column.
106 unsigned left = 0; // inclusive 111 unsigned left = 0; // inclusive
107 unsigned right = static_cast<unsigned>(reverse_table->size()); // exclusive 112 unsigned right = static_cast<unsigned>(reverse_table->size()); // exclusive
108 while (right - left > 1) { 113 while (right - left > 1) {
109 unsigned mid = (left + right) / 2; 114 unsigned mid = (left + right) / 2;
110 auto &entry = (*reverse_table)[mid]; 115 auto& entry = (*reverse_table)[mid];
111 if (entry.line < loc->line || 116 if (entry.line < loc->line ||
112 (entry.line == loc->line && entry.column <= loc->column)) { 117 (entry.line == loc->line && entry.column <= loc->column)) {
113 left = mid; 118 left = mid;
114 } else { 119 } else {
115 right = mid; 120 right = mid;
116 } 121 }
117 } 122 }
118 123
119 int found_byte_offset = 0; 124 int found_byte_offset = 0;
120 // If we found an exact match, use it. Otherwise check whether the next 125 // If we found an exact match, use it. Otherwise check whether the next
121 // bigger entry is still in the same line. Report that one then. 126 // bigger entry is still in the same line. Report that one then.
127 // Otherwise we might have hit the special case of pointing after the last
128 // line, which is translated to the end of the function (one byte after the
129 // last function byte).
122 if ((*reverse_table)[left].line == loc->line && 130 if ((*reverse_table)[left].line == loc->line &&
123 (*reverse_table)[left].column == loc->column) { 131 (*reverse_table)[left].column == loc->column) {
124 found_byte_offset = (*reverse_table)[left].byte_offset; 132 found_byte_offset = (*reverse_table)[left].byte_offset;
125 } else if (left + 1 < reverse_table->size() && 133 } else if (left + 1 < reverse_table->size() &&
126 (*reverse_table)[left + 1].line == loc->line) { 134 (*reverse_table)[left + 1].line == loc->line) {
127 found_byte_offset = (*reverse_table)[left + 1].byte_offset; 135 found_byte_offset = (*reverse_table)[left + 1].byte_offset;
136 } else if (left == reverse_table->size() - 1 &&
137 (*reverse_table)[left].line == loc->line - 1 &&
138 loc->column == 0) {
139 std::pair<int, int> func_range =
140 script_.Get(isolate)->GetFunctionRange(func_index);
141 DCHECK_LE(func_range.first, func_range.second);
142 found_byte_offset = func_range.second - func_range.first;
128 } 143 }
129 144
130 v8::Isolate *isolate = loc->translation->isolate_;
131 loc->script_id = String16::fromInteger(script_.Get(isolate)->Id()); 145 loc->script_id = String16::fromInteger(script_.Get(isolate)->Id());
132 loc->line = func_index; 146 loc->line = func_index;
133 loc->column = found_byte_offset; 147 loc->column = found_byte_offset;
134 } 148 }
135 149
136 private: 150 private:
137 String16 GetFakeScriptUrl(v8::Isolate *isolate, int func_index) { 151 String16 GetFakeScriptUrl(v8::Isolate* isolate, int func_index) {
138 Local<debug::WasmScript> script = script_.Get(isolate); 152 Local<debug::WasmScript> script = script_.Get(isolate);
139 String16 script_name = toProtocolString(script->Name().ToLocalChecked()); 153 String16 script_name = toProtocolString(script->Name().ToLocalChecked());
140 int numFunctions = script->NumFunctions(); 154 int numFunctions = script->NumFunctions();
141 int numImported = script->NumImportedFunctions(); 155 int numImported = script->NumImportedFunctions();
142 String16Builder builder; 156 String16Builder builder;
143 builder.appendAll("wasm://wasm/", script_name, '/'); 157 builder.appendAll("wasm://wasm/", script_name, '/');
144 if (numFunctions - numImported > 300) { 158 if (numFunctions - numImported > 300) {
145 size_t digits = String16::fromInteger(numFunctions - 1).length(); 159 size_t digits = String16::fromInteger(numFunctions - 1).length();
146 String16 thisCategory = String16::fromInteger((func_index / 100) * 100); 160 String16 thisCategory = String16::fromInteger((func_index / 100) * 100);
147 DCHECK_LE(thisCategory.length(), digits); 161 DCHECK_LE(thisCategory.length(), digits);
148 for (size_t i = thisCategory.length(); i < digits; ++i) 162 for (size_t i = thisCategory.length(); i < digits; ++i)
149 builder.append('0'); 163 builder.append('0');
150 builder.appendAll(thisCategory, '/'); 164 builder.appendAll(thisCategory, '/');
151 } 165 }
152 builder.appendAll(script_name, '-'); 166 builder.appendAll(script_name, '-');
153 builder.appendNumber(func_index); 167 builder.appendNumber(func_index);
154 return builder.toString(); 168 return builder.toString();
155 } 169 }
156 170
157 String16 GetFakeScriptId(const String16 script_id, int func_index) { 171 String16 GetFakeScriptId(const String16 script_id, int func_index) {
158 return String16::concat(script_id, '-', String16::fromInteger(func_index)); 172 return String16::concat(script_id, '-', String16::fromInteger(func_index));
159 } 173 }
160 String16 GetFakeScriptId(const TransLocation *loc) { 174 String16 GetFakeScriptId(const TransLocation* loc) {
161 return GetFakeScriptId(loc->script_id, loc->line); 175 return GetFakeScriptId(loc->script_id, loc->line);
162 } 176 }
163 177
164 void AddFakeScript(v8::Isolate *isolate, const String16 &underlyingScriptId, 178 void AddFakeScript(v8::Isolate* isolate, const String16& underlyingScriptId,
165 int func_idx, WasmTranslation *translation, 179 int func_idx, WasmTranslation* translation,
166 V8DebuggerAgentImpl *agent) { 180 V8DebuggerAgentImpl* agent) {
167 String16 fake_script_id = GetFakeScriptId(underlyingScriptId, func_idx); 181 String16 fake_script_id = GetFakeScriptId(underlyingScriptId, func_idx);
168 String16 fake_script_url = GetFakeScriptUrl(isolate, func_idx); 182 String16 fake_script_url = GetFakeScriptUrl(isolate, func_idx);
169 183
170 v8::Local<debug::WasmScript> script = script_.Get(isolate); 184 v8::Local<debug::WasmScript> script = script_.Get(isolate);
171 // TODO(clemensh): Generate disassembly lazily when queried by the frontend. 185 // TODO(clemensh): Generate disassembly lazily when queried by the frontend.
172 debug::WasmDisassembly disassembly = script->DisassembleFunction(func_idx); 186 debug::WasmDisassembly disassembly = script->DisassembleFunction(func_idx);
173 187
174 DCHECK_EQ(0, offset_tables_.count(func_idx)); 188 DCHECK_EQ(0, offset_tables_.count(func_idx));
175 offset_tables_.insert( 189 offset_tables_.insert(
176 std::make_pair(func_idx, std::move(disassembly.offset_table))); 190 std::make_pair(func_idx, std::move(disassembly.offset_table)));
177 String16 source(disassembly.disassembly.data(), 191 String16 source(disassembly.disassembly.data(),
178 disassembly.disassembly.length()); 192 disassembly.disassembly.length());
179 std::unique_ptr<V8DebuggerScript> fake_script = 193 std::unique_ptr<V8DebuggerScript> fake_script =
180 V8DebuggerScript::CreateWasm(isolate, script, fake_script_id, 194 V8DebuggerScript::CreateWasm(isolate, translation, script,
181 std::move(fake_script_url), source); 195 fake_script_id, std::move(fake_script_url),
196 source);
182 197
183 translation->AddFakeScript(fake_script->scriptId(), this); 198 translation->AddFakeScript(fake_script->scriptId(), this);
184 agent->didParseSource(std::move(fake_script), true); 199 agent->didParseSource(std::move(fake_script), true);
185 } 200 }
186 201
187 int GetFunctionIndexFromFakeScriptId(const String16 &fake_script_id) { 202 int GetFunctionIndexFromFakeScriptId(const String16& fake_script_id) {
188 size_t last_dash_pos = fake_script_id.reverseFind('-'); 203 size_t last_dash_pos = fake_script_id.reverseFind('-');
189 DCHECK_GT(fake_script_id.length(), last_dash_pos); 204 DCHECK_GT(fake_script_id.length(), last_dash_pos);
190 bool ok = true; 205 bool ok = true;
191 int func_index = fake_script_id.substring(last_dash_pos + 1).toInteger(&ok); 206 int func_index = fake_script_id.substring(last_dash_pos + 1).toInteger(&ok);
192 DCHECK(ok); 207 DCHECK(ok);
193 return func_index; 208 return func_index;
194 } 209 }
195 210
196 const OffsetTable &GetOffsetTable(const TransLocation *loc) { 211 const OffsetTable& GetOffsetTable(const TransLocation* loc) {
197 int func_index = loc->line; 212 int func_index = loc->line;
198 auto it = offset_tables_.find(func_index); 213 auto it = offset_tables_.find(func_index);
199 // TODO(clemensh): Once we load disassembly lazily, the offset table 214 // TODO(clemensh): Once we load disassembly lazily, the offset table
200 // might not be there yet. Load it lazily then. 215 // might not be there yet. Load it lazily then.
201 DCHECK(it != offset_tables_.end()); 216 DCHECK(it != offset_tables_.end());
202 return it->second; 217 return it->second;
203 } 218 }
204 219
205 const OffsetTable *GetReverseTable(int func_index) { 220 const OffsetTable* GetReverseTable(int func_index) {
206 auto it = reverse_tables_.find(func_index); 221 auto it = reverse_tables_.find(func_index);
207 if (it != reverse_tables_.end()) return &it->second; 222 if (it != reverse_tables_.end()) return &it->second;
208 223
209 // Find offset table, copy and sort it to get reverse table. 224 // Find offset table, copy and sort it to get reverse table.
210 it = offset_tables_.find(func_index); 225 it = offset_tables_.find(func_index);
211 if (it == offset_tables_.end()) return nullptr; 226 if (it == offset_tables_.end()) return nullptr;
212 227
213 OffsetTable reverse_table = it->second; 228 OffsetTable reverse_table = it->second;
214 // Order by line, column, then byte offset. 229 // Order by line, column, then byte offset.
215 auto cmp = [](OffsetTable::value_type el1, OffsetTable::value_type el2) { 230 auto cmp = [](OffsetTable::value_type el1, OffsetTable::value_type el2) {
(...skipping 10 matching lines...) Expand all
226 } 241 }
227 242
228 Global<debug::WasmScript> script_; 243 Global<debug::WasmScript> script_;
229 244
230 // We assume to only disassemble a subset of the functions, so store them in a 245 // We assume to only disassemble a subset of the functions, so store them in a
231 // map instead of an array. 246 // map instead of an array.
232 std::unordered_map<int, const OffsetTable> offset_tables_; 247 std::unordered_map<int, const OffsetTable> offset_tables_;
233 std::unordered_map<int, const OffsetTable> reverse_tables_; 248 std::unordered_map<int, const OffsetTable> reverse_tables_;
234 }; 249 };
235 250
236 WasmTranslation::WasmTranslation(v8::Isolate *isolate) 251 WasmTranslation::WasmTranslation(v8::Isolate* isolate)
237 : isolate_(isolate), mode_(Disassemble) {} 252 : isolate_(isolate), mode_(Disassemble) {}
238 253
239 WasmTranslation::~WasmTranslation() { Clear(); } 254 WasmTranslation::~WasmTranslation() { Clear(); }
240 255
241 void WasmTranslation::AddScript(Local<debug::WasmScript> script, 256 void WasmTranslation::AddScript(Local<debug::WasmScript> script,
242 V8DebuggerAgentImpl *agent) { 257 V8DebuggerAgentImpl* agent) {
243 int script_id = script->Id();
244 DCHECK_EQ(0, wasm_translators_.count(script_id));
245 std::unique_ptr<TranslatorImpl> impl; 258 std::unique_ptr<TranslatorImpl> impl;
246 switch (mode_) { 259 switch (mode_) {
247 case Raw: 260 case Raw:
248 impl.reset(new TranslatorImpl::RawTranslator()); 261 impl.reset(new TranslatorImpl::RawTranslator());
249 break; 262 break;
250 case Disassemble: 263 case Disassemble:
251 impl.reset(new TranslatorImpl::DisassemblingTranslator(isolate_, script, 264 impl.reset(new TranslatorImpl::DisassemblingTranslator(isolate_, script));
252 this, agent));
253 break; 265 break;
254 } 266 }
255 DCHECK(impl); 267 DCHECK(impl);
256 wasm_translators_.insert(std::make_pair(script_id, std::move(impl))); 268 auto inserted =
269 wasm_translators_.insert(std::make_pair(script->Id(), std::move(impl)));
270 // Check that no mapping for this script id existed before.
271 DCHECK(inserted.second);
272 // impl has been moved, use the returned iterator to call Init.
273 inserted.first->second->Init(isolate_, this, agent);
257 } 274 }
258 275
259 void WasmTranslation::Clear() { 276 void WasmTranslation::Clear() {
260 wasm_translators_.clear(); 277 wasm_translators_.clear();
261 fake_scripts_.clear(); 278 fake_scripts_.clear();
262 } 279 }
263 280
264 // Translation "forward" (to artificial scripts). 281 // Translation "forward" (to artificial scripts).
265 bool WasmTranslation::TranslateWasmScriptLocationToProtocolLocation( 282 bool WasmTranslation::TranslateWasmScriptLocationToProtocolLocation(
266 String16 *script_id, int *line_number, int *column_number) { 283 String16* script_id, int* line_number, int* column_number) {
267 DCHECK(script_id && line_number && column_number); 284 DCHECK(script_id && line_number && column_number);
268 bool ok = true; 285 bool ok = true;
269 int script_id_int = script_id->toInteger(&ok); 286 int script_id_int = script_id->toInteger(&ok);
270 if (!ok) return false; 287 if (!ok) return false;
271 288
272 auto it = wasm_translators_.find(script_id_int); 289 auto it = wasm_translators_.find(script_id_int);
273 if (it == wasm_translators_.end()) return false; 290 if (it == wasm_translators_.end()) return false;
274 TranslatorImpl *translator = it->second.get(); 291 TranslatorImpl* translator = it->second.get();
275 292
276 TranslatorImpl::TransLocation trans_loc(this, std::move(*script_id), 293 TranslatorImpl::TransLocation trans_loc(this, std::move(*script_id),
277 *line_number, *column_number); 294 *line_number, *column_number);
278 translator->Translate(&trans_loc); 295 translator->Translate(&trans_loc);
279 296
280 *script_id = std::move(trans_loc.script_id); 297 *script_id = std::move(trans_loc.script_id);
281 *line_number = trans_loc.line; 298 *line_number = trans_loc.line;
282 *column_number = trans_loc.column; 299 *column_number = trans_loc.column;
283 300
284 return true; 301 return true;
285 } 302 }
286 303
287 // Translation "backward" (from artificial to real scripts). 304 // Translation "backward" (from artificial to real scripts).
288 bool WasmTranslation::TranslateProtocolLocationToWasmScriptLocation( 305 bool WasmTranslation::TranslateProtocolLocationToWasmScriptLocation(
289 String16 *script_id, int *line_number, int *column_number) { 306 String16* script_id, int* line_number, int* column_number) {
290 auto it = fake_scripts_.find(*script_id); 307 auto it = fake_scripts_.find(*script_id);
291 if (it == fake_scripts_.end()) return false; 308 if (it == fake_scripts_.end()) return false;
292 TranslatorImpl *translator = it->second; 309 TranslatorImpl* translator = it->second;
293 310
294 TranslatorImpl::TransLocation trans_loc(this, std::move(*script_id), 311 TranslatorImpl::TransLocation trans_loc(this, std::move(*script_id),
295 *line_number, *column_number); 312 *line_number, *column_number);
296 translator->TranslateBack(&trans_loc); 313 translator->TranslateBack(&trans_loc);
297 314
298 *script_id = std::move(trans_loc.script_id); 315 *script_id = std::move(trans_loc.script_id);
299 *line_number = trans_loc.line; 316 *line_number = trans_loc.line;
300 *column_number = trans_loc.column; 317 *column_number = trans_loc.column;
301 318
302 return true; 319 return true;
303 } 320 }
304 321
305 void WasmTranslation::AddFakeScript(const String16 &scriptId, 322 void WasmTranslation::AddFakeScript(const String16& scriptId,
306 TranslatorImpl *translator) { 323 TranslatorImpl* translator) {
307 DCHECK_EQ(0, fake_scripts_.count(scriptId)); 324 DCHECK_EQ(0, fake_scripts_.count(scriptId));
308 fake_scripts_.insert(std::make_pair(scriptId, translator)); 325 fake_scripts_.insert(std::make_pair(scriptId, translator));
309 } 326 }
OLDNEW
« no previous file with comments | « src/inspector/v8-debugger-script.cc ('k') | src/runtime/runtime-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698