Index: runtime/vm/scopes.cc |
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc |
index 9acac1faec2ce8c136f3c12348827b6c345332bb..834ad1b02de8ef69d08b1bfa2aec3f68aa2e830c 100644 |
--- a/runtime/vm/scopes.cc |
+++ b/runtime/vm/scopes.cc |
@@ -288,6 +288,7 @@ RawLocalVarDescriptors* LocalScope::GetVarDescriptors(const Function& func) { |
desc.name = &name; |
desc.info.set_kind(kind); |
desc.info.scope_id = context_scope.ContextLevelAt(i); |
+ desc.info.declaration_pos = context_scope.DeclarationTokenIndexAt(i); |
desc.info.begin_pos = begin_token_pos(); |
desc.info.end_pos = end_token_pos(); |
ASSERT(desc.info.begin_pos <= desc.info.end_pos); |
@@ -336,6 +337,7 @@ void LocalScope::CollectLocalVariables(GrowableArray<VarDesc>* vars, |
desc.name = &var->name(); |
desc.info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext); |
desc.info.scope_id = 0; |
+ desc.info.declaration_pos = TokenPosition::kMinSource; |
desc.info.begin_pos = TokenPosition::kMinSource; |
desc.info.end_pos = TokenPosition::kMinSource; |
desc.info.set_index(var->index()); |
@@ -353,6 +355,7 @@ void LocalScope::CollectLocalVariables(GrowableArray<VarDesc>* vars, |
desc.info.set_kind(RawLocalVarDescriptors::kStackVar); |
desc.info.scope_id = *scope_id; |
} |
+ desc.info.declaration_pos = var->declaration_token_pos(); |
desc.info.begin_pos = var->token_pos(); |
desc.info.end_pos = var->owner()->end_token_pos(); |
desc.info.set_index(var->index()); |
@@ -551,6 +554,8 @@ RawContextScope* LocalScope::PreserveOuterScope(int current_context_level) |
// Preserve the aliases of captured variables belonging to outer scopes. |
if (variable->owner()->function_level() != 1) { |
context_scope.SetTokenIndexAt(captured_idx, variable->token_pos()); |
+ context_scope.SetDeclarationTokenIndexAt( |
+ captured_idx, variable->declaration_token_pos()); |
context_scope.SetNameAt(captured_idx, variable->name()); |
context_scope.SetIsFinalAt(captured_idx, variable->is_final()); |
context_scope.SetIsConstAt(captured_idx, variable->IsConst()); |
@@ -582,13 +587,17 @@ LocalScope* LocalScope::RestoreOuterScope(const ContextScope& context_scope) { |
for (int i = 0; i < context_scope.num_variables(); i++) { |
LocalVariable* variable; |
if (context_scope.IsConstAt(i)) { |
- variable = new LocalVariable(context_scope.TokenIndexAt(i), |
+ variable = new LocalVariable( |
+ context_scope.DeclarationTokenIndexAt(i), |
+ context_scope.TokenIndexAt(i), |
String::ZoneHandle(context_scope.NameAt(i)), |
Object::dynamic_type()); |
variable->SetConstValue( |
Instance::ZoneHandle(context_scope.ConstValueAt(i))); |
} else { |
- variable = new LocalVariable(context_scope.TokenIndexAt(i), |
+ variable = new LocalVariable( |
+ context_scope.DeclarationTokenIndexAt(i), |
+ context_scope.TokenIndexAt(i), |
String::ZoneHandle(context_scope.NameAt(i)), |
AbstractType::ZoneHandle(context_scope.TypeAt(i))); |
} |
@@ -640,6 +649,7 @@ RawContextScope* LocalScope::CreateImplicitClosureScope(const Function& func) { |
// Create a descriptor for 'this' variable. |
context_scope.SetTokenIndexAt(0, func.token_pos()); |
+ context_scope.SetDeclarationTokenIndexAt(0, func.token_pos()); |
context_scope.SetNameAt(0, Symbols::This()); |
context_scope.SetIsFinalAt(0, true); |
context_scope.SetIsConstAt(0, false); |