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

Side by Side Diff: src/runtime/runtime-debug.cc

Issue 2053573004: [runtime] Deprecate RUNTIME_ASSERT from debugger methods. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased. Created 4 years, 5 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 | « no previous file | src/runtime/runtime-liveedit.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 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 "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/debug/debug-evaluate.h" 8 #include "src/debug/debug-evaluate.h"
9 #include "src/debug/debug-frames.h" 9 #include "src/debug/debug-frames.h"
10 #include "src/debug/debug-scopes.h" 10 #include "src/debug/debug-scopes.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 } 72 }
73 73
74 74
75 // Adds a JavaScript function as a debug event listener. 75 // Adds a JavaScript function as a debug event listener.
76 // args[0]: debug event listener function to set or null or undefined for 76 // args[0]: debug event listener function to set or null or undefined for
77 // clearing the event listener function 77 // clearing the event listener function
78 // args[1]: object supplied during callback 78 // args[1]: object supplied during callback
79 RUNTIME_FUNCTION(Runtime_SetDebugEventListener) { 79 RUNTIME_FUNCTION(Runtime_SetDebugEventListener) {
80 SealHandleScope shs(isolate); 80 SealHandleScope shs(isolate);
81 DCHECK(args.length() == 2); 81 DCHECK(args.length() == 2);
82 RUNTIME_ASSERT(args[0]->IsJSFunction() || args[0]->IsUndefined(isolate) || 82 CHECK(args[0]->IsJSFunction() || args[0]->IsUndefined(isolate) ||
83 args[0]->IsNull(isolate)); 83 args[0]->IsNull(isolate));
84 CONVERT_ARG_HANDLE_CHECKED(Object, callback, 0); 84 CONVERT_ARG_HANDLE_CHECKED(Object, callback, 0);
85 CONVERT_ARG_HANDLE_CHECKED(Object, data, 1); 85 CONVERT_ARG_HANDLE_CHECKED(Object, data, 1);
86 isolate->debug()->SetEventListener(callback, data); 86 isolate->debug()->SetEventListener(callback, data);
87 87
88 return isolate->heap()->undefined_value(); 88 return isolate->heap()->undefined_value();
89 } 89 }
90 90
91 91
92 RUNTIME_FUNCTION(Runtime_ScheduleBreak) { 92 RUNTIME_FUNCTION(Runtime_ScheduleBreak) {
93 SealHandleScope shs(isolate); 93 SealHandleScope shs(isolate);
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 DCHECK(args.length() == 1); 430 DCHECK(args.length() == 1);
431 CONVERT_PROPERTY_DETAILS_CHECKED(details, 0); 431 CONVERT_PROPERTY_DETAILS_CHECKED(details, 0);
432 return Smi::FromInt(static_cast<int>(details.attributes())); 432 return Smi::FromInt(static_cast<int>(details.attributes()));
433 } 433 }
434 434
435 435
436 RUNTIME_FUNCTION(Runtime_CheckExecutionState) { 436 RUNTIME_FUNCTION(Runtime_CheckExecutionState) {
437 SealHandleScope shs(isolate); 437 SealHandleScope shs(isolate);
438 DCHECK(args.length() == 1); 438 DCHECK(args.length() == 1);
439 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 439 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
440 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 440 CHECK(isolate->debug()->CheckExecutionState(break_id));
441 return isolate->heap()->true_value(); 441 return isolate->heap()->true_value();
442 } 442 }
443 443
444 444
445 RUNTIME_FUNCTION(Runtime_GetFrameCount) { 445 RUNTIME_FUNCTION(Runtime_GetFrameCount) {
446 HandleScope scope(isolate); 446 HandleScope scope(isolate);
447 DCHECK(args.length() == 1); 447 DCHECK(args.length() == 1);
448 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 448 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
449 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 449 CHECK(isolate->debug()->CheckExecutionState(break_id));
450 450
451 // Count all frames which are relevant to debugging stack trace. 451 // Count all frames which are relevant to debugging stack trace.
452 int n = 0; 452 int n = 0;
453 StackFrame::Id id = isolate->debug()->break_frame_id(); 453 StackFrame::Id id = isolate->debug()->break_frame_id();
454 if (id == StackFrame::NO_ID) { 454 if (id == StackFrame::NO_ID) {
455 // If there is no JavaScript stack frame count is 0. 455 // If there is no JavaScript stack frame count is 0.
456 return Smi::FromInt(0); 456 return Smi::FromInt(0);
457 } 457 }
458 458
459 for (StackTraceFrameIterator it(isolate, id); !it.done(); it.Advance()) { 459 for (StackTraceFrameIterator it(isolate, id); !it.done(); it.Advance()) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 // 7: Constructor call 499 // 7: Constructor call
500 // 8: Is at return 500 // 8: Is at return
501 // 9: Flags 501 // 9: Flags
502 // Arguments name, value 502 // Arguments name, value
503 // Locals name, value 503 // Locals name, value
504 // Return value if any 504 // Return value if any
505 RUNTIME_FUNCTION(Runtime_GetFrameDetails) { 505 RUNTIME_FUNCTION(Runtime_GetFrameDetails) {
506 HandleScope scope(isolate); 506 HandleScope scope(isolate);
507 DCHECK(args.length() == 2); 507 DCHECK(args.length() == 2);
508 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 508 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
509 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 509 CHECK(isolate->debug()->CheckExecutionState(break_id));
510 510
511 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]); 511 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]);
512 Heap* heap = isolate->heap(); 512 Heap* heap = isolate->heap();
513 513
514 // Find the relevant frame with the requested index. 514 // Find the relevant frame with the requested index.
515 StackFrame::Id id = isolate->debug()->break_frame_id(); 515 StackFrame::Id id = isolate->debug()->break_frame_id();
516 if (id == StackFrame::NO_ID) { 516 if (id == StackFrame::NO_ID) {
517 // If there are no JavaScript stack frames return undefined. 517 // If there are no JavaScript stack frames return undefined.
518 return heap->undefined_value(); 518 return heap->undefined_value();
519 } 519 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 590
591 // Handle JavaScript frames. 591 // Handle JavaScript frames.
592 bool is_optimized = it.frame()->is_optimized(); 592 bool is_optimized = it.frame()->is_optimized();
593 593
594 // Check for constructor frame. 594 // Check for constructor frame.
595 bool constructor = frame_inspector.IsConstructor(); 595 bool constructor = frame_inspector.IsConstructor();
596 596
597 // Get scope info and read from it for local variable information. 597 // Get scope info and read from it for local variable information.
598 Handle<JSFunction> function = 598 Handle<JSFunction> function =
599 Handle<JSFunction>::cast(frame_inspector.GetFunction()); 599 Handle<JSFunction>::cast(frame_inspector.GetFunction());
600 RUNTIME_ASSERT(function->shared()->IsSubjectToDebugging()); 600 CHECK(function->shared()->IsSubjectToDebugging());
601 Handle<SharedFunctionInfo> shared(function->shared()); 601 Handle<SharedFunctionInfo> shared(function->shared());
602 Handle<ScopeInfo> scope_info(shared->scope_info()); 602 Handle<ScopeInfo> scope_info(shared->scope_info());
603 DCHECK(*scope_info != ScopeInfo::Empty(isolate)); 603 DCHECK(*scope_info != ScopeInfo::Empty(isolate));
604 604
605 // Get the locals names and values into a temporary array. 605 // Get the locals names and values into a temporary array.
606 int local_count = scope_info->LocalCount(); 606 int local_count = scope_info->LocalCount();
607 for (int slot = 0; slot < scope_info->LocalCount(); ++slot) { 607 for (int slot = 0; slot < scope_info->LocalCount(); ++slot) {
608 // Hide compiler-introduced temporary variables, whether on the stack or on 608 // Hide compiler-introduced temporary variables, whether on the stack or on
609 // the context. 609 // the context.
610 if (ScopeInfo::VariableIsSynthetic(scope_info->LocalName(slot))) { 610 if (ScopeInfo::VariableIsSynthetic(scope_info->LocalName(slot))) {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 770
771 DCHECK_EQ(details_size, details_index); 771 DCHECK_EQ(details_size, details_index);
772 return *isolate->factory()->NewJSArrayWithElements(details); 772 return *isolate->factory()->NewJSArrayWithElements(details);
773 } 773 }
774 774
775 775
776 RUNTIME_FUNCTION(Runtime_GetScopeCount) { 776 RUNTIME_FUNCTION(Runtime_GetScopeCount) {
777 HandleScope scope(isolate); 777 HandleScope scope(isolate);
778 DCHECK(args.length() == 2); 778 DCHECK(args.length() == 2);
779 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 779 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
780 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 780 CHECK(isolate->debug()->CheckExecutionState(break_id));
781 781
782 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); 782 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1);
783 783
784 // Get the frame where the debugging is performed. 784 // Get the frame where the debugging is performed.
785 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id); 785 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id);
786 JavaScriptFrameIterator it(isolate, id); 786 JavaScriptFrameIterator it(isolate, id);
787 JavaScriptFrame* frame = it.frame(); 787 JavaScriptFrame* frame = it.frame();
788 FrameInspector frame_inspector(frame, 0, isolate); 788 FrameInspector frame_inspector(frame, 0, isolate);
789 789
790 // Count the visible scopes. 790 // Count the visible scopes.
(...skipping 12 matching lines...) Expand all
803 // args[2]: number: inlined frame index 803 // args[2]: number: inlined frame index
804 // args[3]: number: scope index 804 // args[3]: number: scope index
805 // 805 //
806 // The array returned contains the following information: 806 // The array returned contains the following information:
807 // 0: Scope type 807 // 0: Scope type
808 // 1: Scope object 808 // 1: Scope object
809 RUNTIME_FUNCTION(Runtime_GetScopeDetails) { 809 RUNTIME_FUNCTION(Runtime_GetScopeDetails) {
810 HandleScope scope(isolate); 810 HandleScope scope(isolate);
811 DCHECK(args.length() == 4); 811 DCHECK(args.length() == 4);
812 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 812 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
813 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 813 CHECK(isolate->debug()->CheckExecutionState(break_id));
814 814
815 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); 815 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1);
816 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); 816 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]);
817 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]); 817 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]);
818 818
819 // Get the frame where the debugging is performed. 819 // Get the frame where the debugging is performed.
820 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id); 820 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id);
821 JavaScriptFrameIterator frame_it(isolate, id); 821 JavaScriptFrameIterator frame_it(isolate, id);
822 JavaScriptFrame* frame = frame_it.frame(); 822 JavaScriptFrame* frame = frame_it.frame();
823 FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate); 823 FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate);
(...skipping 17 matching lines...) Expand all
841 // args[2]: number: inlined frame index 841 // args[2]: number: inlined frame index
842 // args[3]: boolean: ignore nested scopes 842 // args[3]: boolean: ignore nested scopes
843 // 843 //
844 // The array returned contains arrays with the following information: 844 // The array returned contains arrays with the following information:
845 // 0: Scope type 845 // 0: Scope type
846 // 1: Scope object 846 // 1: Scope object
847 RUNTIME_FUNCTION(Runtime_GetAllScopesDetails) { 847 RUNTIME_FUNCTION(Runtime_GetAllScopesDetails) {
848 HandleScope scope(isolate); 848 HandleScope scope(isolate);
849 DCHECK(args.length() == 3 || args.length() == 4); 849 DCHECK(args.length() == 3 || args.length() == 4);
850 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 850 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
851 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 851 CHECK(isolate->debug()->CheckExecutionState(break_id));
852 852
853 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); 853 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1);
854 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); 854 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]);
855 855
856 ScopeIterator::Option option = ScopeIterator::DEFAULT; 856 ScopeIterator::Option option = ScopeIterator::DEFAULT;
857 if (args.length() == 4) { 857 if (args.length() == 4) {
858 CONVERT_BOOLEAN_ARG_CHECKED(flag, 3); 858 CONVERT_BOOLEAN_ARG_CHECKED(flag, 3);
859 if (flag) option = ScopeIterator::IGNORE_NESTED_SCOPES; 859 if (flag) option = ScopeIterator::IGNORE_NESTED_SCOPES;
860 } 860 }
861 861
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 DCHECK(args.length() == 6); 951 DCHECK(args.length() == 6);
952 952
953 // Check arguments. 953 // Check arguments.
954 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]); 954 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]);
955 CONVERT_ARG_HANDLE_CHECKED(String, variable_name, 4); 955 CONVERT_ARG_HANDLE_CHECKED(String, variable_name, 4);
956 CONVERT_ARG_HANDLE_CHECKED(Object, new_value, 5); 956 CONVERT_ARG_HANDLE_CHECKED(Object, new_value, 5);
957 957
958 bool res; 958 bool res;
959 if (args[0]->IsNumber()) { 959 if (args[0]->IsNumber()) {
960 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 960 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
961 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 961 CHECK(isolate->debug()->CheckExecutionState(break_id));
962 962
963 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); 963 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1);
964 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); 964 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]);
965 965
966 // Get the frame where the debugging is performed. 966 // Get the frame where the debugging is performed.
967 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id); 967 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id);
968 JavaScriptFrameIterator frame_it(isolate, id); 968 JavaScriptFrameIterator frame_it(isolate, id);
969 JavaScriptFrame* frame = frame_it.frame(); 969 JavaScriptFrame* frame = frame_it.frame();
970 FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate); 970 FrameInspector frame_inspector(frame, inlined_jsframe_index, isolate);
971 971
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 1011
1012 1012
1013 static bool IsPositionAlignmentCodeCorrect(int alignment) { 1013 static bool IsPositionAlignmentCodeCorrect(int alignment) {
1014 return alignment == STATEMENT_ALIGNED || alignment == BREAK_POSITION_ALIGNED; 1014 return alignment == STATEMENT_ALIGNED || alignment == BREAK_POSITION_ALIGNED;
1015 } 1015 }
1016 1016
1017 1017
1018 RUNTIME_FUNCTION(Runtime_GetBreakLocations) { 1018 RUNTIME_FUNCTION(Runtime_GetBreakLocations) {
1019 HandleScope scope(isolate); 1019 HandleScope scope(isolate);
1020 DCHECK(args.length() == 2); 1020 DCHECK(args.length() == 2);
1021 RUNTIME_ASSERT(isolate->debug()->is_active()); 1021 CHECK(isolate->debug()->is_active());
1022 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); 1022 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0);
1023 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[1]); 1023 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[1]);
1024 1024
1025 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) { 1025 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) {
1026 return isolate->ThrowIllegalOperation(); 1026 return isolate->ThrowIllegalOperation();
1027 } 1027 }
1028 BreakPositionAlignment alignment = 1028 BreakPositionAlignment alignment =
1029 static_cast<BreakPositionAlignment>(statement_aligned_code); 1029 static_cast<BreakPositionAlignment>(statement_aligned_code);
1030 1030
1031 Handle<SharedFunctionInfo> shared(fun->shared()); 1031 Handle<SharedFunctionInfo> shared(fun->shared());
1032 // Find the number of break points 1032 // Find the number of break points
1033 Handle<Object> break_locations = 1033 Handle<Object> break_locations =
1034 Debug::GetSourceBreakLocations(shared, alignment); 1034 Debug::GetSourceBreakLocations(shared, alignment);
1035 if (break_locations->IsUndefined(isolate)) { 1035 if (break_locations->IsUndefined(isolate)) {
1036 return isolate->heap()->undefined_value(); 1036 return isolate->heap()->undefined_value();
1037 } 1037 }
1038 // Return array as JS array 1038 // Return array as JS array
1039 return *isolate->factory()->NewJSArrayWithElements( 1039 return *isolate->factory()->NewJSArrayWithElements(
1040 Handle<FixedArray>::cast(break_locations)); 1040 Handle<FixedArray>::cast(break_locations));
1041 } 1041 }
1042 1042
1043 1043
1044 // Set a break point in a function. 1044 // Set a break point in a function.
1045 // args[0]: function 1045 // args[0]: function
1046 // args[1]: number: break source position (within the function source) 1046 // args[1]: number: break source position (within the function source)
1047 // args[2]: number: break point object 1047 // args[2]: number: break point object
1048 RUNTIME_FUNCTION(Runtime_SetFunctionBreakPoint) { 1048 RUNTIME_FUNCTION(Runtime_SetFunctionBreakPoint) {
1049 HandleScope scope(isolate); 1049 HandleScope scope(isolate);
1050 DCHECK(args.length() == 3); 1050 DCHECK(args.length() == 3);
1051 RUNTIME_ASSERT(isolate->debug()->is_active()); 1051 CHECK(isolate->debug()->is_active());
1052 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); 1052 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
1053 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]); 1053 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]);
1054 RUNTIME_ASSERT(source_position >= function->shared()->start_position() && 1054 CHECK(source_position >= function->shared()->start_position() &&
1055 source_position <= function->shared()->end_position()); 1055 source_position <= function->shared()->end_position());
1056 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 2); 1056 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 2);
1057 1057
1058 // Set break point. 1058 // Set break point.
1059 RUNTIME_ASSERT(isolate->debug()->SetBreakPoint( 1059 CHECK(isolate->debug()->SetBreakPoint(function, break_point_object_arg,
1060 function, break_point_object_arg, &source_position)); 1060 &source_position));
1061 1061
1062 return Smi::FromInt(source_position); 1062 return Smi::FromInt(source_position);
1063 } 1063 }
1064 1064
1065 1065
1066 // Changes the state of a break point in a script and returns source position 1066 // Changes the state of a break point in a script and returns source position
1067 // where break point was set. NOTE: Regarding performance see the NOTE for 1067 // where break point was set. NOTE: Regarding performance see the NOTE for
1068 // GetScriptFromScriptData. 1068 // GetScriptFromScriptData.
1069 // args[0]: script to set break point in 1069 // args[0]: script to set break point in
1070 // args[1]: number: break source position (within the script source) 1070 // args[1]: number: break source position (within the script source)
1071 // args[2]: number, breakpoint position alignment 1071 // args[2]: number, breakpoint position alignment
1072 // args[3]: number: break point object 1072 // args[3]: number: break point object
1073 RUNTIME_FUNCTION(Runtime_SetScriptBreakPoint) { 1073 RUNTIME_FUNCTION(Runtime_SetScriptBreakPoint) {
1074 HandleScope scope(isolate); 1074 HandleScope scope(isolate);
1075 DCHECK(args.length() == 4); 1075 DCHECK(args.length() == 4);
1076 RUNTIME_ASSERT(isolate->debug()->is_active()); 1076 CHECK(isolate->debug()->is_active());
1077 CONVERT_ARG_HANDLE_CHECKED(JSValue, wrapper, 0); 1077 CONVERT_ARG_HANDLE_CHECKED(JSValue, wrapper, 0);
1078 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]); 1078 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]);
1079 RUNTIME_ASSERT(source_position >= 0); 1079 CHECK(source_position >= 0);
1080 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[2]); 1080 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[2]);
1081 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 3); 1081 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 3);
1082 1082
1083 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) { 1083 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) {
1084 return isolate->ThrowIllegalOperation(); 1084 return isolate->ThrowIllegalOperation();
1085 } 1085 }
1086 BreakPositionAlignment alignment = 1086 BreakPositionAlignment alignment =
1087 static_cast<BreakPositionAlignment>(statement_aligned_code); 1087 static_cast<BreakPositionAlignment>(statement_aligned_code);
1088 1088
1089 // Get the script from the script wrapper. 1089 // Get the script from the script wrapper.
1090 RUNTIME_ASSERT(wrapper->value()->IsScript()); 1090 CHECK(wrapper->value()->IsScript());
1091 Handle<Script> script(Script::cast(wrapper->value())); 1091 Handle<Script> script(Script::cast(wrapper->value()));
1092 1092
1093 // Set break point. 1093 // Set break point.
1094 if (!isolate->debug()->SetBreakPointForScript(script, break_point_object_arg, 1094 if (!isolate->debug()->SetBreakPointForScript(script, break_point_object_arg,
1095 &source_position, alignment)) { 1095 &source_position, alignment)) {
1096 return isolate->heap()->undefined_value(); 1096 return isolate->heap()->undefined_value();
1097 } 1097 }
1098 1098
1099 return Smi::FromInt(source_position); 1099 return Smi::FromInt(source_position);
1100 } 1100 }
1101 1101
1102 1102
1103 // Clear a break point 1103 // Clear a break point
1104 // args[0]: number: break point object 1104 // args[0]: number: break point object
1105 RUNTIME_FUNCTION(Runtime_ClearBreakPoint) { 1105 RUNTIME_FUNCTION(Runtime_ClearBreakPoint) {
1106 HandleScope scope(isolate); 1106 HandleScope scope(isolate);
1107 DCHECK(args.length() == 1); 1107 DCHECK(args.length() == 1);
1108 RUNTIME_ASSERT(isolate->debug()->is_active()); 1108 CHECK(isolate->debug()->is_active());
1109 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 0); 1109 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 0);
1110 1110
1111 // Clear break point. 1111 // Clear break point.
1112 isolate->debug()->ClearBreakPoint(break_point_object_arg); 1112 isolate->debug()->ClearBreakPoint(break_point_object_arg);
1113 1113
1114 return isolate->heap()->undefined_value(); 1114 return isolate->heap()->undefined_value();
1115 } 1115 }
1116 1116
1117 1117
1118 // Change the state of break on exceptions. 1118 // Change the state of break on exceptions.
(...skipping 29 matching lines...) Expand all
1148 1148
1149 // Prepare for stepping 1149 // Prepare for stepping
1150 // args[0]: break id for checking execution state 1150 // args[0]: break id for checking execution state
1151 // args[1]: step action from the enumeration StepAction 1151 // args[1]: step action from the enumeration StepAction
1152 // args[2]: number of times to perform the step, for step out it is the number 1152 // args[2]: number of times to perform the step, for step out it is the number
1153 // of frames to step down. 1153 // of frames to step down.
1154 RUNTIME_FUNCTION(Runtime_PrepareStep) { 1154 RUNTIME_FUNCTION(Runtime_PrepareStep) {
1155 HandleScope scope(isolate); 1155 HandleScope scope(isolate);
1156 DCHECK(args.length() == 2); 1156 DCHECK(args.length() == 2);
1157 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 1157 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
1158 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 1158 CHECK(isolate->debug()->CheckExecutionState(break_id));
1159 1159
1160 if (!args[1]->IsNumber()) { 1160 if (!args[1]->IsNumber()) {
1161 return isolate->Throw(isolate->heap()->illegal_argument_string()); 1161 return isolate->Throw(isolate->heap()->illegal_argument_string());
1162 } 1162 }
1163 1163
1164 // Get the step action and check validity. 1164 // Get the step action and check validity.
1165 StepAction step_action = static_cast<StepAction>(NumberToInt32(args[1])); 1165 StepAction step_action = static_cast<StepAction>(NumberToInt32(args[1]));
1166 if (step_action != StepIn && step_action != StepNext && 1166 if (step_action != StepIn && step_action != StepNext &&
1167 step_action != StepOut && step_action != StepFrame) { 1167 step_action != StepOut && step_action != StepFrame) {
1168 return isolate->Throw(isolate->heap()->illegal_argument_string()); 1168 return isolate->Throw(isolate->heap()->illegal_argument_string());
1169 } 1169 }
1170 1170
1171 // Clear all current stepping setup. 1171 // Clear all current stepping setup.
1172 isolate->debug()->ClearStepping(); 1172 isolate->debug()->ClearStepping();
1173 1173
1174 // Prepare step. 1174 // Prepare step.
1175 isolate->debug()->PrepareStep(static_cast<StepAction>(step_action)); 1175 isolate->debug()->PrepareStep(static_cast<StepAction>(step_action));
1176 return isolate->heap()->undefined_value(); 1176 return isolate->heap()->undefined_value();
1177 } 1177 }
1178 1178
1179 1179
1180 // Clear all stepping set by PrepareStep. 1180 // Clear all stepping set by PrepareStep.
1181 RUNTIME_FUNCTION(Runtime_ClearStepping) { 1181 RUNTIME_FUNCTION(Runtime_ClearStepping) {
1182 HandleScope scope(isolate); 1182 HandleScope scope(isolate);
1183 DCHECK(args.length() == 0); 1183 DCHECK(args.length() == 0);
1184 RUNTIME_ASSERT(isolate->debug()->is_active()); 1184 CHECK(isolate->debug()->is_active());
1185 isolate->debug()->ClearStepping(); 1185 isolate->debug()->ClearStepping();
1186 return isolate->heap()->undefined_value(); 1186 return isolate->heap()->undefined_value();
1187 } 1187 }
1188 1188
1189 1189
1190 RUNTIME_FUNCTION(Runtime_DebugEvaluate) { 1190 RUNTIME_FUNCTION(Runtime_DebugEvaluate) {
1191 HandleScope scope(isolate); 1191 HandleScope scope(isolate);
1192 1192
1193 // Check the execution state and decode arguments frame and source to be 1193 // Check the execution state and decode arguments frame and source to be
1194 // evaluated. 1194 // evaluated.
1195 DCHECK(args.length() == 6); 1195 DCHECK(args.length() == 6);
1196 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 1196 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
1197 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 1197 CHECK(isolate->debug()->CheckExecutionState(break_id));
1198 1198
1199 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); 1199 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1);
1200 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); 1200 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]);
1201 CONVERT_ARG_HANDLE_CHECKED(String, source, 3); 1201 CONVERT_ARG_HANDLE_CHECKED(String, source, 3);
1202 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 4); 1202 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 4);
1203 CONVERT_ARG_HANDLE_CHECKED(HeapObject, context_extension, 5); 1203 CONVERT_ARG_HANDLE_CHECKED(HeapObject, context_extension, 5);
1204 1204
1205 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id); 1205 StackFrame::Id id = DebugFrameHelper::UnwrapFrameId(wrapped_id);
1206 1206
1207 RETURN_RESULT_OR_FAILURE( 1207 RETURN_RESULT_OR_FAILURE(
1208 isolate, DebugEvaluate::Local(isolate, id, inlined_jsframe_index, source, 1208 isolate, DebugEvaluate::Local(isolate, id, inlined_jsframe_index, source,
1209 disable_break, context_extension)); 1209 disable_break, context_extension));
1210 } 1210 }
1211 1211
1212 1212
1213 RUNTIME_FUNCTION(Runtime_DebugEvaluateGlobal) { 1213 RUNTIME_FUNCTION(Runtime_DebugEvaluateGlobal) {
1214 HandleScope scope(isolate); 1214 HandleScope scope(isolate);
1215 1215
1216 // Check the execution state and decode arguments frame and source to be 1216 // Check the execution state and decode arguments frame and source to be
1217 // evaluated. 1217 // evaluated.
1218 DCHECK(args.length() == 4); 1218 DCHECK(args.length() == 4);
1219 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); 1219 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]);
1220 RUNTIME_ASSERT(isolate->debug()->CheckExecutionState(break_id)); 1220 CHECK(isolate->debug()->CheckExecutionState(break_id));
1221 1221
1222 CONVERT_ARG_HANDLE_CHECKED(String, source, 1); 1222 CONVERT_ARG_HANDLE_CHECKED(String, source, 1);
1223 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 2); 1223 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 2);
1224 CONVERT_ARG_HANDLE_CHECKED(HeapObject, context_extension, 3); 1224 CONVERT_ARG_HANDLE_CHECKED(HeapObject, context_extension, 3);
1225 1225
1226 RETURN_RESULT_OR_FAILURE( 1226 RETURN_RESULT_OR_FAILURE(
1227 isolate, 1227 isolate,
1228 DebugEvaluate::Global(isolate, source, disable_break, context_extension)); 1228 DebugEvaluate::Global(isolate, source, disable_break, context_extension));
1229 } 1229 }
1230 1230
1231 1231
1232 RUNTIME_FUNCTION(Runtime_DebugGetLoadedScripts) { 1232 RUNTIME_FUNCTION(Runtime_DebugGetLoadedScripts) {
1233 HandleScope scope(isolate); 1233 HandleScope scope(isolate);
1234 DCHECK(args.length() == 0); 1234 DCHECK(args.length() == 0);
1235 RUNTIME_ASSERT(isolate->debug()->is_active()); 1235
1236 // This runtime function is used by the debugger to determine whether the
1237 // debugger is active or not. Hence we fail gracefully here and don't crash.
1238 if (!isolate->debug()->is_active()) return isolate->ThrowIllegalOperation();
1236 1239
1237 Handle<FixedArray> instances; 1240 Handle<FixedArray> instances;
1238 { 1241 {
1239 DebugScope debug_scope(isolate->debug()); 1242 DebugScope debug_scope(isolate->debug());
1240 if (debug_scope.failed()) { 1243 if (debug_scope.failed()) {
1241 DCHECK(isolate->has_pending_exception()); 1244 DCHECK(isolate->has_pending_exception());
1242 return isolate->heap()->exception(); 1245 return isolate->heap()->exception();
1243 } 1246 }
1244 // Fill the script objects. 1247 // Fill the script objects.
1245 instances = isolate->debug()->GetLoadedScripts(); 1248 instances = isolate->debug()->GetLoadedScripts();
(...skipping 29 matching lines...) Expand all
1275 1278
1276 // Scan the heap for objects with direct references to an object 1279 // Scan the heap for objects with direct references to an object
1277 // args[0]: the object to find references to 1280 // args[0]: the object to find references to
1278 // args[1]: constructor function for instances to exclude (Mirror) 1281 // args[1]: constructor function for instances to exclude (Mirror)
1279 // args[2]: the the maximum number of objects to return 1282 // args[2]: the the maximum number of objects to return
1280 RUNTIME_FUNCTION(Runtime_DebugReferencedBy) { 1283 RUNTIME_FUNCTION(Runtime_DebugReferencedBy) {
1281 HandleScope scope(isolate); 1284 HandleScope scope(isolate);
1282 DCHECK(args.length() == 3); 1285 DCHECK(args.length() == 3);
1283 CONVERT_ARG_HANDLE_CHECKED(JSObject, target, 0); 1286 CONVERT_ARG_HANDLE_CHECKED(JSObject, target, 0);
1284 CONVERT_ARG_HANDLE_CHECKED(Object, filter, 1); 1287 CONVERT_ARG_HANDLE_CHECKED(Object, filter, 1);
1285 RUNTIME_ASSERT(filter->IsUndefined(isolate) || filter->IsJSObject()); 1288 CHECK(filter->IsUndefined(isolate) || filter->IsJSObject());
1286 CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[2]); 1289 CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[2]);
1287 RUNTIME_ASSERT(max_references >= 0); 1290 CHECK(max_references >= 0);
1288 1291
1289 List<Handle<JSObject> > instances; 1292 List<Handle<JSObject> > instances;
1290 Heap* heap = isolate->heap(); 1293 Heap* heap = isolate->heap();
1291 { 1294 {
1292 HeapIterator iterator(heap, HeapIterator::kFilterUnreachable); 1295 HeapIterator iterator(heap, HeapIterator::kFilterUnreachable);
1293 // Get the constructor function for context extension and arguments array. 1296 // Get the constructor function for context extension and arguments array.
1294 Object* arguments_fun = isolate->sloppy_arguments_map()->GetConstructor(); 1297 Object* arguments_fun = isolate->sloppy_arguments_map()->GetConstructor();
1295 HeapObject* heap_obj; 1298 HeapObject* heap_obj;
1296 while ((heap_obj = iterator.next())) { 1299 while ((heap_obj = iterator.next())) {
1297 if (!heap_obj->IsJSObject()) continue; 1300 if (!heap_obj->IsJSObject()) continue;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 1335
1333 1336
1334 // Scan the heap for objects constructed by a specific function. 1337 // Scan the heap for objects constructed by a specific function.
1335 // args[0]: the constructor to find instances of 1338 // args[0]: the constructor to find instances of
1336 // args[1]: the the maximum number of objects to return 1339 // args[1]: the the maximum number of objects to return
1337 RUNTIME_FUNCTION(Runtime_DebugConstructedBy) { 1340 RUNTIME_FUNCTION(Runtime_DebugConstructedBy) {
1338 HandleScope scope(isolate); 1341 HandleScope scope(isolate);
1339 DCHECK(args.length() == 2); 1342 DCHECK(args.length() == 2);
1340 CONVERT_ARG_HANDLE_CHECKED(JSFunction, constructor, 0); 1343 CONVERT_ARG_HANDLE_CHECKED(JSFunction, constructor, 0);
1341 CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[1]); 1344 CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[1]);
1342 RUNTIME_ASSERT(max_references >= 0); 1345 CHECK(max_references >= 0);
1343 1346
1344 List<Handle<JSObject> > instances; 1347 List<Handle<JSObject> > instances;
1345 Heap* heap = isolate->heap(); 1348 Heap* heap = isolate->heap();
1346 { 1349 {
1347 HeapIterator iterator(heap, HeapIterator::kFilterUnreachable); 1350 HeapIterator iterator(heap, HeapIterator::kFilterUnreachable);
1348 HeapObject* heap_obj; 1351 HeapObject* heap_obj;
1349 while ((heap_obj = iterator.next())) { 1352 while ((heap_obj = iterator.next())) {
1350 if (!heap_obj->IsJSObject()) continue; 1353 if (!heap_obj->IsJSObject()) continue;
1351 JSObject* obj = JSObject::cast(heap_obj); 1354 JSObject* obj = JSObject::cast(heap_obj);
1352 if (obj->map()->GetConstructor() != *constructor) continue; 1355 if (obj->map()->GetConstructor() != *constructor) continue;
(...skipping 25 matching lines...) Expand all
1378 1381
1379 1382
1380 // Patches script source (should be called upon BeforeCompile event). 1383 // Patches script source (should be called upon BeforeCompile event).
1381 RUNTIME_FUNCTION(Runtime_DebugSetScriptSource) { 1384 RUNTIME_FUNCTION(Runtime_DebugSetScriptSource) {
1382 HandleScope scope(isolate); 1385 HandleScope scope(isolate);
1383 DCHECK(args.length() == 2); 1386 DCHECK(args.length() == 2);
1384 1387
1385 CONVERT_ARG_HANDLE_CHECKED(JSValue, script_wrapper, 0); 1388 CONVERT_ARG_HANDLE_CHECKED(JSValue, script_wrapper, 0);
1386 CONVERT_ARG_HANDLE_CHECKED(String, source, 1); 1389 CONVERT_ARG_HANDLE_CHECKED(String, source, 1);
1387 1390
1388 RUNTIME_ASSERT(script_wrapper->value()->IsScript()); 1391 CHECK(script_wrapper->value()->IsScript());
1389 Handle<Script> script(Script::cast(script_wrapper->value())); 1392 Handle<Script> script(Script::cast(script_wrapper->value()));
1390 1393
1391 int compilation_state = script->compilation_state(); 1394 // The following condition is not guaranteed to hold and a failure is also
1392 RUNTIME_ASSERT(compilation_state == Script::COMPILATION_STATE_INITIAL); 1395 // propagated to callers. Hence we fail gracefully here and don't crash.
1396 if (script->compilation_state() != Script::COMPILATION_STATE_INITIAL) {
1397 return isolate->ThrowIllegalOperation();
1398 }
1399
1393 script->set_source(*source); 1400 script->set_source(*source);
1394 1401
1395 return isolate->heap()->undefined_value(); 1402 return isolate->heap()->undefined_value();
1396 } 1403 }
1397 1404
1398 1405
1399 RUNTIME_FUNCTION(Runtime_FunctionGetInferredName) { 1406 RUNTIME_FUNCTION(Runtime_FunctionGetInferredName) {
1400 SealHandleScope shs(isolate); 1407 SealHandleScope shs(isolate);
1401 DCHECK_EQ(1, args.length()); 1408 DCHECK_EQ(1, args.length());
1402 1409
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1511 1518
1512 if (found.is_null()) return isolate->heap()->undefined_value(); 1519 if (found.is_null()) return isolate->heap()->undefined_value();
1513 return *Script::GetWrapper(found); 1520 return *Script::GetWrapper(found);
1514 } 1521 }
1515 1522
1516 RUNTIME_FUNCTION(Runtime_ScriptLineCount) { 1523 RUNTIME_FUNCTION(Runtime_ScriptLineCount) {
1517 HandleScope scope(isolate); 1524 HandleScope scope(isolate);
1518 DCHECK(args.length() == 1); 1525 DCHECK(args.length() == 1);
1519 CONVERT_ARG_CHECKED(JSValue, script, 0); 1526 CONVERT_ARG_CHECKED(JSValue, script, 0);
1520 1527
1521 RUNTIME_ASSERT(script->value()->IsScript()); 1528 CHECK(script->value()->IsScript());
1522 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value())); 1529 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value()));
1523 1530
1524 Script::InitLineEnds(script_handle); 1531 Script::InitLineEnds(script_handle);
1525 1532
1526 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends()); 1533 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends());
1527 return Smi::FromInt(line_ends_array->length()); 1534 return Smi::FromInt(line_ends_array->length());
1528 } 1535 }
1529 1536
1530 RUNTIME_FUNCTION(Runtime_ScriptLineStartPosition) { 1537 RUNTIME_FUNCTION(Runtime_ScriptLineStartPosition) {
1531 HandleScope scope(isolate); 1538 HandleScope scope(isolate);
1532 DCHECK(args.length() == 2); 1539 DCHECK(args.length() == 2);
1533 CONVERT_ARG_CHECKED(JSValue, script, 0); 1540 CONVERT_ARG_CHECKED(JSValue, script, 0);
1534 CONVERT_NUMBER_CHECKED(int32_t, line, Int32, args[1]); 1541 CONVERT_NUMBER_CHECKED(int32_t, line, Int32, args[1]);
1535 1542
1536 RUNTIME_ASSERT(script->value()->IsScript()); 1543 CHECK(script->value()->IsScript());
1537 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value())); 1544 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value()));
1538 1545
1539 Script::InitLineEnds(script_handle); 1546 Script::InitLineEnds(script_handle);
1540 1547
1541 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends()); 1548 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends());
1542 const int line_count = line_ends_array->length(); 1549 const int line_count = line_ends_array->length();
1543 1550
1544 // If line == line_count, we return the first position beyond the last line. 1551 // If line == line_count, we return the first position beyond the last line.
1545 if (line < 0 || line > line_count) { 1552 if (line < 0 || line > line_count) {
1546 return Smi::FromInt(-1); 1553 return Smi::FromInt(-1);
1547 } else if (line == 0) { 1554 } else if (line == 0) {
1548 return Smi::FromInt(0); 1555 return Smi::FromInt(0);
1549 } else { 1556 } else {
1550 DCHECK(0 < line && line <= line_count); 1557 DCHECK(0 < line && line <= line_count);
1551 const int pos = Smi::cast(line_ends_array->get(line - 1))->value() + 1; 1558 const int pos = Smi::cast(line_ends_array->get(line - 1))->value() + 1;
1552 return Smi::FromInt(pos); 1559 return Smi::FromInt(pos);
1553 } 1560 }
1554 } 1561 }
1555 1562
1556 RUNTIME_FUNCTION(Runtime_ScriptLineEndPosition) { 1563 RUNTIME_FUNCTION(Runtime_ScriptLineEndPosition) {
1557 HandleScope scope(isolate); 1564 HandleScope scope(isolate);
1558 DCHECK(args.length() == 2); 1565 DCHECK(args.length() == 2);
1559 CONVERT_ARG_CHECKED(JSValue, script, 0); 1566 CONVERT_ARG_CHECKED(JSValue, script, 0);
1560 CONVERT_NUMBER_CHECKED(int32_t, line, Int32, args[1]); 1567 CONVERT_NUMBER_CHECKED(int32_t, line, Int32, args[1]);
1561 1568
1562 RUNTIME_ASSERT(script->value()->IsScript()); 1569 CHECK(script->value()->IsScript());
1563 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value())); 1570 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value()));
1564 1571
1565 Script::InitLineEnds(script_handle); 1572 Script::InitLineEnds(script_handle);
1566 1573
1567 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends()); 1574 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends());
1568 const int line_count = line_ends_array->length(); 1575 const int line_count = line_ends_array->length();
1569 1576
1570 if (line < 0 || line >= line_count) { 1577 if (line < 0 || line >= line_count) {
1571 return Smi::FromInt(-1); 1578 return Smi::FromInt(-1);
1572 } else { 1579 } else {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1611 // used to find a source position in a function based on a line and column in 1618 // used to find a source position in a function based on a line and column in
1612 // the source for the function alone. The offset passed will then be the 1619 // the source for the function alone. The offset passed will then be the
1613 // start position of the source for the function within the full script source. 1620 // start position of the source for the function within the full script source.
1614 // Note that incoming line and column parameters may be undefined, and are 1621 // Note that incoming line and column parameters may be undefined, and are
1615 // assumed to be passed *with* offsets. 1622 // assumed to be passed *with* offsets.
1616 RUNTIME_FUNCTION(Runtime_ScriptLocationFromLine) { 1623 RUNTIME_FUNCTION(Runtime_ScriptLocationFromLine) {
1617 HandleScope scope(isolate); 1624 HandleScope scope(isolate);
1618 DCHECK(args.length() == 4); 1625 DCHECK(args.length() == 4);
1619 CONVERT_ARG_CHECKED(JSValue, script, 0); 1626 CONVERT_ARG_CHECKED(JSValue, script, 0);
1620 1627
1621 RUNTIME_ASSERT(script->value()->IsScript()); 1628 CHECK(script->value()->IsScript());
1622 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value())); 1629 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value()));
1623 1630
1624 // Line and column are possibly undefined and we need to handle these cases, 1631 // Line and column are possibly undefined and we need to handle these cases,
1625 // additionally subtracting corresponding offsets. 1632 // additionally subtracting corresponding offsets.
1626 1633
1627 int32_t line; 1634 int32_t line;
1628 if (args[1]->IsNull(isolate) || args[1]->IsUndefined(isolate)) { 1635 if (args[1]->IsNull(isolate) || args[1]->IsUndefined(isolate)) {
1629 line = 0; 1636 line = 0;
1630 } else { 1637 } else {
1631 RUNTIME_ASSERT(args[1]->IsNumber()); 1638 CHECK(args[1]->IsNumber());
1632 line = NumberToInt32(args[1]) - script_handle->line_offset(); 1639 line = NumberToInt32(args[1]) - script_handle->line_offset();
1633 } 1640 }
1634 1641
1635 int32_t column; 1642 int32_t column;
1636 if (args[2]->IsNull(isolate) || args[2]->IsUndefined(isolate)) { 1643 if (args[2]->IsNull(isolate) || args[2]->IsUndefined(isolate)) {
1637 column = 0; 1644 column = 0;
1638 } else { 1645 } else {
1639 RUNTIME_ASSERT(args[2]->IsNumber()); 1646 CHECK(args[2]->IsNumber());
1640 column = NumberToInt32(args[2]); 1647 column = NumberToInt32(args[2]);
1641 if (line == 0) column -= script_handle->column_offset(); 1648 if (line == 0) column -= script_handle->column_offset();
1642 } 1649 }
1643 1650
1644 CONVERT_NUMBER_CHECKED(int32_t, offset_position, Int32, args[3]); 1651 CONVERT_NUMBER_CHECKED(int32_t, offset_position, Int32, args[3]);
1645 1652
1646 if (line < 0 || column < 0 || offset_position < 0) { 1653 if (line < 0 || column < 0 || offset_position < 0) {
1647 return isolate->heap()->null_value(); 1654 return isolate->heap()->null_value();
1648 } 1655 }
1649 1656
(...skipping 25 matching lines...) Expand all
1675 isolate); 1682 isolate);
1676 } 1683 }
1677 1684
1678 RUNTIME_FUNCTION(Runtime_ScriptPositionInfo) { 1685 RUNTIME_FUNCTION(Runtime_ScriptPositionInfo) {
1679 HandleScope scope(isolate); 1686 HandleScope scope(isolate);
1680 DCHECK(args.length() == 3); 1687 DCHECK(args.length() == 3);
1681 CONVERT_ARG_CHECKED(JSValue, script, 0); 1688 CONVERT_ARG_CHECKED(JSValue, script, 0);
1682 CONVERT_NUMBER_CHECKED(int32_t, position, Int32, args[1]); 1689 CONVERT_NUMBER_CHECKED(int32_t, position, Int32, args[1]);
1683 CONVERT_BOOLEAN_ARG_CHECKED(with_offset, 2); 1690 CONVERT_BOOLEAN_ARG_CHECKED(with_offset, 2);
1684 1691
1685 RUNTIME_ASSERT(script->value()->IsScript()); 1692 CHECK(script->value()->IsScript());
1686 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value())); 1693 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value()));
1687 1694
1688 const Script::OffsetFlag offset_flag = 1695 const Script::OffsetFlag offset_flag =
1689 with_offset ? Script::WITH_OFFSET : Script::NO_OFFSET; 1696 with_offset ? Script::WITH_OFFSET : Script::NO_OFFSET;
1690 return *GetJSPositionInfo(script_handle, position, offset_flag, isolate); 1697 return *GetJSPositionInfo(script_handle, position, offset_flag, isolate);
1691 } 1698 }
1692 1699
1693 // Returns the given line as a string, or null if line is out of bounds. 1700 // Returns the given line as a string, or null if line is out of bounds.
1694 // The parameter line is expected to include the script's line offset. 1701 // The parameter line is expected to include the script's line offset.
1695 RUNTIME_FUNCTION(Runtime_ScriptSourceLine) { 1702 RUNTIME_FUNCTION(Runtime_ScriptSourceLine) {
1696 HandleScope scope(isolate); 1703 HandleScope scope(isolate);
1697 DCHECK(args.length() == 2); 1704 DCHECK(args.length() == 2);
1698 CONVERT_ARG_CHECKED(JSValue, script, 0); 1705 CONVERT_ARG_CHECKED(JSValue, script, 0);
1699 CONVERT_NUMBER_CHECKED(int32_t, line, Int32, args[1]); 1706 CONVERT_NUMBER_CHECKED(int32_t, line, Int32, args[1]);
1700 1707
1701 RUNTIME_ASSERT(script->value()->IsScript()); 1708 CHECK(script->value()->IsScript());
1702 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value())); 1709 Handle<Script> script_handle = Handle<Script>(Script::cast(script->value()));
1703 1710
1704 Script::InitLineEnds(script_handle); 1711 Script::InitLineEnds(script_handle);
1705 1712
1706 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends()); 1713 FixedArray* line_ends_array = FixedArray::cast(script_handle->line_ends());
1707 const int line_count = line_ends_array->length(); 1714 const int line_count = line_ends_array->length();
1708 1715
1709 line -= script_handle->line_offset(); 1716 line -= script_handle->line_offset();
1710 if (line < 0 || line_count <= line) { 1717 if (line < 0 || line_count <= line) {
1711 return isolate->heap()->null_value(); 1718 return isolate->heap()->null_value();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1786 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { 1793 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) {
1787 UNIMPLEMENTED(); 1794 UNIMPLEMENTED();
1788 return NULL; 1795 return NULL;
1789 } 1796 }
1790 1797
1791 RUNTIME_FUNCTION(Runtime_GetWasmFunctionOffsetTable) { 1798 RUNTIME_FUNCTION(Runtime_GetWasmFunctionOffsetTable) {
1792 DCHECK(args.length() == 1); 1799 DCHECK(args.length() == 1);
1793 HandleScope scope(isolate); 1800 HandleScope scope(isolate);
1794 CONVERT_ARG_CHECKED(JSValue, script_val, 0); 1801 CONVERT_ARG_CHECKED(JSValue, script_val, 0);
1795 1802
1796 RUNTIME_ASSERT(script_val->value()->IsScript()); 1803 CHECK(script_val->value()->IsScript());
1797 Handle<Script> script = Handle<Script>(Script::cast(script_val->value())); 1804 Handle<Script> script = Handle<Script>(Script::cast(script_val->value()));
1798 1805
1799 Handle<wasm::WasmDebugInfo> debug_info( 1806 Handle<wasm::WasmDebugInfo> debug_info(
1800 wasm::GetDebugInfo(script->wasm_object()), isolate); 1807 wasm::GetDebugInfo(script->wasm_object()), isolate);
1801 Handle<FixedArray> elements = wasm::WasmDebugInfo::GetFunctionOffsetTable( 1808 Handle<FixedArray> elements = wasm::WasmDebugInfo::GetFunctionOffsetTable(
1802 debug_info, script->wasm_function_index()); 1809 debug_info, script->wasm_function_index());
1803 return *isolate->factory()->NewJSArrayWithElements(elements); 1810 return *isolate->factory()->NewJSArrayWithElements(elements);
1804 } 1811 }
1805 1812
1806 RUNTIME_FUNCTION(Runtime_DisassembleWasmFunction) { 1813 RUNTIME_FUNCTION(Runtime_DisassembleWasmFunction) {
1807 DCHECK(args.length() == 1); 1814 DCHECK(args.length() == 1);
1808 HandleScope scope(isolate); 1815 HandleScope scope(isolate);
1809 CONVERT_ARG_CHECKED(JSValue, script_val, 0); 1816 CONVERT_ARG_CHECKED(JSValue, script_val, 0);
1810 1817
1811 RUNTIME_ASSERT(script_val->value()->IsScript()); 1818 CHECK(script_val->value()->IsScript());
1812 Handle<Script> script = Handle<Script>(Script::cast(script_val->value())); 1819 Handle<Script> script = Handle<Script>(Script::cast(script_val->value()));
1813 1820
1814 Handle<wasm::WasmDebugInfo> debug_info( 1821 Handle<wasm::WasmDebugInfo> debug_info(
1815 wasm::GetDebugInfo(script->wasm_object()), isolate); 1822 wasm::GetDebugInfo(script->wasm_object()), isolate);
1816 return *wasm::WasmDebugInfo::DisassembleFunction( 1823 return *wasm::WasmDebugInfo::DisassembleFunction(
1817 debug_info, script->wasm_function_index()); 1824 debug_info, script->wasm_function_index());
1818 } 1825 }
1819 1826
1820 } // namespace internal 1827 } // namespace internal
1821 } // namespace v8 1828 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/runtime/runtime-liveedit.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698