| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/debug/debug.h" | 5 #include "src/debug/debug.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/arguments.h" | 8 #include "src/arguments.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 1406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1417 // and there may not be a JSFunction referencing it. Find the SFI closest to | 1417 // and there may not be a JSFunction referencing it. Find the SFI closest to |
| 1418 // the given position, compile it to reveal possible inner SFIs and repeat. | 1418 // the given position, compile it to reveal possible inner SFIs and repeat. |
| 1419 // While we are at this, also ensure code with debug break slots so that we do | 1419 // While we are at this, also ensure code with debug break slots so that we do |
| 1420 // not have to compile a SFI without JSFunction, which is paifu for those that | 1420 // not have to compile a SFI without JSFunction, which is paifu for those that |
| 1421 // cannot be compiled without context (need to find outer compilable SFI etc.) | 1421 // cannot be compiled without context (need to find outer compilable SFI etc.) |
| 1422 Handle<Object> Debug::FindSharedFunctionInfoInScript(Handle<Script> script, | 1422 Handle<Object> Debug::FindSharedFunctionInfoInScript(Handle<Script> script, |
| 1423 int position) { | 1423 int position) { |
| 1424 while (true) { | 1424 while (true) { |
| 1425 // Go through all shared function infos associated with this script to | 1425 // Go through all shared function infos associated with this script to |
| 1426 // find the inner most function containing this position. | 1426 // find the inner most function containing this position. |
| 1427 // If there is no shared function info for this script at all, there is |
| 1428 // no point in looking for it by walking the heap. |
| 1427 if (!script->shared_function_infos()->IsWeakFixedArray()) break; | 1429 if (!script->shared_function_infos()->IsWeakFixedArray()) break; |
| 1428 WeakFixedArray* array = | |
| 1429 WeakFixedArray::cast(script->shared_function_infos()); | |
| 1430 | 1430 |
| 1431 SharedFunctionInfo* shared; | 1431 SharedFunctionInfo* shared; |
| 1432 { | 1432 { |
| 1433 SharedFunctionInfoFinder finder(position); | 1433 SharedFunctionInfoFinder finder(position); |
| 1434 for (int i = 0; i < array->Length(); i++) { | 1434 WeakFixedArray::Iterator iterator(script->shared_function_infos()); |
| 1435 Object* item = array->Get(i); | 1435 SharedFunctionInfo* candidate; |
| 1436 if (!item->IsSharedFunctionInfo()) continue; | 1436 while ((candidate = iterator.Next<SharedFunctionInfo>())) { |
| 1437 finder.NewCandidate(SharedFunctionInfo::cast(item)); | 1437 finder.NewCandidate(candidate); |
| 1438 } | 1438 } |
| 1439 shared = finder.Result(); | 1439 shared = finder.Result(); |
| 1440 if (shared == NULL) break; | 1440 if (shared == NULL) break; |
| 1441 // We found it if it's already compiled and has debug code. | 1441 // We found it if it's already compiled and has debug code. |
| 1442 if (shared->HasDebugCode()) return handle(shared); | 1442 if (shared->HasDebugCode()) return handle(shared); |
| 1443 } | 1443 } |
| 1444 // If not, compile to reveal inner functions, if possible. | 1444 // If not, compile to reveal inner functions, if possible. |
| 1445 if (shared->allows_lazy_compilation_without_context()) { | 1445 if (shared->allows_lazy_compilation_without_context()) { |
| 1446 HandleScope scope(isolate_); | 1446 HandleScope scope(isolate_); |
| 1447 if (!Compiler::CompileDebugCode(handle(shared))) break; | 1447 if (!Compiler::CompileDebugCode(handle(shared))) break; |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1601 | 1601 |
| 1602 | 1602 |
| 1603 void Debug::ClearMirrorCache() { | 1603 void Debug::ClearMirrorCache() { |
| 1604 PostponeInterruptsScope postpone(isolate_); | 1604 PostponeInterruptsScope postpone(isolate_); |
| 1605 HandleScope scope(isolate_); | 1605 HandleScope scope(isolate_); |
| 1606 CallFunction("ClearMirrorCache", 0, NULL); | 1606 CallFunction("ClearMirrorCache", 0, NULL); |
| 1607 } | 1607 } |
| 1608 | 1608 |
| 1609 | 1609 |
| 1610 Handle<FixedArray> Debug::GetLoadedScripts() { | 1610 Handle<FixedArray> Debug::GetLoadedScripts() { |
| 1611 isolate_->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 1611 isolate_->heap()->CollectAllGarbage(); |
| 1612 "Debug::GetLoadedScripts"); | |
| 1613 Factory* factory = isolate_->factory(); | 1612 Factory* factory = isolate_->factory(); |
| 1614 if (!factory->script_list()->IsWeakFixedArray()) { | 1613 if (!factory->script_list()->IsWeakFixedArray()) { |
| 1615 return factory->empty_fixed_array(); | 1614 return factory->empty_fixed_array(); |
| 1616 } | 1615 } |
| 1617 Handle<WeakFixedArray> array = | 1616 Handle<WeakFixedArray> array = |
| 1618 Handle<WeakFixedArray>::cast(factory->script_list()); | 1617 Handle<WeakFixedArray>::cast(factory->script_list()); |
| 1619 Handle<FixedArray> results = factory->NewFixedArray(array->Length()); | 1618 Handle<FixedArray> results = factory->NewFixedArray(array->Length()); |
| 1620 int length = 0; | 1619 int length = 0; |
| 1621 for (int i = 0; i < array->Length(); ++i) { | 1620 { |
| 1622 Object* item = array->Get(i); | 1621 Script::Iterator iterator(isolate_); |
| 1623 if (item->IsScript() && Script::cast(item)->HasValidSource()) { | 1622 Script* script; |
| 1624 results->set(length++, item); | 1623 while ((script = iterator.Next())) { |
| 1624 if (script->HasValidSource()) results->set(length++, script); |
| 1625 } | 1625 } |
| 1626 } | 1626 } |
| 1627 results->Shrink(length); | 1627 results->Shrink(length); |
| 1628 return results; | 1628 return results; |
| 1629 } | 1629 } |
| 1630 | 1630 |
| 1631 | 1631 |
| 1632 void Debug::GetStepinPositions(JavaScriptFrame* frame, StackFrame::Id frame_id, | 1632 void Debug::GetStepinPositions(JavaScriptFrame* frame, StackFrame::Id frame_id, |
| 1633 List<int>* results_out) { | 1633 List<int>* results_out) { |
| 1634 FrameSummary summary = GetFirstFrameSummary(frame); | 1634 FrameSummary summary = GetFirstFrameSummary(frame); |
| (...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2613 } | 2613 } |
| 2614 | 2614 |
| 2615 | 2615 |
| 2616 void LockingCommandMessageQueue::Clear() { | 2616 void LockingCommandMessageQueue::Clear() { |
| 2617 base::LockGuard<base::Mutex> lock_guard(&mutex_); | 2617 base::LockGuard<base::Mutex> lock_guard(&mutex_); |
| 2618 queue_.Clear(); | 2618 queue_.Clear(); |
| 2619 } | 2619 } |
| 2620 | 2620 |
| 2621 } // namespace internal | 2621 } // namespace internal |
| 2622 } // namespace v8 | 2622 } // namespace v8 |
| OLD | NEW |