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

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

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/scanner.cc ('k') | runtime/vm/scopes.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 #ifndef VM_SCOPES_H_ 5 #ifndef VM_SCOPES_H_
6 #define VM_SCOPES_H_ 6 #define VM_SCOPES_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "platform/globals.h" 9 #include "platform/globals.h"
10 #include "vm/allocation.h" 10 #include "vm/allocation.h"
11 #include "vm/growable_array.h" 11 #include "vm/growable_array.h"
12 #include "vm/object.h" 12 #include "vm/object.h"
13 #include "vm/raw_object.h" 13 #include "vm/raw_object.h"
14 #include "vm/symbols.h" 14 #include "vm/symbols.h"
15 #include "vm/token.h" 15 #include "vm/token.h"
16 16
17 namespace dart { 17 namespace dart {
18 18
19 class LocalScope; 19 class LocalScope;
20 20
21 21
22 class LocalVariable : public ZoneAllocated { 22 class LocalVariable : public ZoneAllocated {
23 public: 23 public:
24 LocalVariable(intptr_t token_pos, 24 LocalVariable(TokenPosition token_pos,
25 const String& name, 25 const String& name,
26 const AbstractType& type) 26 const AbstractType& type)
27 : token_pos_(token_pos), 27 : token_pos_(token_pos),
28 name_(name), 28 name_(name),
29 owner_(NULL), 29 owner_(NULL),
30 type_(type), 30 type_(type),
31 const_value_(NULL), 31 const_value_(NULL),
32 is_final_(false), 32 is_final_(false),
33 is_captured_(false), 33 is_captured_(false),
34 is_invisible_(false), 34 is_invisible_(false),
35 is_captured_parameter_(false), 35 is_captured_parameter_(false),
36 index_(LocalVariable::kUninitializedIndex) { 36 index_(LocalVariable::kUninitializedIndex) {
37 ASSERT(type.IsZoneHandle() || type.IsReadOnlyHandle()); 37 ASSERT(type.IsZoneHandle() || type.IsReadOnlyHandle());
38 ASSERT(type.IsFinalized()); 38 ASSERT(type.IsFinalized());
39 ASSERT(name.IsSymbol()); 39 ASSERT(name.IsSymbol());
40 } 40 }
41 41
42 intptr_t token_pos() const { return token_pos_; } 42 TokenPosition token_pos() const { return token_pos_; }
43 const String& name() const { return name_; } 43 const String& name() const { return name_; }
44 LocalScope* owner() const { return owner_; } 44 LocalScope* owner() const { return owner_; }
45 void set_owner(LocalScope* owner) { 45 void set_owner(LocalScope* owner) {
46 ASSERT(owner_ == NULL); 46 ASSERT(owner_ == NULL);
47 owner_ = owner; 47 owner_ = owner;
48 } 48 }
49 49
50 const AbstractType& type() const { return type_; } 50 const AbstractType& type() const { return type_; }
51 51
52 bool is_final() const { return is_final_; } 52 bool is_final() const { return is_final_; }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 102
103 // Map the frame index to a bit-vector index. Assumes the variable is 103 // Map the frame index to a bit-vector index. Assumes the variable is
104 // allocated to the frame. 104 // allocated to the frame.
105 // var_count is the total number of stack-allocated variables including 105 // var_count is the total number of stack-allocated variables including
106 // all parameters. 106 // all parameters.
107 int BitIndexIn(intptr_t var_count) const; 107 int BitIndexIn(intptr_t var_count) const;
108 108
109 private: 109 private:
110 static const int kUninitializedIndex = INT_MIN; 110 static const int kUninitializedIndex = INT_MIN;
111 111
112 const intptr_t token_pos_; 112 const TokenPosition token_pos_;
113 const String& name_; 113 const String& name_;
114 LocalScope* owner_; // Local scope declaring this variable. 114 LocalScope* owner_; // Local scope declaring this variable.
115 115
116 const AbstractType& type_; // Declaration type of local variable. 116 const AbstractType& type_; // Declaration type of local variable.
117 117
118 const Instance* const_value_; // NULL or compile-time const value. 118 const Instance* const_value_; // NULL or compile-time const value.
119 119
120 bool is_final_; // If true, this variable is readonly. 120 bool is_final_; // If true, this variable is readonly.
121 bool is_captured_; // If true, this variable lives in the context, otherwise 121 bool is_captured_; // If true, this variable lives in the context, otherwise
122 // in the stack frame. 122 // in the stack frame.
123 bool is_invisible_; 123 bool is_invisible_;
124 bool is_captured_parameter_; 124 bool is_captured_parameter_;
125 int index_; // Allocation index in words relative to frame pointer (if not 125 int index_; // Allocation index in words relative to frame pointer (if not
126 // captured), or relative to the context pointer (if captured). 126 // captured), or relative to the context pointer (if captured).
127 127
128 friend class LocalScope; 128 friend class LocalScope;
129 DISALLOW_COPY_AND_ASSIGN(LocalVariable); 129 DISALLOW_COPY_AND_ASSIGN(LocalVariable);
130 }; 130 };
131 131
132 132
133 class NameReference : public ZoneAllocated { 133 class NameReference : public ZoneAllocated {
134 public: 134 public:
135 NameReference(intptr_t token_pos, const String& name) 135 NameReference(TokenPosition token_pos, const String& name)
136 : token_pos_(token_pos), 136 : token_pos_(token_pos),
137 name_(name) { 137 name_(name) {
138 ASSERT(name.IsSymbol()); 138 ASSERT(name.IsSymbol());
139 } 139 }
140 const String& name() const { return name_; } 140 const String& name() const { return name_; }
141 intptr_t token_pos() const { return token_pos_; } 141 TokenPosition token_pos() const { return token_pos_; }
142 void set_token_pos(intptr_t value) { token_pos_ = value; } 142 void set_token_pos(TokenPosition value) { token_pos_ = value; }
143 private: 143 private:
144 intptr_t token_pos_; 144 TokenPosition token_pos_;
145 const String& name_; 145 const String& name_;
146 }; 146 };
147 147
148 148
149 class SourceLabel : public ZoneAllocated { 149 class SourceLabel : public ZoneAllocated {
150 public: 150 public:
151 enum Kind { 151 enum Kind {
152 kFor, 152 kFor,
153 kWhile, 153 kWhile,
154 kDoWhile, 154 kDoWhile,
155 kSwitch, 155 kSwitch,
156 kCase, 156 kCase,
157 kTry, 157 kTry,
158 kCatch, 158 kCatch,
159 kForward, 159 kForward,
160 kStatement // Any statement other than the above 160 kStatement // Any statement other than the above
161 }; 161 };
162 162
163 SourceLabel(intptr_t token_pos, const String& name, Kind kind) 163 SourceLabel(TokenPosition token_pos, const String& name, Kind kind)
164 : token_pos_(token_pos), 164 : token_pos_(token_pos),
165 name_(name), 165 name_(name),
166 owner_(NULL), 166 owner_(NULL),
167 kind_(kind) { 167 kind_(kind) {
168 ASSERT(name.IsSymbol()); 168 ASSERT(name.IsSymbol());
169 } 169 }
170 170
171 static SourceLabel* New(intptr_t token_pos, String* name, Kind kind) { 171 static SourceLabel* New(TokenPosition token_pos, String* name, Kind kind) {
172 if (name != NULL) { 172 if (name != NULL) {
173 return new SourceLabel(token_pos, *name, kind); 173 return new SourceLabel(token_pos, *name, kind);
174 } else { 174 } else {
175 return new SourceLabel(token_pos, 175 return new SourceLabel(token_pos,
176 Symbols::DefaultLabel(), 176 Symbols::DefaultLabel(),
177 kind); 177 kind);
178 } 178 }
179 } 179 }
180 180
181 intptr_t token_pos() const { return token_pos_; } 181 TokenPosition token_pos() const { return token_pos_; }
182 const String& name() const { return name_; } 182 const String& name() const { return name_; }
183 LocalScope* owner() const { return owner_; } 183 LocalScope* owner() const { return owner_; }
184 void set_owner(LocalScope* owner) { 184 void set_owner(LocalScope* owner) {
185 ASSERT(owner_ == NULL); 185 ASSERT(owner_ == NULL);
186 owner_ = owner; 186 owner_ = owner;
187 } 187 }
188 188
189 Kind kind() const { return kind_; } 189 Kind kind() const { return kind_; }
190 190
191 // Returns the function level of the scope in which the label is defined. 191 // Returns the function level of the scope in which the label is defined.
192 int FunctionLevel() const; 192 int FunctionLevel() const;
193 193
194 void ResolveForwardReference() { kind_ = kCase; } 194 void ResolveForwardReference() { kind_ = kCase; }
195 195
196 private: 196 private:
197 const intptr_t token_pos_; 197 const TokenPosition token_pos_;
198 const String& name_; 198 const String& name_;
199 LocalScope* owner_; // Local scope declaring this label. 199 LocalScope* owner_; // Local scope declaring this label.
200 200
201 Kind kind_; 201 Kind kind_;
202 202
203 DISALLOW_COPY_AND_ASSIGN(SourceLabel); 203 DISALLOW_COPY_AND_ASSIGN(SourceLabel);
204 }; 204 };
205 205
206 206
207 class LocalScope : public ZoneAllocated { 207 class LocalScope : public ZoneAllocated {
(...skipping 17 matching lines...) Expand all
225 int context_level() const { 225 int context_level() const {
226 ASSERT(HasContextLevel()); 226 ASSERT(HasContextLevel());
227 return context_level_; 227 return context_level_;
228 } 228 }
229 void set_context_level(int context_level) { 229 void set_context_level(int context_level) {
230 ASSERT(!HasContextLevel()); 230 ASSERT(!HasContextLevel());
231 ASSERT(context_level != kUnitializedContextLevel); 231 ASSERT(context_level != kUnitializedContextLevel);
232 context_level_ = context_level; 232 context_level_ = context_level;
233 } 233 }
234 234
235 intptr_t begin_token_pos() const { return begin_token_pos_; } 235 TokenPosition begin_token_pos() const { return begin_token_pos_; }
236 void set_begin_token_pos(intptr_t value) { begin_token_pos_ = value; } 236 void set_begin_token_pos(TokenPosition value) { begin_token_pos_ = value; }
237 237
238 intptr_t end_token_pos() const { return end_token_pos_; } 238 TokenPosition end_token_pos() const { return end_token_pos_; }
239 void set_end_token_pos(intptr_t value) { end_token_pos_ = value; } 239 void set_end_token_pos(TokenPosition value) { end_token_pos_ = value; }
240 240
241 // The number of variables allocated in the context and belonging to this 241 // The number of variables allocated in the context and belonging to this
242 // scope and to its children at the same loop level. 242 // scope and to its children at the same loop level.
243 int num_context_variables() const { return num_context_variables_; } 243 int num_context_variables() const { return num_context_variables_; }
244 244
245 // Add a variable to the scope. Returns false if a variable with the 245 // Add a variable to the scope. Returns false if a variable with the
246 // same name is already present. 246 // same name is already present.
247 bool AddVariable(LocalVariable* variable); 247 bool AddVariable(LocalVariable* variable);
248 248
249 // Insert a formal parameter variable to the scope at the given position, 249 // Insert a formal parameter variable to the scope at the given position,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 return variables_[index]; 295 return variables_[index];
296 } 296 }
297 297
298 // Count the captured variables belonging to outer scopes and referenced in 298 // Count the captured variables belonging to outer scopes and referenced in
299 // this local scope. 299 // this local scope.
300 int NumCapturedVariables() const; 300 int NumCapturedVariables() const;
301 301
302 // Add a reference to the given name into this scope and the enclosing 302 // Add a reference to the given name into this scope and the enclosing
303 // scopes that do not have a local variable declaration for this name 303 // scopes that do not have a local variable declaration for this name
304 // already. 304 // already.
305 void AddReferencedName(intptr_t token_pos, const String& name); 305 void AddReferencedName(TokenPosition token_pos, const String& name);
306 intptr_t PreviousReferencePos(const String& name) const; 306 TokenPosition PreviousReferencePos(const String& name) const;
307 307
308 // Allocate both captured and non-captured variables declared in this scope 308 // Allocate both captured and non-captured variables declared in this scope
309 // and in its children scopes of the same function level. Allocating means 309 // and in its children scopes of the same function level. Allocating means
310 // assigning a frame slot index or a context slot index. 310 // assigning a frame slot index or a context slot index.
311 // Parameters to be allocated in the frame must all appear in the top scope 311 // Parameters to be allocated in the frame must all appear in the top scope
312 // and not in its children (we do not yet handle register parameters). 312 // and not in its children (we do not yet handle register parameters).
313 // Locals must be listed after parameters in top scope and in its children. 313 // Locals must be listed after parameters in top scope and in its children.
314 // Two locals in different sibling scopes may share the same frame slot. 314 // Two locals in different sibling scopes may share the same frame slot.
315 // Return the index of the next available frame slot. 315 // Return the index of the next available frame slot.
316 int AllocateVariables(int first_parameter_index, 316 int AllocateVariables(int first_parameter_index,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 NameReference* FindReference(const String& name) const; 360 NameReference* FindReference(const String& name) const;
361 361
362 static const int kUnitializedContextLevel = INT_MIN; 362 static const int kUnitializedContextLevel = INT_MIN;
363 LocalScope* parent_; 363 LocalScope* parent_;
364 LocalScope* child_; 364 LocalScope* child_;
365 LocalScope* sibling_; 365 LocalScope* sibling_;
366 int function_level_; // Reflects the nesting level of local functions. 366 int function_level_; // Reflects the nesting level of local functions.
367 int loop_level_; // Reflects the loop nesting level. 367 int loop_level_; // Reflects the loop nesting level.
368 int context_level_; // Reflects the level of the runtime context. 368 int context_level_; // Reflects the level of the runtime context.
369 int num_context_variables_; // Only set if this scope is a context owner. 369 int num_context_variables_; // Only set if this scope is a context owner.
370 intptr_t begin_token_pos_; // Token index of beginning of scope. 370 TokenPosition begin_token_pos_; // Token index of beginning of scope.
371 intptr_t end_token_pos_; // Token index of end of scope. 371 TokenPosition end_token_pos_; // Token index of end of scope.
372 GrowableArray<LocalVariable*> variables_; 372 GrowableArray<LocalVariable*> variables_;
373 GrowableArray<SourceLabel*> labels_; 373 GrowableArray<SourceLabel*> labels_;
374 374
375 // List of names referenced in this scope and its children that 375 // List of names referenced in this scope and its children that
376 // are not resolved to local variables. 376 // are not resolved to local variables.
377 GrowableArray<NameReference*> referenced_; 377 GrowableArray<NameReference*> referenced_;
378 378
379 DISALLOW_COPY_AND_ASSIGN(LocalScope); 379 DISALLOW_COPY_AND_ASSIGN(LocalScope);
380 }; 380 };
381 381
382 } // namespace dart 382 } // namespace dart
383 383
384 #endif // VM_SCOPES_H_ 384 #endif // VM_SCOPES_H_
OLDNEW
« no previous file with comments | « runtime/vm/scanner.cc ('k') | runtime/vm/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698