| Index: src/debug.cc
|
| diff --git a/src/debug.cc b/src/debug.cc
|
| index 8c937e4902383361dc9ed6ca9445407a2cfbadd6..4d6ee180efb9a78c288eac1af76d214c71fdf1dd 100644
|
| --- a/src/debug.cc
|
| +++ b/src/debug.cc
|
| @@ -414,36 +414,15 @@ ScriptCache::~ScriptCache() {
|
| }
|
|
|
|
|
| -void Debug::HandlePhantomDebugInfo(
|
| - const v8::WeakCallbackInfo<DebugInfoListNode>& data) {
|
| - DebugInfoListNode* node = data.GetParameter();
|
| - node->ClearInfo();
|
| - Debug* debug = reinterpret_cast<Isolate*>(data.GetIsolate())->debug();
|
| - debug->RemoveDebugInfo(node);
|
| -#ifdef DEBUG
|
| - for (DebugInfoListNode* n = debug->debug_info_list_;
|
| - n != NULL;
|
| - n = n->next()) {
|
| - DCHECK(n != node);
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -
|
| DebugInfoListNode::DebugInfoListNode(DebugInfo* debug_info): next_(NULL) {
|
| // Globalize the request debug info object and make it weak.
|
| GlobalHandles* global_handles = debug_info->GetIsolate()->global_handles();
|
| debug_info_ =
|
| Handle<DebugInfo>::cast(global_handles->Create(debug_info)).location();
|
| - typedef WeakCallbackInfo<void>::Callback Callback;
|
| - GlobalHandles::MakeWeak(
|
| - reinterpret_cast<Object**>(debug_info_), this,
|
| - reinterpret_cast<Callback>(Debug::HandlePhantomDebugInfo),
|
| - v8::WeakCallbackType::kParameter);
|
| }
|
|
|
|
|
| -void DebugInfoListNode::ClearInfo() {
|
| +DebugInfoListNode::~DebugInfoListNode() {
|
| if (debug_info_ == nullptr) return;
|
| GlobalHandles::Destroy(reinterpret_cast<Object**>(debug_info_));
|
| debug_info_ = nullptr;
|
| @@ -1654,63 +1633,35 @@ bool Debug::EnsureDebugInfo(Handle<SharedFunctionInfo> shared,
|
| }
|
|
|
|
|
| -void Debug::RemoveDebugInfo(DebugInfoListNode* prev, DebugInfoListNode* node) {
|
| - // Unlink from list. If prev is NULL we are looking at the first element.
|
| - if (prev == NULL) {
|
| - debug_info_list_ = node->next();
|
| - } else {
|
| - prev->set_next(node->next());
|
| - }
|
| - delete node;
|
| -}
|
| -
|
| +void Debug::RemoveDebugInfoAndClearFromShared(Handle<DebugInfo> debug_info) {
|
| + HandleScope scope(isolate_);
|
| + Handle<SharedFunctionInfo> shared(debug_info->shared());
|
|
|
| -void Debug::RemoveDebugInfo(DebugInfo** debug_info) {
|
| - DCHECK(debug_info_list_ != NULL);
|
| + DCHECK_NOT_NULL(debug_info_list_);
|
| // Run through the debug info objects to find this one and remove it.
|
| DebugInfoListNode* prev = NULL;
|
| DebugInfoListNode* current = debug_info_list_;
|
| while (current != NULL) {
|
| - if (current->debug_info().location() == debug_info) {
|
| - RemoveDebugInfo(prev, current);
|
| + if (current->debug_info().is_identical_to(debug_info)) {
|
| + // Unlink from list. If prev is NULL we are looking at the first element.
|
| + if (prev == NULL) {
|
| + debug_info_list_ = current->next();
|
| + } else {
|
| + prev->set_next(current->next());
|
| + }
|
| + delete current;
|
| + shared->set_debug_info(isolate_->heap()->undefined_value());
|
| return;
|
| }
|
| // Move to next in list.
|
| prev = current;
|
| current = current->next();
|
| }
|
| - UNREACHABLE();
|
| -}
|
| -
|
|
|
| -void Debug::RemoveDebugInfo(DebugInfoListNode* node) {
|
| - DCHECK(debug_info_list_ != NULL);
|
| - // Run through the debug info objects to find this one and remove it.
|
| - DebugInfoListNode* prev = NULL;
|
| - DebugInfoListNode* current = debug_info_list_;
|
| - while (current != NULL) {
|
| - if (current == node) {
|
| - RemoveDebugInfo(prev, node);
|
| - return;
|
| - }
|
| - // Move to next in list.
|
| - prev = current;
|
| - current = current->next();
|
| - }
|
| UNREACHABLE();
|
| }
|
|
|
|
|
| -void Debug::RemoveDebugInfoAndClearFromShared(Handle<DebugInfo> debug_info) {
|
| - HandleScope scope(isolate_);
|
| - Handle<SharedFunctionInfo> shared(debug_info->shared());
|
| -
|
| - RemoveDebugInfo(debug_info.location());
|
| -
|
| - shared->set_debug_info(isolate_->heap()->undefined_value());
|
| -}
|
| -
|
| -
|
| void Debug::SetAfterBreakTarget(JavaScriptFrame* frame) {
|
| after_break_target_ = NULL;
|
|
|
|
|