| Index: src/debug/debug-scopes.cc
|
| diff --git a/src/debug/debug-scopes.cc b/src/debug/debug-scopes.cc
|
| index 27ee5e79ce4fbec8e69048dcf7f86c008a84af8a..8e1c3a7a55935e85e2706274a4de215e92538f8f 100644
|
| --- a/src/debug/debug-scopes.cc
|
| +++ b/src/debug/debug-scopes.cc
|
| @@ -19,7 +19,6 @@ ScopeIterator::ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector,
|
| : isolate_(isolate),
|
| frame_inspector_(frame_inspector),
|
| nested_scope_chain_(4),
|
| - non_locals_(nullptr),
|
| seen_script_scope_(false),
|
| failed_(false) {
|
| if (!frame_inspector->GetContext()->IsContext() ||
|
| @@ -116,7 +115,6 @@ ScopeIterator::ScopeIterator(Isolate* isolate, Handle<JSFunction> function)
|
| : isolate_(isolate),
|
| frame_inspector_(NULL),
|
| context_(function->context()),
|
| - non_locals_(nullptr),
|
| seen_script_scope_(false),
|
| failed_(false) {
|
| if (!function->shared()->IsSubjectToDebugging()) context_ = Handle<Context>();
|
| @@ -214,7 +212,7 @@ ScopeIterator::ScopeType ScopeIterator::Type() {
|
| DCHECK(context_->IsScriptContext() || context_->IsNativeContext());
|
| return ScopeTypeScript;
|
| case WITH_SCOPE:
|
| - DCHECK(context_->IsWithContext());
|
| + DCHECK(context_->IsWithContext() || context_->IsDebugEvaluateContext());
|
| return ScopeTypeWith;
|
| case CATCH_SCOPE:
|
| DCHECK(context_->IsCatchContext());
|
| @@ -247,7 +245,7 @@ ScopeIterator::ScopeType ScopeIterator::Type() {
|
| if (context_->IsScriptContext()) {
|
| return ScopeTypeScript;
|
| }
|
| - DCHECK(context_->IsWithContext());
|
| + DCHECK(context_->IsWithContext() || context_->IsDebugEvaluateContext());
|
| return ScopeTypeWith;
|
| }
|
|
|
| @@ -344,26 +342,7 @@ Handle<Context> ScopeIterator::CurrentContext() {
|
| }
|
| }
|
|
|
| -
|
| -void ScopeIterator::GetNonLocals(List<Handle<String> >* list_out) {
|
| - Handle<String> this_string = isolate_->factory()->this_string();
|
| - for (HashMap::Entry* entry = non_locals_->Start(); entry != nullptr;
|
| - entry = non_locals_->Next(entry)) {
|
| - Handle<String> name(reinterpret_cast<String**>(entry->key));
|
| - // We need to treat "this" differently.
|
| - if (name.is_identical_to(this_string)) continue;
|
| - list_out->Add(Handle<String>(reinterpret_cast<String**>(entry->key)));
|
| - }
|
| -}
|
| -
|
| -
|
| -bool ScopeIterator::ThisIsNonLocal() {
|
| - Handle<String> this_string = isolate_->factory()->this_string();
|
| - void* key = reinterpret_cast<void*>(this_string.location());
|
| - HashMap::Entry* entry = non_locals_->Lookup(key, this_string->Hash());
|
| - return entry != nullptr;
|
| -}
|
| -
|
| +Handle<StringSet> ScopeIterator::GetNonLocals() { return non_locals_; }
|
|
|
| #ifdef DEBUG
|
| // Debug print of the content of the current scope.
|
| @@ -449,9 +428,8 @@ void ScopeIterator::RetrieveScopeChain(Scope* scope) {
|
|
|
| void ScopeIterator::CollectNonLocals(Scope* scope) {
|
| if (scope != NULL) {
|
| - DCHECK_NULL(non_locals_);
|
| - non_locals_ = new HashMap(InternalizedStringMatch);
|
| - scope->CollectNonLocals(non_locals_);
|
| + DCHECK(non_locals_.is_null());
|
| + non_locals_ = scope->CollectNonLocals(StringSet::New(isolate_));
|
| }
|
| }
|
|
|
|
|