Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: runtime/vm/scopes.cc

Issue 1644793002: Replace intptr_t with TokenDescriptor (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/scopes.h ('k') | runtime/vm/scopes_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/scopes.h" 5 #include "vm/scopes.h"
6 6
7 #include "vm/object.h" 7 #include "vm/object.h"
8 #include "vm/stack_frame.h" 8 #include "vm/stack_frame.h"
9 #include "vm/symbols.h" 9 #include "vm/symbols.h"
10 10
(...skipping 11 matching lines...) Expand all
22 22
23 23
24 LocalScope::LocalScope(LocalScope* parent, int function_level, int loop_level) 24 LocalScope::LocalScope(LocalScope* parent, int function_level, int loop_level)
25 : parent_(parent), 25 : parent_(parent),
26 child_(NULL), 26 child_(NULL),
27 sibling_(NULL), 27 sibling_(NULL),
28 function_level_(function_level), 28 function_level_(function_level),
29 loop_level_(loop_level), 29 loop_level_(loop_level),
30 context_level_(LocalScope::kUnitializedContextLevel), 30 context_level_(LocalScope::kUnitializedContextLevel),
31 num_context_variables_(0), 31 num_context_variables_(0),
32 begin_token_pos_(Token::kNoSourcePos), 32 begin_token_pos_(TokenPosition::kNoSourcePos),
33 end_token_pos_(Token::kNoSourcePos), 33 end_token_pos_(TokenPosition::kNoSourcePos),
34 variables_(), 34 variables_(),
35 labels_(), 35 labels_(),
36 referenced_() { 36 referenced_() {
37 // Hook this node into the children of the parent, unless the parent has a 37 // Hook this node into the children of the parent, unless the parent has a
38 // different function_level, since the local scope of a nested function can 38 // different function_level, since the local scope of a nested function can
39 // be discarded after it has been parsed. 39 // be discarded after it has been parsed.
40 if ((parent != NULL) && (parent->function_level() == function_level)) { 40 if ((parent != NULL) && (parent->function_level() == function_level)) {
41 sibling_ = parent->child_; 41 sibling_ = parent->child_;
42 parent->child_ = this; 42 parent->child_ = this;
43 } 43 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 intptr_t num_references = referenced_.length(); 103 intptr_t num_references = referenced_.length();
104 for (intptr_t i = 0; i < num_references; i++) { 104 for (intptr_t i = 0; i < num_references; i++) {
105 if (name.raw() == referenced_[i]->name().raw()) { 105 if (name.raw() == referenced_[i]->name().raw()) {
106 return referenced_[i]; 106 return referenced_[i];
107 } 107 }
108 } 108 }
109 return NULL; 109 return NULL;
110 } 110 }
111 111
112 112
113 void LocalScope::AddReferencedName(intptr_t token_pos, 113 void LocalScope::AddReferencedName(TokenPosition token_pos,
114 const String& name) { 114 const String& name) {
115 if (LocalLookupVariable(name) != NULL) { 115 if (LocalLookupVariable(name) != NULL) {
116 return; 116 return;
117 } 117 }
118 NameReference* ref = FindReference(name); 118 NameReference* ref = FindReference(name);
119 if (ref != NULL) { 119 if (ref != NULL) {
120 ref->set_token_pos(token_pos); 120 ref->set_token_pos(token_pos);
121 return; 121 return;
122 } 122 }
123 ref = new NameReference(token_pos, name); 123 ref = new NameReference(token_pos, name);
124 referenced_.Add(ref); 124 referenced_.Add(ref);
125 // Add name reference in innermost enclosing scopes that do not 125 // Add name reference in innermost enclosing scopes that do not
126 // define a local variable with this name. 126 // define a local variable with this name.
127 LocalScope* scope = this->parent(); 127 LocalScope* scope = this->parent();
128 while (scope != NULL && (scope->LocalLookupVariable(name) == NULL)) { 128 while (scope != NULL && (scope->LocalLookupVariable(name) == NULL)) {
129 scope->referenced_.Add(ref); 129 scope->referenced_.Add(ref);
130 scope = scope->parent(); 130 scope = scope->parent();
131 } 131 }
132 } 132 }
133 133
134 134
135 intptr_t LocalScope::PreviousReferencePos(const String& name) const { 135 TokenPosition LocalScope::PreviousReferencePos(const String& name) const {
136 NameReference* ref = FindReference(name); 136 NameReference* ref = FindReference(name);
137 if (ref != NULL) { 137 if (ref != NULL) {
138 return ref->token_pos(); 138 return ref->token_pos();
139 } 139 }
140 return -1; 140 return TokenPosition::kNoSource;
141 } 141 }
142 142
143 143
144 void LocalScope::AllocateContextVariable(LocalVariable* variable, 144 void LocalScope::AllocateContextVariable(LocalVariable* variable,
145 LocalScope** context_owner) { 145 LocalScope** context_owner) {
146 ASSERT(variable->is_captured()); 146 ASSERT(variable->is_captured());
147 ASSERT(variable->owner() == this); 147 ASSERT(variable->owner() == this);
148 // The context level in the owner scope of a captured variable indicates at 148 // The context level in the owner scope of a captured variable indicates at
149 // code generation time how far to walk up the context chain in order to 149 // code generation time how far to walk up the context chain in order to
150 // access the variable from the current context level. 150 // access the variable from the current context level.
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 for (int i = 0; i < this->variables_.length(); i++) { 321 for (int i = 0; i < this->variables_.length(); i++) {
322 LocalVariable* var = variables_[i]; 322 LocalVariable* var = variables_[i];
323 if ((var->owner() == this) && !var->is_invisible()) { 323 if ((var->owner() == this) && !var->is_invisible()) {
324 if (var->name().raw() == Symbols::CurrentContextVar().raw()) { 324 if (var->name().raw() == Symbols::CurrentContextVar().raw()) {
325 // This is the local variable in which the function saves its 325 // This is the local variable in which the function saves its
326 // own context before calling a closure function. 326 // own context before calling a closure function.
327 VarDesc desc; 327 VarDesc desc;
328 desc.name = &var->name(); 328 desc.name = &var->name();
329 desc.info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext); 329 desc.info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext);
330 desc.info.scope_id = 0; 330 desc.info.scope_id = 0;
331 desc.info.begin_pos = 0; 331 desc.info.begin_pos = TokenPosition::kMinSource;
332 desc.info.end_pos = 0; 332 desc.info.end_pos = TokenPosition::kMinSource;
333 desc.info.set_index(var->index()); 333 desc.info.set_index(var->index());
334 vars->Add(desc); 334 vars->Add(desc);
335 } else if (!IsFilteredIdentifier(var->name())) { 335 } else if (!IsFilteredIdentifier(var->name())) {
336 // This is a regular Dart variable, either stack-based or captured. 336 // This is a regular Dart variable, either stack-based or captured.
337 VarDesc desc; 337 VarDesc desc;
338 desc.name = &var->name(); 338 desc.name = &var->name();
339 if (var->is_captured()) { 339 if (var->is_captured()) {
340 desc.info.set_kind(RawLocalVarDescriptors::kContextVar); 340 desc.info.set_kind(RawLocalVarDescriptors::kContextVar);
341 ASSERT(var->owner() != NULL); 341 ASSERT(var->owner() != NULL);
342 ASSERT(var->owner()->context_level() >= 0); 342 ASSERT(var->owner()->context_level() >= 0);
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 return fixed_parameter_count - (index() - kParamEndSlotFromFp); 668 return fixed_parameter_count - (index() - kParamEndSlotFromFp);
669 } else { 669 } else {
670 // Shift negative indexes so that the lowest one is 0 (they are still 670 // Shift negative indexes so that the lowest one is 0 (they are still
671 // non-positive). 671 // non-positive).
672 return fixed_parameter_count - (index() - kFirstLocalSlotFromFp); 672 return fixed_parameter_count - (index() - kFirstLocalSlotFromFp);
673 } 673 }
674 } 674 }
675 675
676 676
677 } // namespace dart 677 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/scopes.h ('k') | runtime/vm/scopes_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698