| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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-scopes.h" | 5 #include "src/debug/debug-scopes.h" |
| 6 | 6 |
| 7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
| 8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
| 9 #include "src/frames-inl.h" | 9 #include "src/frames-inl.h" |
| 10 #include "src/globals.h" | 10 #include "src/globals.h" |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 case FUNCTION_SCOPE: | 207 case FUNCTION_SCOPE: |
| 208 DCHECK(context_->IsFunctionContext() || !scope_info->HasContext()); | 208 DCHECK(context_->IsFunctionContext() || !scope_info->HasContext()); |
| 209 return ScopeTypeLocal; | 209 return ScopeTypeLocal; |
| 210 case MODULE_SCOPE: | 210 case MODULE_SCOPE: |
| 211 DCHECK(context_->IsModuleContext()); | 211 DCHECK(context_->IsModuleContext()); |
| 212 return ScopeTypeModule; | 212 return ScopeTypeModule; |
| 213 case SCRIPT_SCOPE: | 213 case SCRIPT_SCOPE: |
| 214 DCHECK(context_->IsScriptContext() || context_->IsNativeContext()); | 214 DCHECK(context_->IsScriptContext() || context_->IsNativeContext()); |
| 215 return ScopeTypeScript; | 215 return ScopeTypeScript; |
| 216 case WITH_SCOPE: | 216 case WITH_SCOPE: |
| 217 DCHECK(context_->IsWithContext()); | 217 DCHECK(context_->IsWithContext() || context_->IsDebugEvaluateContext()); |
| 218 return ScopeTypeWith; | 218 return ScopeTypeWith; |
| 219 case CATCH_SCOPE: | 219 case CATCH_SCOPE: |
| 220 DCHECK(context_->IsCatchContext()); | 220 DCHECK(context_->IsCatchContext()); |
| 221 return ScopeTypeCatch; | 221 return ScopeTypeCatch; |
| 222 case BLOCK_SCOPE: | 222 case BLOCK_SCOPE: |
| 223 DCHECK(!scope_info->HasContext() || context_->IsBlockContext()); | 223 DCHECK(!scope_info->HasContext() || context_->IsBlockContext()); |
| 224 return ScopeTypeBlock; | 224 return ScopeTypeBlock; |
| 225 case EVAL_SCOPE: | 225 case EVAL_SCOPE: |
| 226 UNREACHABLE(); | 226 UNREACHABLE(); |
| 227 } | 227 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 240 } | 240 } |
| 241 if (context_->IsBlockContext()) { | 241 if (context_->IsBlockContext()) { |
| 242 return ScopeTypeBlock; | 242 return ScopeTypeBlock; |
| 243 } | 243 } |
| 244 if (context_->IsModuleContext()) { | 244 if (context_->IsModuleContext()) { |
| 245 return ScopeTypeModule; | 245 return ScopeTypeModule; |
| 246 } | 246 } |
| 247 if (context_->IsScriptContext()) { | 247 if (context_->IsScriptContext()) { |
| 248 return ScopeTypeScript; | 248 return ScopeTypeScript; |
| 249 } | 249 } |
| 250 DCHECK(context_->IsWithContext()); | 250 DCHECK(context_->IsWithContext() || context_->IsDebugEvaluateContext()); |
| 251 return ScopeTypeWith; | 251 return ScopeTypeWith; |
| 252 } | 252 } |
| 253 | 253 |
| 254 | 254 |
| 255 MaybeHandle<JSObject> ScopeIterator::ScopeObject() { | 255 MaybeHandle<JSObject> ScopeIterator::ScopeObject() { |
| 256 DCHECK(!failed_); | 256 DCHECK(!failed_); |
| 257 switch (Type()) { | 257 switch (Type()) { |
| 258 case ScopeIterator::ScopeTypeGlobal: | 258 case ScopeIterator::ScopeTypeGlobal: |
| 259 return Handle<JSObject>(CurrentContext()->global_proxy()); | 259 return Handle<JSObject>(CurrentContext()->global_proxy()); |
| 260 case ScopeIterator::ScopeTypeScript: | 260 case ScopeIterator::ScopeTypeScript: |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 if (Type() == ScopeTypeGlobal || Type() == ScopeTypeScript || | 337 if (Type() == ScopeTypeGlobal || Type() == ScopeTypeScript || |
| 338 nested_scope_chain_.is_empty()) { | 338 nested_scope_chain_.is_empty()) { |
| 339 return context_; | 339 return context_; |
| 340 } else if (nested_scope_chain_.last().scope_info->HasContext()) { | 340 } else if (nested_scope_chain_.last().scope_info->HasContext()) { |
| 341 return context_; | 341 return context_; |
| 342 } else { | 342 } else { |
| 343 return Handle<Context>(); | 343 return Handle<Context>(); |
| 344 } | 344 } |
| 345 } | 345 } |
| 346 | 346 |
| 347 | 347 Handle<NameDictionary> ScopeIterator::GetNonLocals() { |
| 348 void ScopeIterator::GetNonLocals(List<Handle<String> >* list_out) { | |
| 349 Handle<String> this_string = isolate_->factory()->this_string(); | 348 Handle<String> this_string = isolate_->factory()->this_string(); |
| 349 Handle<NameDictionary> dict = |
| 350 NameDictionary::New(isolate_, non_locals_->occupancy()); |
| 350 for (HashMap::Entry* entry = non_locals_->Start(); entry != nullptr; | 351 for (HashMap::Entry* entry = non_locals_->Start(); entry != nullptr; |
| 351 entry = non_locals_->Next(entry)) { | 352 entry = non_locals_->Next(entry)) { |
| 352 Handle<String> name(reinterpret_cast<String**>(entry->key)); | 353 Handle<String> name(reinterpret_cast<String**>(entry->key)); |
| 353 // We need to treat "this" differently. | 354 // We need to treat "this" differently. |
| 354 if (name.is_identical_to(this_string)) continue; | 355 if (name.is_identical_to(this_string)) continue; |
| 355 list_out->Add(Handle<String>(reinterpret_cast<String**>(entry->key))); | 356 dict = NameDictionary::Add(dict, name, name, PropertyDetails::Empty()); |
| 356 } | 357 } |
| 358 return dict; |
| 357 } | 359 } |
| 358 | 360 |
| 359 | 361 |
| 360 bool ScopeIterator::ThisIsNonLocal() { | 362 bool ScopeIterator::ThisIsNonLocal() { |
| 361 Handle<String> this_string = isolate_->factory()->this_string(); | 363 Handle<String> this_string = isolate_->factory()->this_string(); |
| 362 void* key = reinterpret_cast<void*>(this_string.location()); | 364 void* key = reinterpret_cast<void*>(this_string.location()); |
| 363 HashMap::Entry* entry = non_locals_->Lookup(key, this_string->Hash()); | 365 HashMap::Entry* entry = non_locals_->Lookup(key, this_string->Hash()); |
| 364 return entry != nullptr; | 366 return entry != nullptr; |
| 365 } | 367 } |
| 366 | 368 |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 DCHECK(beg_pos >= 0 && end_pos >= 0); | 855 DCHECK(beg_pos >= 0 && end_pos >= 0); |
| 854 if (beg_pos <= position && position < end_pos) { | 856 if (beg_pos <= position && position < end_pos) { |
| 855 GetNestedScopeChain(isolate, inner_scope, position); | 857 GetNestedScopeChain(isolate, inner_scope, position); |
| 856 return; | 858 return; |
| 857 } | 859 } |
| 858 } | 860 } |
| 859 } | 861 } |
| 860 | 862 |
| 861 } // namespace internal | 863 } // namespace internal |
| 862 } // namespace v8 | 864 } // namespace v8 |
| OLD | NEW |