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

Side by Side Diff: src/runtime.cc

Issue 1800007: LiveEdit: breakpoints updates and fixes for related problems (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 unified diff | Download patch
« no previous file with comments | « src/runtime.h ('k') | test/mjsunit/debug-liveedit-3.js » ('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 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 9656 matching lines...) Expand 10 before | Expand all | Expand 10 after
9667 9667
9668 JSArray* result = LiveEdit::GatherCompileInfo(script_handle, source); 9668 JSArray* result = LiveEdit::GatherCompileInfo(script_handle, source);
9669 9669
9670 if (Top::has_pending_exception()) { 9670 if (Top::has_pending_exception()) {
9671 return Failure::Exception(); 9671 return Failure::Exception();
9672 } 9672 }
9673 9673
9674 return result; 9674 return result;
9675 } 9675 }
9676 9676
9677 // Changes the source of the script to a new_source and creates a new 9677 // Changes the source of the script to a new_source.
9678 // script representing the old version of the script source. 9678 // If old_script_name is provided (i.e. is a String), also creates a copy of
9679 // the script with its original source and sends notification to debugger.
9679 static Object* Runtime_LiveEditReplaceScript(Arguments args) { 9680 static Object* Runtime_LiveEditReplaceScript(Arguments args) {
9680 ASSERT(args.length() == 3); 9681 ASSERT(args.length() == 3);
9681 HandleScope scope; 9682 HandleScope scope;
9682 CONVERT_CHECKED(JSValue, original_script_value, args[0]); 9683 CONVERT_CHECKED(JSValue, original_script_value, args[0]);
9683 CONVERT_ARG_CHECKED(String, new_source, 1); 9684 CONVERT_ARG_CHECKED(String, new_source, 1);
9684 CONVERT_ARG_CHECKED(String, old_script_name, 2); 9685 Handle<Object> old_script_name(args[2]);
9685 Handle<Script> original_script =
9686 Handle<Script>(Script::cast(original_script_value->value()));
9687 9686
9688 Handle<String> original_source(String::cast(original_script->source())); 9687 CONVERT_CHECKED(Script, original_script_pointer,
9688 original_script_value->value());
9689 Handle<Script> original_script(original_script_pointer);
9689 9690
9690 original_script->set_source(*new_source); 9691 Object* old_script = LiveEdit::ChangeScriptSource(original_script,
9691 Handle<Script> old_script = Factory::NewScript(original_source); 9692 new_source,
9692 old_script->set_name(*old_script_name); 9693 old_script_name);
9693 old_script->set_line_offset(original_script->line_offset());
9694 old_script->set_column_offset(original_script->column_offset());
9695 old_script->set_data(original_script->data());
9696 old_script->set_type(original_script->type());
9697 old_script->set_context_data(original_script->context_data());
9698 old_script->set_compilation_type(original_script->compilation_type());
9699 old_script->set_eval_from_shared(original_script->eval_from_shared());
9700 old_script->set_eval_from_instructions_offset(
9701 original_script->eval_from_instructions_offset());
9702 9694
9703 // Drop line ends so that they will be recalculated. 9695 if (old_script->IsScript()) {
9704 original_script->set_line_ends(Heap::undefined_value()); 9696 Handle<Script> script_handle(Script::cast(old_script));
9705 9697 return *(GetScriptWrapper(script_handle));
9706 Debugger::OnAfterCompile(old_script, Debugger::SEND_WHEN_DEBUGGING); 9698 } else {
9707 9699 return Heap::null_value();
9708 return *(GetScriptWrapper(old_script)); 9700 }
9709 } 9701 }
9710 9702
9711 // Replaces code of SharedFunctionInfo with a new one. 9703 // Replaces code of SharedFunctionInfo with a new one.
9712 static Object* Runtime_LiveEditReplaceFunctionCode(Arguments args) { 9704 static Object* Runtime_LiveEditReplaceFunctionCode(Arguments args) {
9713 ASSERT(args.length() == 2); 9705 ASSERT(args.length() == 2);
9714 HandleScope scope; 9706 HandleScope scope;
9715 CONVERT_ARG_CHECKED(JSArray, new_compile_info, 0); 9707 CONVERT_ARG_CHECKED(JSArray, new_compile_info, 0);
9716 CONVERT_ARG_CHECKED(JSArray, shared_info, 1); 9708 CONVERT_ARG_CHECKED(JSArray, shared_info, 1);
9717 9709
9718 LiveEdit::ReplaceFunctionCode(new_compile_info, shared_info); 9710 LiveEdit::ReplaceFunctionCode(new_compile_info, shared_info);
9719 9711
9720 return Heap::undefined_value(); 9712 return Heap::undefined_value();
9721 } 9713 }
9722 9714
9723 // Connects SharedFunctionInfo to another script. 9715 // Connects SharedFunctionInfo to another script.
9724 static Object* Runtime_LiveEditRelinkFunctionToScript(Arguments args) { 9716 static Object* Runtime_LiveEditFunctionSetScript(Arguments args) {
9725 ASSERT(args.length() == 2); 9717 ASSERT(args.length() == 2);
9726 HandleScope scope; 9718 HandleScope scope;
9727 CONVERT_ARG_CHECKED(JSArray, shared_info_array, 0); 9719 Handle<Object> function_object(args[0]);
9728 CONVERT_ARG_CHECKED(JSValue, script_value, 1); 9720 Handle<Object> script_object(args[1]);
9729 Handle<Script> script = Handle<Script>(Script::cast(script_value->value()));
9730 9721
9731 LiveEdit::RelinkFunctionToScript(shared_info_array, script); 9722 if (function_object->IsJSValue()) {
9723 Handle<JSValue> function_wrapper = Handle<JSValue>::cast(function_object);
9724 if (script_object->IsJSValue()) {
9725 CONVERT_CHECKED(Script, script, JSValue::cast(*script_object)->value());
9726 script_object = Handle<Object>(script);
9727 }
9728
9729 LiveEdit::SetFunctionScript(function_wrapper, script_object);
9730 } else {
9731 // Just ignore this. We may not have a SharedFunctionInfo for some functions
9732 // and we check it in this function.
9733 }
9732 9734
9733 return Heap::undefined_value(); 9735 return Heap::undefined_value();
9734 } 9736 }
9735 9737
9738
9739 // In a code of a parent function replaces original function as embedded object
9740 // with a substitution one.
9741 static Object* Runtime_LiveEditReplaceRefToNestedFunction(Arguments args) {
9742 ASSERT(args.length() == 3);
9743 HandleScope scope;
9744
9745 CONVERT_ARG_CHECKED(JSValue, parent_wrapper, 0);
9746 CONVERT_ARG_CHECKED(JSValue, orig_wrapper, 1);
9747 CONVERT_ARG_CHECKED(JSValue, subst_wrapper, 2);
9748
9749 LiveEdit::ReplaceRefToNestedFunction(parent_wrapper, orig_wrapper,
9750 subst_wrapper);
9751
9752 return Heap::undefined_value();
9753 }
9754
9755
9736 // Updates positions of a shared function info (first parameter) according 9756 // Updates positions of a shared function info (first parameter) according
9737 // to script source change. Text change is described in second parameter as 9757 // to script source change. Text change is described in second parameter as
9738 // array of groups of 3 numbers: 9758 // array of groups of 3 numbers:
9739 // (change_begin, change_end, change_end_new_position). 9759 // (change_begin, change_end, change_end_new_position).
9740 // Each group describes a change in text; groups are sorted by change_begin. 9760 // Each group describes a change in text; groups are sorted by change_begin.
9741 // Returns an array of pairs (new source position, breakpoint_object/array)
9742 // so that JS side could update positions in breakpoint objects.
9743 static Object* Runtime_LiveEditPatchFunctionPositions(Arguments args) { 9761 static Object* Runtime_LiveEditPatchFunctionPositions(Arguments args) {
9744 ASSERT(args.length() == 2); 9762 ASSERT(args.length() == 2);
9745 HandleScope scope; 9763 HandleScope scope;
9746 CONVERT_ARG_CHECKED(JSArray, shared_array, 0); 9764 CONVERT_ARG_CHECKED(JSArray, shared_array, 0);
9747 CONVERT_ARG_CHECKED(JSArray, position_change_array, 1); 9765 CONVERT_ARG_CHECKED(JSArray, position_change_array, 1);
9748 9766
9749 Handle<Object> result = 9767 LiveEdit::PatchFunctionPositions(shared_array, position_change_array);
9750 LiveEdit::PatchFunctionPositions(shared_array, position_change_array);
9751 9768
9752 return *result; 9769 return Heap::undefined_value();
9753 } 9770 }
9754 9771
9755 9772
9756 // For array of SharedFunctionInfo's (each wrapped in JSValue) 9773 // For array of SharedFunctionInfo's (each wrapped in JSValue)
9757 // checks that none of them have activations on stacks (of any thread). 9774 // checks that none of them have activations on stacks (of any thread).
9758 // Returns array of the same length with corresponding results of 9775 // Returns array of the same length with corresponding results of
9759 // LiveEdit::FunctionPatchabilityStatus type. 9776 // LiveEdit::FunctionPatchabilityStatus type.
9760 static Object* Runtime_LiveEditCheckAndDropActivations(Arguments args) { 9777 static Object* Runtime_LiveEditCheckAndDropActivations(Arguments args) {
9761 ASSERT(args.length() == 2); 9778 ASSERT(args.length() == 2);
9762 HandleScope scope; 9779 HandleScope scope;
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
10202 } else { 10219 } else {
10203 // Handle last resort GC and make sure to allow future allocations 10220 // Handle last resort GC and make sure to allow future allocations
10204 // to grow the heap without causing GCs (if possible). 10221 // to grow the heap without causing GCs (if possible).
10205 Counters::gc_last_resort_from_js.Increment(); 10222 Counters::gc_last_resort_from_js.Increment();
10206 Heap::CollectAllGarbage(false); 10223 Heap::CollectAllGarbage(false);
10207 } 10224 }
10208 } 10225 }
10209 10226
10210 10227
10211 } } // namespace v8::internal 10228 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/runtime.h ('k') | test/mjsunit/debug-liveedit-3.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698