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

Side by Side Diff: src/debug/liveedit.js

Issue 1492393003: Reland of [debugger] do not restart frames that reference new.target for liveedit. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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/debug/liveedit.cc ('k') | src/debug/mips/debug-mips.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 // LiveEdit feature implementation. The script should be executed after 5 // LiveEdit feature implementation. The script should be executed after
6 // debug.js. 6 // debug.js.
7 7
8 // A LiveEdit namespace. It contains functions that modifies JavaScript code 8 // A LiveEdit namespace. It contains functions that modifies JavaScript code
9 // according to changes of script source (if possible). 9 // according to changes of script source (if possible).
10 // 10 //
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 updated: false 135 updated: false
136 }; 136 };
137 137
138 if (preview_only) { 138 if (preview_only) {
139 return preview_description; 139 return preview_description;
140 } 140 }
141 141
142 HarvestTodo(root_old_node); 142 HarvestTodo(root_old_node);
143 143
144 // Collect shared infos for functions whose code need to be patched. 144 // Collect shared infos for functions whose code need to be patched.
145 var replaced_function_infos = new GlobalArray(); 145 var replaced_function_old_infos = new GlobalArray();
146 var replaced_function_new_infos = new GlobalArray();
146 for (var i = 0; i < replace_code_list.length; i++) { 147 for (var i = 0; i < replace_code_list.length; i++) {
147 var live_shared_function_infos = 148 var old_infos = replace_code_list[i].live_shared_function_infos;
148 replace_code_list[i].live_shared_function_infos; 149 var new_info =
150 replace_code_list[i].corresponding_node.info.shared_function_info;
149 151
150 if (live_shared_function_infos) { 152 if (old_infos) {
151 for (var j = 0; j < live_shared_function_infos.length; j++) { 153 for (var j = 0; j < old_infos.length; j++) {
152 replaced_function_infos.push(live_shared_function_infos[j]); 154 replaced_function_old_infos.push(old_infos[j]);
155 replaced_function_new_infos.push(new_info);
153 } 156 }
154 } 157 }
155 } 158 }
156 159
157 // We haven't changed anything before this line yet. 160 // We haven't changed anything before this line yet.
158 // Committing all changes. 161 // Committing all changes.
159 162
160 // Check that function being patched is not currently on stack or drop them. 163 // Check that function being patched is not currently on stack or drop them.
161 var dropped_functions_number = 164 var dropped_functions_number =
162 CheckStackActivations(replaced_function_infos, change_log); 165 CheckStackActivations(replaced_function_old_infos,
166 replaced_function_new_infos,
167 change_log);
163 168
164 // Our current implementation requires client to manually issue "step in" 169 // Our current implementation requires client to manually issue "step in"
165 // command for correct stack state if the stack was modified. 170 // command for correct stack state if the stack was modified.
166 preview_description.stack_modified = dropped_functions_number != 0; 171 preview_description.stack_modified = dropped_functions_number != 0;
167 172
168 // Start with breakpoints. Convert their line/column positions and 173 // Start with breakpoints. Convert their line/column positions and
169 // temporary remove. 174 // temporary remove.
170 var break_points_restorer = TemporaryRemoveBreakPoints(script, change_log); 175 var break_points_restorer = TemporaryRemoveBreakPoints(script, change_log);
171 176
172 var old_script; 177 var old_script;
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 // No differences. Return undefined. 908 // No differences. Return undefined.
904 return; 909 return;
905 } 910 }
906 911
907 // Minifier forward declaration. 912 // Minifier forward declaration.
908 var FunctionPatchabilityStatus; 913 var FunctionPatchabilityStatus;
909 914
910 // For array of wrapped shared function infos checks that none of them 915 // For array of wrapped shared function infos checks that none of them
911 // have activations on stack (of any thread). Throws a Failure exception 916 // have activations on stack (of any thread). Throws a Failure exception
912 // if this proves to be false. 917 // if this proves to be false.
913 function CheckStackActivations(shared_wrapper_list, change_log) { 918 function CheckStackActivations(old_shared_wrapper_list,
914 var shared_list = new GlobalArray(); 919 new_shared_list,
915 for (var i = 0; i < shared_wrapper_list.length; i++) { 920 change_log) {
916 shared_list[i] = shared_wrapper_list[i].info; 921 var old_shared_list = new GlobalArray();
922 for (var i = 0; i < old_shared_wrapper_list.length; i++) {
923 old_shared_list[i] = old_shared_wrapper_list[i].info;
917 } 924 }
918 var result = %LiveEditCheckAndDropActivations(shared_list, true); 925 var result = %LiveEditCheckAndDropActivations(
919 if (result[shared_list.length]) { 926 old_shared_list, new_shared_list, true);
927 if (result[old_shared_wrapper_list.length]) {
920 // Extra array element may contain error message. 928 // Extra array element may contain error message.
921 throw new Failure(result[shared_list.length]); 929 throw new Failure(result[old_shared_wrapper_list.length]);
922 } 930 }
923 931
924 var problems = new GlobalArray(); 932 var problems = new GlobalArray();
925 var dropped = new GlobalArray(); 933 var dropped = new GlobalArray();
926 for (var i = 0; i < shared_list.length; i++) { 934 for (var i = 0; i < old_shared_list.length; i++) {
927 var shared = shared_wrapper_list[i]; 935 var shared = old_shared_wrapper_list[i];
928 if (result[i] == FunctionPatchabilityStatus.REPLACED_ON_ACTIVE_STACK) { 936 if (result[i] == FunctionPatchabilityStatus.REPLACED_ON_ACTIVE_STACK) {
929 dropped.push({ name: shared.function_name } ); 937 dropped.push({ name: shared.function_name } );
930 } else if (result[i] != FunctionPatchabilityStatus.AVAILABLE_FOR_PATCH) { 938 } else if (result[i] != FunctionPatchabilityStatus.AVAILABLE_FOR_PATCH) {
931 var description = { 939 var description = {
932 name: shared.function_name, 940 name: shared.function_name,
933 start_pos: shared.start_position, 941 start_pos: shared.start_position,
934 end_pos: shared.end_position, 942 end_pos: shared.end_position,
935 replace_problem: 943 replace_problem:
936 FunctionPatchabilityStatus.SymbolName(result[i]) 944 FunctionPatchabilityStatus.SymbolName(result[i])
937 }; 945 };
(...skipping 12 matching lines...) Expand all
950 } 958 }
951 959
952 // A copy of the FunctionPatchabilityStatus enum from liveedit.h 960 // A copy of the FunctionPatchabilityStatus enum from liveedit.h
953 var FunctionPatchabilityStatus = { 961 var FunctionPatchabilityStatus = {
954 AVAILABLE_FOR_PATCH: 1, 962 AVAILABLE_FOR_PATCH: 1,
955 BLOCKED_ON_ACTIVE_STACK: 2, 963 BLOCKED_ON_ACTIVE_STACK: 2,
956 BLOCKED_ON_OTHER_STACK: 3, 964 BLOCKED_ON_OTHER_STACK: 3,
957 BLOCKED_UNDER_NATIVE_CODE: 4, 965 BLOCKED_UNDER_NATIVE_CODE: 4,
958 REPLACED_ON_ACTIVE_STACK: 5, 966 REPLACED_ON_ACTIVE_STACK: 5,
959 BLOCKED_UNDER_GENERATOR: 6, 967 BLOCKED_UNDER_GENERATOR: 6,
960 BLOCKED_ACTIVE_GENERATOR: 7 968 BLOCKED_ACTIVE_GENERATOR: 7,
969 BLOCKED_NO_NEW_TARGET_ON_RESTART: 8
961 }; 970 };
962 971
963 FunctionPatchabilityStatus.SymbolName = function(code) { 972 FunctionPatchabilityStatus.SymbolName = function(code) {
964 var enumeration = FunctionPatchabilityStatus; 973 var enumeration = FunctionPatchabilityStatus;
965 for (var name in enumeration) { 974 for (var name in enumeration) {
966 if (enumeration[name] == code) { 975 if (enumeration[name] == code) {
967 return name; 976 return name;
968 } 977 }
969 } 978 }
970 }; 979 };
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 1123
1115 LiveEdit.TestApi = { 1124 LiveEdit.TestApi = {
1116 PosTranslator: PosTranslator, 1125 PosTranslator: PosTranslator,
1117 CompareStrings: CompareStrings, 1126 CompareStrings: CompareStrings,
1118 ApplySingleChunkPatch: ApplySingleChunkPatch 1127 ApplySingleChunkPatch: ApplySingleChunkPatch
1119 }; 1128 };
1120 1129
1121 global.Debug.LiveEdit = LiveEdit; 1130 global.Debug.LiveEdit = LiveEdit;
1122 1131
1123 }) 1132 })
OLDNEW
« no previous file with comments | « src/debug/liveedit.cc ('k') | src/debug/mips/debug-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698