OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_SCOPES_H_ | 5 #ifndef V8_SCOPES_H_ |
6 #define V8_SCOPES_H_ | 6 #define V8_SCOPES_H_ |
7 | 7 |
8 #include "src/ast.h" | 8 #include "src/ast.h" |
9 #include "src/zone.h" | 9 #include "src/zone.h" |
10 | 10 |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 | 204 |
205 // --------------------------------------------------------------------------- | 205 // --------------------------------------------------------------------------- |
206 // Scope-specific info. | 206 // Scope-specific info. |
207 | 207 |
208 // Inform the scope that the corresponding code contains a with statement. | 208 // Inform the scope that the corresponding code contains a with statement. |
209 void RecordWithStatement() { scope_contains_with_ = true; } | 209 void RecordWithStatement() { scope_contains_with_ = true; } |
210 | 210 |
211 // Inform the scope that the corresponding code contains an eval call. | 211 // Inform the scope that the corresponding code contains an eval call. |
212 void RecordEvalCall() { if (!is_global_scope()) scope_calls_eval_ = true; } | 212 void RecordEvalCall() { if (!is_global_scope()) scope_calls_eval_ = true; } |
213 | 213 |
| 214 // Inform the scope that the corresponding code uses "this". |
| 215 void RecordThisUsage() { scope_uses_this_ = true; } |
| 216 |
| 217 // Inform the scope that the corresponding code uses "arguments". |
| 218 void RecordArgumentsUsage() { scope_uses_arguments_ = true; } |
| 219 |
214 // Set the strict mode flag (unless disabled by a global flag). | 220 // Set the strict mode flag (unless disabled by a global flag). |
215 void SetStrictMode(StrictMode strict_mode) { strict_mode_ = strict_mode; } | 221 void SetStrictMode(StrictMode strict_mode) { strict_mode_ = strict_mode; } |
216 | 222 |
217 // Position in the source where this scope begins and ends. | 223 // Position in the source where this scope begins and ends. |
218 // | 224 // |
219 // * For the scope of a with statement | 225 // * For the scope of a with statement |
220 // with (obj) stmt | 226 // with (obj) stmt |
221 // start position: start position of first token of 'stmt' | 227 // start position: start position of first token of 'stmt' |
222 // end position: end position of last token of 'stmt' | 228 // end position: end position of last token of 'stmt' |
223 // * For the scope of a block | 229 // * For the scope of a block |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 } | 286 } |
281 bool outer_scope_calls_sloppy_eval() const { | 287 bool outer_scope_calls_sloppy_eval() const { |
282 return outer_scope_calls_sloppy_eval_; | 288 return outer_scope_calls_sloppy_eval_; |
283 } | 289 } |
284 | 290 |
285 // Is this scope inside a with statement. | 291 // Is this scope inside a with statement. |
286 bool inside_with() const { return scope_inside_with_; } | 292 bool inside_with() const { return scope_inside_with_; } |
287 // Does this scope contain a with statement. | 293 // Does this scope contain a with statement. |
288 bool contains_with() const { return scope_contains_with_; } | 294 bool contains_with() const { return scope_contains_with_; } |
289 | 295 |
| 296 // Does this scope access "this". |
| 297 bool uses_this() const { return scope_uses_this_; } |
| 298 // Does any inner scope access "this". |
| 299 bool inner_uses_this() const { return inner_scope_uses_this_; } |
| 300 // Does this scope access "arguments". |
| 301 bool uses_arguments() const { return scope_uses_arguments_; } |
| 302 // Does any inner scope access "arguments". |
| 303 bool inner_uses_arguments() const { return inner_scope_uses_arguments_; } |
| 304 |
290 // --------------------------------------------------------------------------- | 305 // --------------------------------------------------------------------------- |
291 // Accessors. | 306 // Accessors. |
292 | 307 |
293 // The type of this scope. | 308 // The type of this scope. |
294 ScopeType scope_type() const { return scope_type_; } | 309 ScopeType scope_type() const { return scope_type_; } |
295 | 310 |
296 // The language mode of this scope. | 311 // The language mode of this scope. |
297 StrictMode strict_mode() const { return strict_mode_; } | 312 StrictMode strict_mode() const { return strict_mode_; } |
298 | 313 |
299 // The variable corresponding the 'this' value. | 314 // The variable corresponding the 'this' value. |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 | 471 |
457 // Scope-specific information computed during parsing. | 472 // Scope-specific information computed during parsing. |
458 // | 473 // |
459 // This scope is inside a 'with' of some outer scope. | 474 // This scope is inside a 'with' of some outer scope. |
460 bool scope_inside_with_; | 475 bool scope_inside_with_; |
461 // This scope contains a 'with' statement. | 476 // This scope contains a 'with' statement. |
462 bool scope_contains_with_; | 477 bool scope_contains_with_; |
463 // This scope or a nested catch scope or with scope contain an 'eval' call. At | 478 // This scope or a nested catch scope or with scope contain an 'eval' call. At |
464 // the 'eval' call site this scope is the declaration scope. | 479 // the 'eval' call site this scope is the declaration scope. |
465 bool scope_calls_eval_; | 480 bool scope_calls_eval_; |
| 481 // This scope uses "this". |
| 482 bool scope_uses_this_; |
| 483 // This scope uses "arguments". |
| 484 bool scope_uses_arguments_; |
466 // The strict mode of this scope. | 485 // The strict mode of this scope. |
467 StrictMode strict_mode_; | 486 StrictMode strict_mode_; |
468 // Source positions. | 487 // Source positions. |
469 int start_position_; | 488 int start_position_; |
470 int end_position_; | 489 int end_position_; |
471 | 490 |
472 // Computed via PropagateScopeInfo. | 491 // Computed via PropagateScopeInfo. |
473 bool outer_scope_calls_sloppy_eval_; | 492 bool outer_scope_calls_sloppy_eval_; |
474 bool inner_scope_calls_eval_; | 493 bool inner_scope_calls_eval_; |
| 494 bool inner_scope_uses_this_; |
| 495 bool inner_scope_uses_arguments_; |
475 bool force_eager_compilation_; | 496 bool force_eager_compilation_; |
476 bool force_context_allocation_; | 497 bool force_context_allocation_; |
477 | 498 |
478 // True if it doesn't need scope resolution (e.g., if the scope was | 499 // True if it doesn't need scope resolution (e.g., if the scope was |
479 // constructed based on a serialized scope info or a catch context). | 500 // constructed based on a serialized scope info or a catch context). |
480 bool already_resolved_; | 501 bool already_resolved_; |
481 | 502 |
482 // Computed as variables are declared. | 503 // Computed as variables are declared. |
483 int num_var_or_const_; | 504 int num_var_or_const_; |
484 | 505 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 Scope* outer_scope, | 632 Scope* outer_scope, |
612 Handle<ScopeInfo> scope_info); | 633 Handle<ScopeInfo> scope_info); |
613 | 634 |
614 AstValueFactory* ast_value_factory_; | 635 AstValueFactory* ast_value_factory_; |
615 Zone* zone_; | 636 Zone* zone_; |
616 }; | 637 }; |
617 | 638 |
618 } } // namespace v8::internal | 639 } } // namespace v8::internal |
619 | 640 |
620 #endif // V8_SCOPES_H_ | 641 #endif // V8_SCOPES_H_ |
OLD | NEW |