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

Unified Diff: src/runtime.cc

Issue 1118007: LiveEdit: implement frame dropping (Closed)
Patch Set: adding rule to mjsunit.status 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/runtime.h ('k') | src/x64/debug-x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index 40b37d96e1dcb4405cb0bf0b94ad5b1997e53686..fe4ad9518d3f58bc36cbbd4aac5f87df8b5b996f 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -9693,41 +9693,18 @@ static Object* Runtime_LiveEditPatchFunctionPositions(Arguments args) {
}
-static LiveEdit::FunctionPatchabilityStatus FindFunctionCodeOnStacks(
- Handle<SharedFunctionInfo> shared) {
- // TODO(635): check all threads, not only the current one.
- for (StackFrameIterator it; !it.done(); it.Advance()) {
- StackFrame* frame = it.frame();
- if (frame->code() == shared->code()) {
- return LiveEdit::FUNCTION_BLOCKED_ON_STACK;
- }
- }
- return LiveEdit::FUNCTION_AVAILABLE_FOR_PATCH;
-}
-
// For array of SharedFunctionInfo's (each wrapped in JSValue)
// checks that none of them have activations on stacks (of any thread).
// Returns array of the same length with corresponding results of
// LiveEdit::FunctionPatchabilityStatus type.
-static Object* Runtime_LiveEditCheckStackActivations(Arguments args) {
- ASSERT(args.length() == 1);
+static Object* Runtime_LiveEditCheckAndDropActivations(Arguments args) {
+ ASSERT(args.length() == 2);
HandleScope scope;
CONVERT_ARG_CHECKED(JSArray, shared_array, 0);
+ CONVERT_BOOLEAN_CHECKED(do_drop, args[1]);
- int len = Smi::cast(shared_array->length())->value();
- Handle<JSArray> result = Factory::NewJSArray(len);
-
- for (int i = 0; i < len; i++) {
- JSValue* wrapper = JSValue::cast(shared_array->GetElement(i));
- Handle<SharedFunctionInfo> shared(
- SharedFunctionInfo::cast(wrapper->value()));
- LiveEdit::FunctionPatchabilityStatus check_res =
- FindFunctionCodeOnStacks(shared);
- SetElement(result, i, Handle<Smi>(Smi::FromInt(check_res)));
- }
-
- return *result;
+ return *LiveEdit::CheckAndDropActivations(shared_array, do_drop);
}
@@ -9761,6 +9738,35 @@ static Object* Runtime_GetFunctionCodePositionFromSource(Arguments args) {
}
+// Calls specified function with or without entering the debugger.
+// This is used in unit tests to run code as if debugger is entered or simply
+// to have a stack with C++ frame in the middle.
+static Object* Runtime_ExecuteInDebugContext(Arguments args) {
+ ASSERT(args.length() == 2);
+ HandleScope scope;
+ CONVERT_ARG_CHECKED(JSFunction, function, 0);
+ CONVERT_BOOLEAN_CHECKED(without_debugger, args[1]);
+
+ Handle<Object> result;
+ bool pending_exception;
+ {
+ if (without_debugger) {
+ result = Execution::Call(function, Top::global(), 0, NULL,
+ &pending_exception);
+ } else {
+ EnterDebugger enter_debugger;
+ result = Execution::Call(function, Top::global(), 0, NULL,
+ &pending_exception);
+ }
+ }
+ if (!pending_exception) {
+ return *result;
+ } else {
+ return Failure::Exception();
+ }
+}
+
+
#endif // ENABLE_DEBUGGER_SUPPORT
#ifdef ENABLE_LOGGING_AND_PROFILING
« no previous file with comments | « src/runtime.h ('k') | src/x64/debug-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698