| Index: src/debug/debug.cc
|
| diff --git a/src/debug/debug.cc b/src/debug/debug.cc
|
| index e789def917e371c1a43c540cfb92c1daa5553b70..2bda0a7137a12323e2f112be99bc07b4d452fb29 100644
|
| --- a/src/debug/debug.cc
|
| +++ b/src/debug/debug.cc
|
| @@ -40,7 +40,6 @@ Debug::Debug(Isolate* isolate)
|
| in_debug_event_listener_(false),
|
| break_on_exception_(false),
|
| break_on_uncaught_exception_(false),
|
| - script_cache_(NULL),
|
| debug_info_list_(NULL),
|
| isolate_(isolate) {
|
| ThreadInit();
|
| @@ -354,66 +353,6 @@ int Debug::ArchiveSpacePerThread() {
|
| }
|
|
|
|
|
| -ScriptCache::ScriptCache(Isolate* isolate) : isolate_(isolate) {
|
| - Heap* heap = isolate_->heap();
|
| - HandleScope scope(isolate_);
|
| -
|
| - DCHECK(isolate_->debug()->is_active());
|
| -
|
| - // Perform a GC to get rid of all unreferenced scripts.
|
| - heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "ScriptCache");
|
| -
|
| - // Scan heap for Script objects.
|
| - List<Handle<Script> > scripts;
|
| - {
|
| - HeapIterator iterator(heap, HeapIterator::kFilterUnreachable);
|
| - DisallowHeapAllocation no_allocation;
|
| - for (HeapObject* obj = iterator.next(); obj != NULL;
|
| - obj = iterator.next()) {
|
| - if (obj->IsScript() && Script::cast(obj)->HasValidSource()) {
|
| - scripts.Add(Handle<Script>(Script::cast(obj)));
|
| - }
|
| - }
|
| - }
|
| -
|
| - GlobalHandles* global_handles = isolate_->global_handles();
|
| - table_ = Handle<WeakValueHashTable>::cast(global_handles->Create(
|
| - Object::cast(*WeakValueHashTable::New(isolate_, scripts.length()))));
|
| - for (int i = 0; i < scripts.length(); i++) Add(scripts[i]);
|
| -}
|
| -
|
| -
|
| -void ScriptCache::Add(Handle<Script> script) {
|
| - HandleScope scope(isolate_);
|
| - Handle<Smi> id(script->id(), isolate_);
|
| -
|
| -#ifdef DEBUG
|
| - Handle<Object> lookup(table_->LookupWeak(id), isolate_);
|
| - if (!lookup->IsTheHole()) {
|
| - Handle<Script> found = Handle<Script>::cast(lookup);
|
| - DCHECK(script->id() == found->id());
|
| - DCHECK(!script->name()->IsString() ||
|
| - String::cast(script->name())->Equals(String::cast(found->name())));
|
| - }
|
| -#endif
|
| -
|
| - Handle<WeakValueHashTable> new_table =
|
| - WeakValueHashTable::PutWeak(table_, id, script);
|
| -
|
| - if (new_table.is_identical_to(table_)) return;
|
| - GlobalHandles* global_handles = isolate_->global_handles();
|
| - global_handles->Destroy(Handle<Object>::cast(table_).location());
|
| - table_ = Handle<WeakValueHashTable>::cast(
|
| - global_handles->Create(Object::cast(*new_table)));
|
| -}
|
| -
|
| -
|
| -ScriptCache::~ScriptCache() {
|
| - isolate_->global_handles()->Destroy(Handle<Object>::cast(table_).location());
|
| - table_ = Handle<WeakValueHashTable>();
|
| -}
|
| -
|
| -
|
| 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();
|
| @@ -466,12 +405,6 @@ void Debug::Unload() {
|
| // Return debugger is not loaded.
|
| if (!is_loaded()) return;
|
|
|
| - // Clear the script cache.
|
| - if (script_cache_ != NULL) {
|
| - delete script_cache_;
|
| - script_cache_ = NULL;
|
| - }
|
| -
|
| // Clear debugger context global handle.
|
| GlobalHandles::Destroy(Handle<Object>::cast(debug_context_).location());
|
| debug_context_ = Handle<Context>();
|
| @@ -1675,17 +1608,24 @@ void Debug::ClearMirrorCache() {
|
|
|
|
|
| Handle<FixedArray> Debug::GetLoadedScripts() {
|
| - // Create and fill the script cache when the loaded scripts is requested for
|
| - // the first time.
|
| - if (script_cache_ == NULL) script_cache_ = new ScriptCache(isolate_);
|
| -
|
| - // Perform GC to get unreferenced scripts evicted from the cache before
|
| - // returning the content.
|
| isolate_->heap()->CollectAllGarbage(Heap::kNoGCFlags,
|
| "Debug::GetLoadedScripts");
|
| -
|
| - // Get the scripts from the cache.
|
| - return script_cache_->GetScripts();
|
| + Factory* factory = isolate_->factory();
|
| + if (!factory->script_list()->IsWeakFixedArray()) {
|
| + return factory->empty_fixed_array();
|
| + }
|
| + Handle<WeakFixedArray> array =
|
| + Handle<WeakFixedArray>::cast(factory->script_list());
|
| + Handle<FixedArray> results = factory->NewFixedArray(array->Length());
|
| + int length = 0;
|
| + for (int i = 0; i < array->Length(); ++i) {
|
| + Object* item = array->Get(i);
|
| + if (item->IsScript() && Script::cast(item)->HasValidSource()) {
|
| + results->set(length++, item);
|
| + }
|
| + }
|
| + results->Shrink(length);
|
| + return results;
|
| }
|
|
|
|
|
| @@ -1937,9 +1877,6 @@ void Debug::OnBeforeCompile(Handle<Script> script) {
|
|
|
| // Handle debugger actions when a new script is compiled.
|
| void Debug::OnAfterCompile(Handle<Script> script) {
|
| - // Add the newly compiled script to the script cache.
|
| - if (script_cache_ != NULL) script_cache_->Add(script);
|
| -
|
| if (ignore_events()) return;
|
|
|
| if (in_debug_scope()) {
|
|
|