OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
10 #include "src/ast/prettyprinter.h" | 10 #include "src/ast/prettyprinter.h" |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 | 326 |
327 bool ComputeLocation(Isolate* isolate, MessageLocation* target) { | 327 bool ComputeLocation(Isolate* isolate, MessageLocation* target) { |
328 JavaScriptFrameIterator it(isolate); | 328 JavaScriptFrameIterator it(isolate); |
329 if (!it.done()) { | 329 if (!it.done()) { |
330 // Compute the location from the function and the relocation info of the | 330 // Compute the location from the function and the relocation info of the |
331 // baseline code. For optimized code this will use the deoptimization | 331 // baseline code. For optimized code this will use the deoptimization |
332 // information to get canonical location information. | 332 // information to get canonical location information. |
333 List<FrameSummary> frames(FLAG_max_inlining_levels + 1); | 333 List<FrameSummary> frames(FLAG_max_inlining_levels + 1); |
334 it.frame()->Summarize(&frames); | 334 it.frame()->Summarize(&frames); |
335 auto& summary = frames.last().AsJavaScript(); | 335 auto& summary = frames.last().AsJavaScript(); |
336 Handle<JSFunction> function = summary.function(); | 336 Handle<SharedFunctionInfo> shared(summary.function()->shared()); |
337 Handle<Object> script(function->shared()->script(), isolate); | 337 Handle<Object> script(shared->script(), isolate); |
338 int pos = summary.abstract_code()->SourcePosition(summary.code_offset()); | 338 int pos = summary.abstract_code()->SourcePosition(summary.code_offset()); |
339 if (script->IsScript() && | 339 if (script->IsScript() && |
340 !(Handle<Script>::cast(script)->source()->IsUndefined(isolate))) { | 340 !(Handle<Script>::cast(script)->source()->IsUndefined(isolate))) { |
341 Handle<Script> casted_script = Handle<Script>::cast(script); | 341 Handle<Script> casted_script = Handle<Script>::cast(script); |
342 *target = MessageLocation(casted_script, pos, pos + 1, function); | 342 *target = MessageLocation(casted_script, pos, pos + 1, shared); |
343 return true; | 343 return true; |
344 } | 344 } |
345 } | 345 } |
346 return false; | 346 return false; |
347 } | 347 } |
348 | 348 |
349 | 349 |
350 Handle<String> RenderCallSite(Isolate* isolate, Handle<Object> object) { | 350 Handle<String> RenderCallSite(Isolate* isolate, Handle<Object> object) { |
351 MessageLocation location; | 351 MessageLocation location; |
352 if (ComputeLocation(isolate, &location)) { | 352 if (ComputeLocation(isolate, &location)) { |
353 Zone zone(isolate->allocator(), ZONE_NAME); | 353 Zone zone(isolate->allocator(), ZONE_NAME); |
354 std::unique_ptr<ParseInfo> info( | 354 std::unique_ptr<ParseInfo> info(new ParseInfo(&zone, location.shared())); |
355 new ParseInfo(&zone, handle(location.function()->shared()))); | |
356 if (parsing::ParseAny(info.get())) { | 355 if (parsing::ParseAny(info.get())) { |
357 CallPrinter printer(isolate, | 356 CallPrinter printer(isolate, location.shared()->IsUserJavaScript()); |
358 location.function()->shared()->IsUserJavaScript()); | |
359 Handle<String> str = printer.Print(info->literal(), location.start_pos()); | 357 Handle<String> str = printer.Print(info->literal(), location.start_pos()); |
360 if (str->length() > 0) return str; | 358 if (str->length() > 0) return str; |
361 } else { | 359 } else { |
362 isolate->clear_pending_exception(); | 360 isolate->clear_pending_exception(); |
363 } | 361 } |
364 } | 362 } |
365 return Object::TypeOf(isolate, object); | 363 return Object::TypeOf(isolate, object); |
366 } | 364 } |
367 | 365 |
368 } // namespace | 366 } // namespace |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 HandleScope scope(isolate); | 491 HandleScope scope(isolate); |
494 DCHECK_EQ(1, args.length()); | 492 DCHECK_EQ(1, args.length()); |
495 CONVERT_ARG_HANDLE_CHECKED(JSFunction, target, 0); | 493 CONVERT_ARG_HANDLE_CHECKED(JSFunction, target, 0); |
496 Handle<JSObject> global_proxy(target->global_proxy(), isolate); | 494 Handle<JSObject> global_proxy(target->global_proxy(), isolate); |
497 return *isolate->factory()->ToBoolean( | 495 return *isolate->factory()->ToBoolean( |
498 Builtins::AllowDynamicFunction(isolate, target, global_proxy)); | 496 Builtins::AllowDynamicFunction(isolate, target, global_proxy)); |
499 } | 497 } |
500 | 498 |
501 } // namespace internal | 499 } // namespace internal |
502 } // namespace v8 | 500 } // namespace v8 |
OLD | NEW |