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

Unified Diff: src/debug/liveedit.cc

Issue 1493863004: Revert 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/debug/liveedit.h ('k') | src/debug/liveedit.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/debug/liveedit.cc
diff --git a/src/debug/liveedit.cc b/src/debug/liveedit.cc
index d192b755d72c551fb08e4043f824347f64355868..ff7a0e8b99c32ebc76d3f5f0f06c2687e4692c5f 100644
--- a/src/debug/liveedit.cc
+++ b/src/debug/liveedit.cc
@@ -1660,60 +1660,20 @@
// Finding no such frames does not mean error.
class MultipleFunctionTarget {
public:
- MultipleFunctionTarget(Handle<JSArray> old_shared_array,
- Handle<JSArray> new_shared_array,
- Handle<JSArray> result)
- : old_shared_array_(old_shared_array),
- new_shared_array_(new_shared_array),
- result_(result) {}
+ MultipleFunctionTarget(Handle<JSArray> shared_info_array,
+ Handle<JSArray> result)
+ : m_shared_info_array(shared_info_array),
+ m_result(result) {}
bool MatchActivation(StackFrame* frame,
LiveEdit::FunctionPatchabilityStatus status) {
- return CheckActivation(old_shared_array_, result_, frame, status);
+ return CheckActivation(m_shared_info_array, m_result, frame, status);
}
const char* GetNotFoundMessage() const {
return NULL;
}
- bool FrameUsesNewTarget(StackFrame* frame) {
- if (!frame->is_java_script()) return false;
- JavaScriptFrame* jsframe = JavaScriptFrame::cast(frame);
- Handle<SharedFunctionInfo> old_shared(jsframe->function()->shared());
- Isolate* isolate = old_shared->GetIsolate();
- int len = GetArrayLength(old_shared_array_);
- // Find corresponding new shared function info and return whether it
- // references new.target.
- for (int i = 0; i < len; i++) {
- HandleScope scope(isolate);
- Handle<Object> old_element =
- Object::GetElement(isolate, old_shared_array_, i).ToHandleChecked();
- if (!old_shared.is_identical_to(UnwrapSharedFunctionInfoFromJSValue(
- Handle<JSValue>::cast(old_element)))) {
- continue;
- }
-
- Handle<Object> new_element =
- Object::GetElement(isolate, new_shared_array_, i).ToHandleChecked();
- if (new_element->IsUndefined()) return false;
- Handle<SharedFunctionInfo> new_shared =
- UnwrapSharedFunctionInfoFromJSValue(
- Handle<JSValue>::cast(new_element));
- if (new_shared->scope_info()->HasNewTarget()) {
- SetElementSloppy(
- result_, i,
- Handle<Smi>(
- Smi::FromInt(
- LiveEdit::FUNCTION_BLOCKED_NO_NEW_TARGET_ON_RESTART),
- isolate));
- return true;
- }
- return false;
- }
- return false;
- }
-
private:
- Handle<JSArray> old_shared_array_;
- Handle<JSArray> new_shared_array_;
- Handle<JSArray> result_;
+ Handle<JSArray> m_shared_info_array;
+ Handle<JSArray> m_result;
};
@@ -1760,14 +1720,11 @@
non_droppable_reason = LiveEdit::FUNCTION_BLOCKED_UNDER_NATIVE_CODE;
break;
}
- if (frame->is_java_script()) {
- SharedFunctionInfo* shared =
- JavaScriptFrame::cast(frame)->function()->shared();
- if (shared->is_generator()) {
- non_droppable_frame_found = true;
- non_droppable_reason = LiveEdit::FUNCTION_BLOCKED_UNDER_GENERATOR;
- break;
- }
+ if (frame->is_java_script() &&
+ JavaScriptFrame::cast(frame)->function()->shared()->is_generator()) {
+ non_droppable_frame_found = true;
+ non_droppable_reason = LiveEdit::FUNCTION_BLOCKED_UNDER_GENERATOR;
+ break;
}
if (target.MatchActivation(
frame, LiveEdit::FUNCTION_BLOCKED_ON_ACTIVE_STACK)) {
@@ -1791,9 +1748,6 @@
}
}
- // We cannot restart a frame that uses new.target.
- if (target.FrameUsesNewTarget(frames[bottom_js_frame_index])) return NULL;
-
if (!do_drop) {
// We are in check-only mode.
return NULL;
@@ -1831,10 +1785,9 @@
// Fills result array with statuses of functions. Modifies the stack
// removing all listed function if possible and if do_drop is true.
static const char* DropActivationsInActiveThread(
- Handle<JSArray> old_shared_array, Handle<JSArray> new_shared_array,
- Handle<JSArray> result, bool do_drop) {
- MultipleFunctionTarget target(old_shared_array, new_shared_array, result);
- Isolate* isolate = old_shared_array->GetIsolate();
+ Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop) {
+ MultipleFunctionTarget target(shared_info_array, result);
+ Isolate* isolate = shared_info_array->GetIsolate();
const char* message =
DropActivationsInActiveThreadImpl(isolate, target, do_drop);
@@ -1842,7 +1795,7 @@
return message;
}
- int array_len = GetArrayLength(old_shared_array);
+ int array_len = GetArrayLength(shared_info_array);
// Replace "blocked on active" with "replaced on active" status.
for (int i = 0; i < array_len; i++) {
@@ -1898,16 +1851,16 @@
class InactiveThreadActivationsChecker : public ThreadVisitor {
public:
- InactiveThreadActivationsChecker(Handle<JSArray> old_shared_array,
+ InactiveThreadActivationsChecker(Handle<JSArray> shared_info_array,
Handle<JSArray> result)
- : old_shared_array_(old_shared_array),
- result_(result),
- has_blocked_functions_(false) {}
+ : shared_info_array_(shared_info_array), result_(result),
+ has_blocked_functions_(false) {
+ }
void VisitThread(Isolate* isolate, ThreadLocalTop* top) {
for (StackFrameIterator it(isolate, top); !it.done(); it.Advance()) {
- has_blocked_functions_ |=
- CheckActivation(old_shared_array_, result_, it.frame(),
- LiveEdit::FUNCTION_BLOCKED_ON_OTHER_STACK);
+ has_blocked_functions_ |= CheckActivation(
+ shared_info_array_, result_, it.frame(),
+ LiveEdit::FUNCTION_BLOCKED_ON_OTHER_STACK);
}
}
bool HasBlockedFunctions() {
@@ -1915,21 +1868,20 @@
}
private:
- Handle<JSArray> old_shared_array_;
+ Handle<JSArray> shared_info_array_;
Handle<JSArray> result_;
bool has_blocked_functions_;
};
Handle<JSArray> LiveEdit::CheckAndDropActivations(
- Handle<JSArray> old_shared_array, Handle<JSArray> new_shared_array,
- bool do_drop) {
- Isolate* isolate = old_shared_array->GetIsolate();
- int len = GetArrayLength(old_shared_array);
-
- DCHECK(old_shared_array->HasFastElements());
- Handle<FixedArray> old_shared_array_elements(
- FixedArray::cast(old_shared_array->elements()));
+ Handle<JSArray> shared_info_array, bool do_drop) {
+ Isolate* isolate = shared_info_array->GetIsolate();
+ int len = GetArrayLength(shared_info_array);
+
+ DCHECK(shared_info_array->HasFastElements());
+ Handle<FixedArray> shared_info_array_elements(
+ FixedArray::cast(shared_info_array->elements()));
Handle<JSArray> result = isolate->factory()->NewJSArray(len);
Handle<FixedArray> result_elements =
@@ -1945,12 +1897,12 @@
// running (as we wouldn't want to restart them, because we don't know where
// to restart them from) or suspended. Fail if any one corresponds to the set
// of functions being edited.
- if (FindActiveGenerators(old_shared_array_elements, result_elements, len)) {
+ if (FindActiveGenerators(shared_info_array_elements, result_elements, len)) {
return result;
}
// Check inactive threads. Fail if some functions are blocked there.
- InactiveThreadActivationsChecker inactive_threads_checker(old_shared_array,
+ InactiveThreadActivationsChecker inactive_threads_checker(shared_info_array,
result);
isolate->thread_manager()->IterateArchivedThreads(
&inactive_threads_checker);
@@ -1959,8 +1911,8 @@
}
// Try to drop activations from the current stack.
- const char* error_message = DropActivationsInActiveThread(
- old_shared_array, new_shared_array, result, do_drop);
+ const char* error_message =
+ DropActivationsInActiveThread(shared_info_array, result, do_drop);
if (error_message != NULL) {
// Add error message as an array extra element.
Handle<String> str =
@@ -1993,17 +1945,6 @@
LiveEdit::FunctionPatchabilityStatus saved_status() {
return m_saved_status;
}
- void set_status(LiveEdit::FunctionPatchabilityStatus status) {
- m_saved_status = status;
- }
-
- bool FrameUsesNewTarget(StackFrame* frame) {
- if (!frame->is_java_script()) return false;
- JavaScriptFrame* jsframe = JavaScriptFrame::cast(frame);
- Handle<SharedFunctionInfo> shared(jsframe->function()->shared());
- return shared->scope_info()->HasNewTarget();
- }
-
private:
JavaScriptFrame* m_frame;
LiveEdit::FunctionPatchabilityStatus m_saved_status;
« no previous file with comments | « src/debug/liveedit.h ('k') | src/debug/liveedit.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698