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

Unified Diff: src/liveedit.cc

Issue 1090003: LiveEdit: update breakpoint positions for non-changed functions (Closed)
Patch Set: follow codereview Created 10 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/liveedit.h ('k') | src/liveedit-debugger.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/liveedit.cc
diff --git a/src/liveedit.cc b/src/liveedit.cc
index 22a26a32dc48796739682427c2ed4fb304779676..8e02b5d9e841f419db269efd7ed79d93889547ee 100644
--- a/src/liveedit.cc
+++ b/src/liveedit.cc
@@ -644,13 +644,28 @@ static Handle<Code> PatchPositionsInCode(Handle<Code> code,
}
-void LiveEdit::PatchFunctionPositions(Handle<JSArray> shared_info_array,
- Handle<JSArray> position_change_array) {
+static Handle<Object> GetBreakPointObjectsForJS(
+ Handle<BreakPointInfo> break_point_info) {
+ if (break_point_info->break_point_objects()->IsFixedArray()) {
+ Handle<FixedArray> fixed_array(
+ FixedArray::cast(break_point_info->break_point_objects()));
+ Handle<Object> array = Factory::NewJSArrayWithElements(fixed_array);
+ return array;
+ } else {
+ return Handle<Object>(break_point_info->break_point_objects());
+ }
+}
+
+
+Handle<JSArray> LiveEdit::PatchFunctionPositions(
+ Handle<JSArray> shared_info_array, Handle<JSArray> position_change_array) {
SharedInfoWrapper shared_info_wrapper(shared_info_array);
Handle<SharedFunctionInfo> info = shared_info_wrapper.GetInfo();
- info->set_start_position(TranslatePosition(info->start_position(),
- position_change_array));
+ int old_function_start = info->start_position();
+ int new_function_start = TranslatePosition(old_function_start,
+ position_change_array);
+ info->set_start_position(new_function_start);
info->set_end_position(TranslatePosition(info->end_position(),
position_change_array));
@@ -672,6 +687,10 @@ void LiveEdit::PatchFunctionPositions(Handle<JSArray> shared_info_array,
}
}
+
+ Handle<JSArray> result = Factory::NewJSArray(0);
+ int result_len = 0;
+
if (info->debug_info()->IsDebugInfo()) {
Handle<DebugInfo> debug_info(DebugInfo::cast(info->debug_info()));
Handle<Code> patched_orig_code =
@@ -690,12 +709,22 @@ void LiveEdit::PatchFunctionPositions(Handle<JSArray> shared_info_array,
}
Handle<BreakPointInfo> info(
BreakPointInfo::cast(break_point_infos->get(i)));
- int new_position = TranslatePosition(info->source_position()->value(),
+ int old_in_script_position = info->source_position()->value() +
+ old_function_start;
+ int new_in_script_position = TranslatePosition(old_in_script_position,
position_change_array);
- info->set_source_position(Smi::FromInt(new_position));
+ info->set_source_position(
+ Smi::FromInt(new_in_script_position - new_function_start));
+ if (old_in_script_position != new_in_script_position) {
+ SetElement(result, result_len,
+ Handle<Smi>(Smi::FromInt(new_in_script_position)));
+ SetElement(result, result_len + 1,
+ GetBreakPointObjectsForJS(info));
+ result_len += 2;
+ }
}
}
- // TODO(635): Also patch breakpoint objects in JS.
+ return result;
}
« no previous file with comments | « src/liveedit.h ('k') | src/liveedit-debugger.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698