Index: src/ast/scopes.cc |
diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc |
index cf5dd29b66ed448d6c59891996749a08eed92eb2..42f7972742c1a8f0b5113759c6b1993c48595cda 100644 |
--- a/src/ast/scopes.cc |
+++ b/src/ast/scopes.cc |
@@ -842,6 +842,24 @@ void Scope::GetNestedScopeChain(Isolate* isolate, |
} |
+void Scope::CollectNonLocals(HashMap* non_locals) { |
+ // Collect non-local variables referenced in the scope. |
+ // TODO(yangguo): store non-local variables explicitly if we can no longer |
+ // rely on unresolved_ to find them. |
+ for (int i = 0; i < unresolved_.length(); i++) { |
+ VariableProxy* proxy = unresolved_[i]; |
+ if (proxy->is_resolved() && proxy->var()->IsStackAllocated()) continue; |
+ Handle<String> name = proxy->name(); |
+ void* key = reinterpret_cast<void*>(name.location()); |
+ HashMap::Entry* entry = non_locals->LookupOrInsert(key, name->Hash()); |
+ entry->value = key; |
+ } |
+ for (int i = 0; i < inner_scopes_.length(); i++) { |
+ inner_scopes_[i]->CollectNonLocals(non_locals); |
+ } |
+} |
+ |
+ |
void Scope::ReportMessage(int start_position, int end_position, |
MessageTemplate::Template message, |
const AstRawString* arg) { |