Index: src/debug/debug-scopes.h |
diff --git a/src/debug/debug-scopes.h b/src/debug/debug-scopes.h |
index 6e5c459037486f758529016c74b45483ab299280..d4e335a2a542a46f734b20f17b14cf63cb69992a 100644 |
--- a/src/debug/debug-scopes.h |
+++ b/src/debug/debug-scopes.h |
@@ -33,11 +33,15 @@ class ScopeIterator { |
static const int kScopeDetailsNameIndex = 2; |
static const int kScopeDetailsSize = 3; |
+ enum Option { DEFAULT, IGNORE_NESTED_SCOPES, COLLECT_NON_LOCALS }; |
+ |
ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector, |
- bool ignore_nested_scopes = false); |
+ Option options = DEFAULT); |
ScopeIterator(Isolate* isolate, Handle<JSFunction> function); |
+ ~ScopeIterator() { delete non_locals_; } |
+ |
MUST_USE_RESULT MaybeHandle<JSObject> MaterializeScopeDetails(); |
// More scopes? |
@@ -68,6 +72,11 @@ class ScopeIterator { |
// be an actual context. |
Handle<Context> CurrentContext(); |
+ // Populate the list with collected non-local variable names. |
+ void GetNonLocals(List<Handle<String> >* list_out); |
+ |
+ bool ThisIsNonLocal(); |
+ |
#ifdef DEBUG |
// Debug print of the content of the current scope. |
void DebugPrint(); |
@@ -78,6 +87,7 @@ class ScopeIterator { |
FrameInspector* const frame_inspector_; |
Handle<Context> context_; |
List<Handle<ScopeInfo> > nested_scope_chain_; |
+ HashMap* non_locals_; |
bool seen_script_scope_; |
bool failed_; |
@@ -90,7 +100,17 @@ class ScopeIterator { |
JSFunction::cast(frame_inspector_->GetFunction())); |
} |
- void RetrieveScopeChain(Scope* scope, Handle<SharedFunctionInfo> shared_info); |
+ static bool InternalizedStringMatch(void* key1, void* key2) { |
+ Handle<String> s1(reinterpret_cast<String**>(key1)); |
+ Handle<String> s2(reinterpret_cast<String**>(key2)); |
+ DCHECK(s1->IsInternalizedString()); |
+ DCHECK(s2->IsInternalizedString()); |
+ return s1.is_identical_to(s2); |
+ } |
+ |
+ void RetrieveScopeChain(Scope* scope); |
+ |
+ void CollectNonLocals(Scope* scope); |
MUST_USE_RESULT MaybeHandle<JSObject> MaterializeScriptScope(); |
MUST_USE_RESULT MaybeHandle<JSObject> MaterializeLocalScope(); |