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

Side by Side Diff: src/messages.cc

Issue 1909353002: [wasm] Make wasm info available on the stack trace (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-offset-table-3
Patch Set: last changes Created 4 years, 7 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/messages.h ('k') | src/profiler/allocation-tracker.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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/messages.h" 5 #include "src/messages.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/execution.h" 8 #include "src/execution.h"
9 #include "src/isolate-inl.h" 9 #include "src/isolate-inl.h"
10 #include "src/keys.h" 10 #include "src/keys.h"
11 #include "src/string-builder.h" 11 #include "src/string-builder.h"
12 #include "src/wasm/wasm-module.h"
12 13
13 namespace v8 { 14 namespace v8 {
14 namespace internal { 15 namespace internal {
15 16
16 MessageLocation::MessageLocation(Handle<Script> script, int start_pos, 17 MessageLocation::MessageLocation(Handle<Script> script, int start_pos,
17 int end_pos) 18 int end_pos)
18 : script_(script), start_pos_(start_pos), end_pos_(end_pos) {} 19 : script_(script), start_pos_(start_pos), end_pos_(end_pos) {}
19 MessageLocation::MessageLocation(Handle<Script> script, int start_pos, 20 MessageLocation::MessageLocation(Handle<Script> script, int start_pos,
20 int end_pos, Handle<JSFunction> function) 21 int end_pos, Handle<JSFunction> function)
21 : script_(script), 22 : script_(script),
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 Isolate* isolate, Handle<Object> data) { 163 Isolate* isolate, Handle<Object> data) {
163 HandleScope scope(isolate); 164 HandleScope scope(isolate);
164 return GetMessage(isolate, data)->ToCString(DISALLOW_NULLS); 165 return GetMessage(isolate, data)->ToCString(DISALLOW_NULLS);
165 } 166 }
166 167
167 168
168 CallSite::CallSite(Isolate* isolate, Handle<JSObject> call_site_obj) 169 CallSite::CallSite(Isolate* isolate, Handle<JSObject> call_site_obj)
169 : isolate_(isolate) { 170 : isolate_(isolate) {
170 Handle<Object> maybe_function = JSObject::GetDataProperty( 171 Handle<Object> maybe_function = JSObject::GetDataProperty(
171 call_site_obj, isolate->factory()->call_site_function_symbol()); 172 call_site_obj, isolate->factory()->call_site_function_symbol());
172 if (!maybe_function->IsJSFunction()) return; 173 if (maybe_function->IsJSFunction()) {
174 // javascript
175 fun_ = Handle<JSFunction>::cast(maybe_function);
176 receiver_ = JSObject::GetDataProperty(
177 call_site_obj, isolate->factory()->call_site_receiver_symbol());
178 } else {
179 Handle<Object> maybe_wasm_func_index = JSObject::GetDataProperty(
180 call_site_obj, isolate->factory()->call_site_wasm_func_index_symbol());
181 if (!maybe_wasm_func_index->IsSmi()) {
182 // invalid: neither javascript nor wasm
183 return;
184 }
185 // wasm
186 wasm_obj_ = Handle<JSObject>::cast(JSObject::GetDataProperty(
187 call_site_obj, isolate->factory()->call_site_wasm_obj_symbol()));
188 wasm_func_index_ = Smi::cast(*maybe_wasm_func_index)->value();
189 DCHECK(static_cast<int>(wasm_func_index_) >= 0);
190 }
173 191
174 fun_ = Handle<JSFunction>::cast(maybe_function);
175 receiver_ = JSObject::GetDataProperty(
176 call_site_obj, isolate->factory()->call_site_receiver_symbol());
177 CHECK(JSObject::GetDataProperty( 192 CHECK(JSObject::GetDataProperty(
178 call_site_obj, isolate->factory()->call_site_position_symbol()) 193 call_site_obj, isolate->factory()->call_site_position_symbol())
179 ->ToInt32(&pos_)); 194 ->ToInt32(&pos_));
180 } 195 }
181 196
182 197
183 Handle<Object> CallSite::GetFileName() { 198 Handle<Object> CallSite::GetFileName() {
184 Handle<Object> script(fun_->shared()->script(), isolate_); 199 if (!IsJavaScript()) return isolate_->factory()->null_value();
185 if (script->IsScript()) { 200 Object* script = fun_->shared()->script();
186 return Handle<Object>(Handle<Script>::cast(script)->name(), isolate_); 201 if (!script->IsScript()) return isolate_->factory()->null_value();
187 } 202 return Handle<Object>(Script::cast(script)->name(), isolate_);
188 return isolate_->factory()->null_value();
189 } 203 }
190 204
191 205
192 Handle<Object> CallSite::GetFunctionName() { 206 Handle<Object> CallSite::GetFunctionName() {
207 if (IsWasm()) {
208 if (wasm_obj_->IsUndefined()) return isolate_->factory()->null_value();
209 // wasm_obj_ can be a String if we generate WASM code directly in a test
210 // case.
211 if (wasm_obj_->IsString()) return wasm_obj_;
212 return wasm::GetWasmFunctionName(Handle<JSObject>::cast(wasm_obj_),
213 wasm_func_index_);
214 }
193 Handle<String> result = JSFunction::GetName(fun_); 215 Handle<String> result = JSFunction::GetName(fun_);
194 if (result->length() != 0) return result; 216 if (result->length() != 0) return result;
195 217
196 Handle<Object> script(fun_->shared()->script(), isolate_); 218 Handle<Object> script(fun_->shared()->script(), isolate_);
197 if (script->IsScript() && 219 if (script->IsScript() &&
198 Handle<Script>::cast(script)->compilation_type() == 220 Handle<Script>::cast(script)->compilation_type() ==
199 Script::COMPILATION_TYPE_EVAL) { 221 Script::COMPILATION_TYPE_EVAL) {
200 return isolate_->factory()->eval_string(); 222 return isolate_->factory()->eval_string();
201 } 223 }
202 return isolate_->factory()->null_value(); 224 return isolate_->factory()->null_value();
203 } 225 }
204 226
205
206 Handle<Object> CallSite::GetScriptNameOrSourceUrl() { 227 Handle<Object> CallSite::GetScriptNameOrSourceUrl() {
207 Handle<Object> script_obj(fun_->shared()->script(), isolate_); 228 if (!IsJavaScript()) return isolate_->factory()->null_value();
208 if (script_obj->IsScript()) { 229 Object* script_obj = fun_->shared()->script();
209 Handle<Script> script = Handle<Script>::cast(script_obj); 230 if (!script_obj->IsScript()) return isolate_->factory()->null_value();
210 Object* source_url = script->source_url(); 231 Handle<Script> script(Script::cast(script_obj), isolate_);
211 if (source_url->IsString()) return Handle<Object>(source_url, isolate_); 232 Object* source_url = script->source_url();
212 return Handle<Object>(script->name(), isolate_); 233 if (source_url->IsString()) return Handle<Object>(source_url, isolate_);
213 } 234 return Handle<Object>(script->name(), isolate_);
214 return isolate_->factory()->null_value();
215 } 235 }
216 236
217
218 bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name, 237 bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name,
219 Handle<JSFunction> fun, 238 Handle<JSFunction> fun,
220 LookupIterator::Configuration config) { 239 LookupIterator::Configuration config) {
221 LookupIterator iter = 240 LookupIterator iter =
222 LookupIterator::PropertyOrElement(isolate, obj, name, config); 241 LookupIterator::PropertyOrElement(isolate, obj, name, config);
223 if (iter.state() == LookupIterator::DATA) { 242 if (iter.state() == LookupIterator::DATA) {
224 return iter.GetDataValue().is_identical_to(fun); 243 return iter.GetDataValue().is_identical_to(fun);
225 } else if (iter.state() == LookupIterator::ACCESSOR) { 244 } else if (iter.state() == LookupIterator::ACCESSOR) {
226 Handle<Object> accessors = iter.GetAccessors(); 245 Handle<Object> accessors = iter.GetAccessors();
227 if (accessors->IsAccessorPair()) { 246 if (accessors->IsAccessorPair()) {
228 Handle<AccessorPair> pair = Handle<AccessorPair>::cast(accessors); 247 Handle<AccessorPair> pair = Handle<AccessorPair>::cast(accessors);
229 return pair->getter() == *fun || pair->setter() == *fun; 248 return pair->getter() == *fun || pair->setter() == *fun;
230 } 249 }
231 } 250 }
232 return false; 251 return false;
233 } 252 }
234 253
235 254
236 Handle<Object> CallSite::GetMethodName() { 255 Handle<Object> CallSite::GetMethodName() {
237 if (receiver_->IsNull() || receiver_->IsUndefined()) { 256 if (!IsJavaScript() || receiver_->IsNull() || receiver_->IsUndefined()) {
238 return isolate_->factory()->null_value(); 257 return isolate_->factory()->null_value();
239 } 258 }
240 Handle<JSReceiver> receiver = 259 Handle<JSReceiver> receiver =
241 Object::ToObject(isolate_, receiver_).ToHandleChecked(); 260 Object::ToObject(isolate_, receiver_).ToHandleChecked();
242 if (!receiver->IsJSObject()) { 261 if (!receiver->IsJSObject()) {
243 return isolate_->factory()->null_value(); 262 return isolate_->factory()->null_value();
244 } 263 }
245 264
246 Handle<JSObject> obj = Handle<JSObject>::cast(receiver); 265 Handle<JSObject> obj = Handle<JSObject>::cast(receiver);
247 Handle<Object> function_name(fun_->shared()->name(), isolate_); 266 Handle<Object> function_name(fun_->shared()->name(), isolate_);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 result = inner_scope.CloseAndEscape(name_key); 305 result = inner_scope.CloseAndEscape(name_key);
287 } 306 }
288 } 307 }
289 308
290 if (!result.is_null()) return outer_scope.CloseAndEscape(result); 309 if (!result.is_null()) return outer_scope.CloseAndEscape(result);
291 return isolate_->factory()->null_value(); 310 return isolate_->factory()->null_value();
292 } 311 }
293 312
294 313
295 int CallSite::GetLineNumber() { 314 int CallSite::GetLineNumber() {
296 if (pos_ >= 0) { 315 if (pos_ >= 0 && IsJavaScript()) {
297 Handle<Object> script_obj(fun_->shared()->script(), isolate_); 316 Handle<Object> script_obj(fun_->shared()->script(), isolate_);
298 if (script_obj->IsScript()) { 317 if (script_obj->IsScript()) {
299 Handle<Script> script = Handle<Script>::cast(script_obj); 318 Handle<Script> script = Handle<Script>::cast(script_obj);
300 return Script::GetLineNumber(script, pos_) + 1; 319 return Script::GetLineNumber(script, pos_) + 1;
301 } 320 }
302 } 321 }
303 return -1; 322 return -1;
304 } 323 }
305 324
306 325
307 int CallSite::GetColumnNumber() { 326 int CallSite::GetColumnNumber() {
308 if (pos_ >= 0) { 327 if (pos_ >= 0 && IsJavaScript()) {
309 Handle<Object> script_obj(fun_->shared()->script(), isolate_); 328 Handle<Object> script_obj(fun_->shared()->script(), isolate_);
310 if (script_obj->IsScript()) { 329 if (script_obj->IsScript()) {
311 Handle<Script> script = Handle<Script>::cast(script_obj); 330 Handle<Script> script = Handle<Script>::cast(script_obj);
312 return Script::GetColumnNumber(script, pos_) + 1; 331 return Script::GetColumnNumber(script, pos_) + 1;
313 } 332 }
314 } 333 }
315 return -1; 334 return -1;
316 } 335 }
317 336
318 337
319 bool CallSite::IsNative() { 338 bool CallSite::IsNative() {
339 if (!IsJavaScript()) return false;
320 Handle<Object> script(fun_->shared()->script(), isolate_); 340 Handle<Object> script(fun_->shared()->script(), isolate_);
321 return script->IsScript() && 341 return script->IsScript() &&
322 Handle<Script>::cast(script)->type() == Script::TYPE_NATIVE; 342 Handle<Script>::cast(script)->type() == Script::TYPE_NATIVE;
323 } 343 }
324 344
325 345
326 bool CallSite::IsToplevel() { 346 bool CallSite::IsToplevel() {
347 if (IsWasm()) return false;
327 return receiver_->IsJSGlobalProxy() || receiver_->IsNull() || 348 return receiver_->IsJSGlobalProxy() || receiver_->IsNull() ||
328 receiver_->IsUndefined(); 349 receiver_->IsUndefined();
329 } 350 }
330 351
331 352
332 bool CallSite::IsEval() { 353 bool CallSite::IsEval() {
354 if (!IsJavaScript()) return false;
333 Handle<Object> script(fun_->shared()->script(), isolate_); 355 Handle<Object> script(fun_->shared()->script(), isolate_);
334 return script->IsScript() && 356 return script->IsScript() &&
335 Handle<Script>::cast(script)->compilation_type() == 357 Handle<Script>::cast(script)->compilation_type() ==
336 Script::COMPILATION_TYPE_EVAL; 358 Script::COMPILATION_TYPE_EVAL;
337 } 359 }
338 360
339 361
340 bool CallSite::IsConstructor() { 362 bool CallSite::IsConstructor() {
341 if (!receiver_->IsJSObject()) return false; 363 if (!IsJavaScript() || !receiver_->IsJSObject()) return false;
342 Handle<Object> constructor = 364 Handle<Object> constructor =
343 JSReceiver::GetDataProperty(Handle<JSObject>::cast(receiver_), 365 JSReceiver::GetDataProperty(Handle<JSObject>::cast(receiver_),
344 isolate_->factory()->constructor_string()); 366 isolate_->factory()->constructor_string());
345 return constructor.is_identical_to(fun_); 367 return constructor.is_identical_to(fun_);
346 } 368 }
347 369
348 370
349 Handle<String> MessageTemplate::FormatMessage(Isolate* isolate, 371 Handle<String> MessageTemplate::FormatMessage(Isolate* isolate,
350 int template_index, 372 int template_index,
351 Handle<Object> arg) { 373 Handle<Object> arg) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 builder.AppendCharacter(*c); 445 builder.AppendCharacter(*c);
424 } 446 }
425 } 447 }
426 448
427 return builder.Finish(); 449 return builder.Finish();
428 } 450 }
429 451
430 452
431 } // namespace internal 453 } // namespace internal
432 } // namespace v8 454 } // namespace v8
OLDNEW
« no previous file with comments | « src/messages.h ('k') | src/profiler/allocation-tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698