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

Side by Side Diff: src/scopes.h

Issue 7979001: Scope tree serialization and ScopeIterator cleanup. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 void RecordWithStatement() { scope_contains_with_ = true; } 199 void RecordWithStatement() { scope_contains_with_ = true; }
200 200
201 // Inform the scope that the corresponding code contains an eval call. 201 // Inform the scope that the corresponding code contains an eval call.
202 void RecordEvalCall() { if (!is_global_scope()) scope_calls_eval_ = true; } 202 void RecordEvalCall() { if (!is_global_scope()) scope_calls_eval_ = true; }
203 203
204 // Enable strict mode for the scope (unless disabled by a global flag). 204 // Enable strict mode for the scope (unless disabled by a global flag).
205 void EnableStrictMode() { 205 void EnableStrictMode() {
206 strict_mode_ = FLAG_strict_mode; 206 strict_mode_ = FLAG_strict_mode;
207 } 207 }
208 208
209 // Statement position in the source where this scope begins.
210 int SourceBegStatementPos() const { return source_beg_statement_pos_; }
Kevin Millikin (Chromium) 2011/10/05 08:43:36 I don't like the name :) First, it doesn't follow
Steven 2011/10/06 19:09:27 Done.
211 void SetSourceBegStatementPos(int statement_pos) {
212 source_beg_statement_pos_ = statement_pos;
213 }
214
215 // Statement position in the source where this scope ends.
216 int SourceEndStatementPos() const { return source_end_statement_pos_; }
Kevin Millikin (Chromium) 2011/10/05 08:43:36 Likewise: int end_position() const { return end_p
Steven 2011/10/06 19:09:27 Done.
217 void SetSourceEndStatementPos(int statement_pos) {
218 source_end_statement_pos_ = statement_pos;
219 }
220
209 // --------------------------------------------------------------------------- 221 // ---------------------------------------------------------------------------
210 // Predicates. 222 // Predicates.
211 223
212 // Specific scope types. 224 // Specific scope types.
213 bool is_eval_scope() const { return type_ == EVAL_SCOPE; } 225 bool is_eval_scope() const { return type_ == EVAL_SCOPE; }
214 bool is_function_scope() const { return type_ == FUNCTION_SCOPE; } 226 bool is_function_scope() const { return type_ == FUNCTION_SCOPE; }
215 bool is_global_scope() const { return type_ == GLOBAL_SCOPE; } 227 bool is_global_scope() const { return type_ == GLOBAL_SCOPE; }
216 bool is_catch_scope() const { return type_ == CATCH_SCOPE; } 228 bool is_catch_scope() const { return type_ == CATCH_SCOPE; }
217 bool is_block_scope() const { return type_ == BLOCK_SCOPE; } 229 bool is_block_scope() const { return type_ == BLOCK_SCOPE; }
218 bool is_with_scope() const { return type_ == WITH_SCOPE; } 230 bool is_with_scope() const { return type_ == WITH_SCOPE; }
(...skipping 18 matching lines...) Expand all
237 bool inside_with() const { return scope_inside_with_; } 249 bool inside_with() const { return scope_inside_with_; }
238 // Does this scope contain a with statement. 250 // Does this scope contain a with statement.
239 bool contains_with() const { return scope_contains_with_; } 251 bool contains_with() const { return scope_contains_with_; }
240 252
241 // The scope immediately surrounding this scope, or NULL. 253 // The scope immediately surrounding this scope, or NULL.
242 Scope* outer_scope() const { return outer_scope_; } 254 Scope* outer_scope() const { return outer_scope_; }
243 255
244 // --------------------------------------------------------------------------- 256 // ---------------------------------------------------------------------------
245 // Accessors. 257 // Accessors.
246 258
259 // The type of this scope.
260 Type type() const { return type_; }
261
247 // The variable corresponding the 'this' value. 262 // The variable corresponding the 'this' value.
248 Variable* receiver() { return receiver_; } 263 Variable* receiver() { return receiver_; }
249 264
250 // The variable holding the function literal for named function 265 // The variable holding the function literal for named function
251 // literals, or NULL. 266 // literals, or NULL.
252 // Only valid for function scopes. 267 // Only valid for function scopes.
253 VariableProxy* function() const { 268 VariableProxy* function() const {
254 ASSERT(is_function_scope()); 269 ASSERT(is_function_scope());
255 return function_; 270 return function_;
256 } 271 }
257 272
258 // Parameters. The left-most parameter has index 0. 273 // Parameters. The left-most parameter has index 0.
259 // Only valid for function scopes. 274 // Only valid for function scopes.
260 Variable* parameter(int index) const { 275 Variable* parameter(int index) const {
261 ASSERT(is_function_scope()); 276 ASSERT(is_function_scope());
262 return params_[index]; 277 return params_[index];
263 } 278 }
264 279
265 int num_parameters() const { return params_.length(); } 280 int num_parameters() const { return params_.length(); }
266 281
267 // The local variable 'arguments' if we need to allocate it; NULL otherwise. 282 // The local variable 'arguments' if we need to allocate it; NULL otherwise.
268 Variable* arguments() const { return arguments_; } 283 Variable* arguments() const { return arguments_; }
269 284
270 // Declarations list. 285 // Declarations list.
271 ZoneList<Declaration*>* declarations() { return &decls_; } 286 ZoneList<Declaration*>* declarations() { return &decls_; }
272 287
288 // Inner scope list.
289 ZoneList<Scope*>* InnerScopes() { return &inner_scopes_; }
Kevin Millikin (Chromium) 2011/10/05 08:43:36 ZoneList<Scope*>* inner_scopes() { return &inner_s
Steven 2011/10/06 19:09:27 Done.
273 290
274 // --------------------------------------------------------------------------- 291 // ---------------------------------------------------------------------------
275 // Variable allocation. 292 // Variable allocation.
276 293
277 // Collect all used locals in this scope. 294 // Collect all used locals in this scope.
278 template<class Allocator> 295 template<class Allocator>
279 void CollectUsedVariables(List<Variable*, Allocator>* locals); 296 void CollectUsedVariables(List<Variable*, Allocator>* locals);
280 297
281 // Resolve and fill in the allocation information for all variables 298 // Resolve and fill in the allocation information for all variables
282 // in this scopes. Must be called *after* all scopes have been 299 // in this scopes. Must be called *after* all scopes have been
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 // 397 //
381 // This scope is inside a 'with' of some outer scope. 398 // This scope is inside a 'with' of some outer scope.
382 bool scope_inside_with_; 399 bool scope_inside_with_;
383 // This scope contains a 'with' statement. 400 // This scope contains a 'with' statement.
384 bool scope_contains_with_; 401 bool scope_contains_with_;
385 // This scope or a nested catch scope or with scope contain an 'eval' call. At 402 // This scope or a nested catch scope or with scope contain an 'eval' call. At
386 // the 'eval' call site this scope is the declaration scope. 403 // the 'eval' call site this scope is the declaration scope.
387 bool scope_calls_eval_; 404 bool scope_calls_eval_;
388 // This scope is a strict mode scope. 405 // This scope is a strict mode scope.
389 bool strict_mode_; 406 bool strict_mode_;
407 // Source positions.
408 int source_beg_statement_pos_;
409 int source_end_statement_pos_;
390 410
391 // Computed via PropagateScopeInfo. 411 // Computed via PropagateScopeInfo.
392 bool outer_scope_calls_non_strict_eval_; 412 bool outer_scope_calls_non_strict_eval_;
393 bool inner_scope_calls_eval_; 413 bool inner_scope_calls_eval_;
394 bool force_eager_compilation_; 414 bool force_eager_compilation_;
395 415
396 // True if it doesn't need scope resolution (e.g., if the scope was 416 // True if it doesn't need scope resolution (e.g., if the scope was
397 // constructed based on a serialized scope info or a catch context). 417 // constructed based on a serialized scope info or a catch context).
398 bool already_resolved_; 418 bool already_resolved_;
399 419
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 } 522 }
503 523
504 void SetDefaults(Type type, 524 void SetDefaults(Type type,
505 Scope* outer_scope, 525 Scope* outer_scope,
506 Handle<SerializedScopeInfo> scope_info); 526 Handle<SerializedScopeInfo> scope_info);
507 }; 527 };
508 528
509 } } // namespace v8::internal 529 } } // namespace v8::internal
510 530
511 #endif // V8_SCOPES_H_ 531 #endif // V8_SCOPES_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698