Index: src/scopes.cc |
diff --git a/src/scopes.cc b/src/scopes.cc |
index 0ceecb2ba2c714004aaafc54b8d326518aeb902b..9672bd6642a6c6cbb3bf6101b174de8749695042 100644 |
--- a/src/scopes.cc |
+++ b/src/scopes.cc |
@@ -114,7 +114,7 @@ Variable* VariableMap::Lookup(Handle<String> name) { |
// Dummy constructor |
-Scope::Scope(Type type) |
+Scope::Scope(ScopeType type) |
: isolate_(Isolate::Current()), |
inner_scopes_(0), |
variables_(false), |
@@ -127,7 +127,7 @@ Scope::Scope(Type type) |
} |
-Scope::Scope(Scope* outer_scope, Type type) |
+Scope::Scope(Scope* outer_scope, ScopeType type) |
: isolate_(Isolate::Current()), |
inner_scopes_(4), |
variables_(), |
@@ -146,7 +146,7 @@ Scope::Scope(Scope* outer_scope, Type type) |
Scope::Scope(Scope* inner_scope, |
- Type type, |
+ ScopeType type, |
Handle<SerializedScopeInfo> scope_info) |
: isolate_(Isolate::Current()), |
inner_scopes_(4), |
@@ -185,7 +185,7 @@ Scope::Scope(Scope* inner_scope, Handle<String> catch_variable_name) |
} |
-void Scope::SetDefaults(Type type, |
+void Scope::SetDefaults(ScopeType type, |
Scope* outer_scope, |
Handle<SerializedScopeInfo> scope_info) { |
outer_scope_ = outer_scope; |
@@ -208,6 +208,8 @@ void Scope::SetDefaults(Type type, |
num_stack_slots_ = 0; |
num_heap_slots_ = 0; |
scope_info_ = scope_info; |
+ start_position_ = RelocInfo::kNoPosition; |
+ end_position_ = RelocInfo::kNoPosition; |
} |
@@ -630,15 +632,33 @@ Handle<SerializedScopeInfo> Scope::GetSerializedScopeInfo() { |
} |
+void Scope::GetNestedScopeChain( |
+ List<Handle<SerializedScopeInfo> >* chain, |
+ int position) { |
+ chain->Add(Handle<SerializedScopeInfo>(GetSerializedScopeInfo())); |
+ |
+ for (int i = 0; i < inner_scopes_.length(); i++) { |
+ Scope* scope = inner_scopes_[i]; |
+ int beg_pos = scope->start_position(); |
+ int end_pos = scope->end_position(); |
+ ASSERT(beg_pos >= 0 && end_pos >= 0); |
+ if (beg_pos <= position && position <= end_pos) { |
+ scope->GetNestedScopeChain(chain, position); |
+ return; |
+ } |
+ } |
+} |
+ |
+ |
#ifdef DEBUG |
-static const char* Header(Scope::Type type) { |
+static const char* Header(ScopeType type) { |
switch (type) { |
- case Scope::EVAL_SCOPE: return "eval"; |
- case Scope::FUNCTION_SCOPE: return "function"; |
- case Scope::GLOBAL_SCOPE: return "global"; |
- case Scope::CATCH_SCOPE: return "catch"; |
- case Scope::BLOCK_SCOPE: return "block"; |
- case Scope::WITH_SCOPE: return "with"; |
+ case EVAL_SCOPE: return "eval"; |
+ case FUNCTION_SCOPE: return "function"; |
+ case GLOBAL_SCOPE: return "global"; |
+ case CATCH_SCOPE: return "catch"; |
+ case BLOCK_SCOPE: return "block"; |
+ case WITH_SCOPE: return "with"; |
} |
UNREACHABLE(); |
return NULL; |