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_AST_SCOPES_H_ | 5 #ifndef V8_AST_SCOPES_H_ |
6 #define V8_AST_SCOPES_H_ | 6 #define V8_AST_SCOPES_H_ |
7 | 7 |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/pending-compilation-error-handler.h" | 9 #include "src/pending-compilation-error-handler.h" |
10 #include "src/zone.h" | 10 #include "src/zone.h" |
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 Variable* parameter(int index) const { | 413 Variable* parameter(int index) const { |
414 DCHECK(is_function_scope()); | 414 DCHECK(is_function_scope()); |
415 return params_[index]; | 415 return params_[index]; |
416 } | 416 } |
417 | 417 |
418 // Returns the default function arity excluding default or rest parameters. | 418 // Returns the default function arity excluding default or rest parameters. |
419 int default_function_length() const { return arity_; } | 419 int default_function_length() const { return arity_; } |
420 | 420 |
421 int num_parameters() const { return params_.length(); } | 421 int num_parameters() const { return params_.length(); } |
422 | 422 |
423 // A function can have at most one rest parameter. Returns Variable* or NULL. | |
424 Variable* rest_parameter(int* index) const { | |
425 *index = rest_index_; | |
426 if (rest_index_ < 0) return NULL; | |
427 return rest_parameter_; | |
428 } | |
429 | |
430 bool has_rest_parameter() const { | |
431 return rest_index_ >= 0; | |
432 } | |
433 | |
434 bool has_simple_parameters() const { | 423 bool has_simple_parameters() const { |
435 return has_simple_parameters_; | 424 return has_simple_parameters_; |
436 } | 425 } |
437 | 426 |
438 // TODO(caitp): manage this state in a better way. PreParser must be able to | 427 // TODO(caitp): manage this state in a better way. PreParser must be able to |
439 // communicate that the scope is non-simple, without allocating any parameters | 428 // communicate that the scope is non-simple, without allocating any parameters |
440 // as the Parser does. This is necessary to ensure that TC39's proposed early | 429 // as the Parser does. This is necessary to ensure that TC39's proposed early |
441 // error can be reported consistently regardless of whether lazily parsed or | 430 // error can be reported consistently regardless of whether lazily parsed or |
442 // not. | 431 // not. |
443 void SetHasNonSimpleParameters() { | 432 void SetHasNonSimpleParameters() { |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 // The number of modules (including nested ones). | 684 // The number of modules (including nested ones). |
696 int num_modules_; | 685 int num_modules_; |
697 | 686 |
698 // For module scopes, the host scope's temporary variable binding this module. | 687 // For module scopes, the host scope's temporary variable binding this module. |
699 Variable* module_var_; | 688 Variable* module_var_; |
700 | 689 |
701 // Info about the parameter list of a function. | 690 // Info about the parameter list of a function. |
702 int arity_; | 691 int arity_; |
703 bool has_simple_parameters_; | 692 bool has_simple_parameters_; |
704 Variable* rest_parameter_; | 693 Variable* rest_parameter_; |
705 int rest_index_; | |
706 | 694 |
707 // Serialized scope info support. | 695 // Serialized scope info support. |
708 Handle<ScopeInfo> scope_info_; | 696 Handle<ScopeInfo> scope_info_; |
709 bool already_resolved() { return already_resolved_; } | 697 bool already_resolved() { return already_resolved_; } |
710 | 698 |
711 // Create a non-local variable with a given name. | 699 // Create a non-local variable with a given name. |
712 // These variables are looked up dynamically at runtime. | 700 // These variables are looked up dynamically at runtime. |
713 Variable* NonLocal(const AstRawString* name, VariableMode mode); | 701 Variable* NonLocal(const AstRawString* name, VariableMode mode); |
714 | 702 |
715 // Variable resolution. | 703 // Variable resolution. |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 | 831 |
844 // For tracking which classes are declared consecutively. Needed for strong | 832 // For tracking which classes are declared consecutively. Needed for strong |
845 // mode. | 833 // mode. |
846 int class_declaration_group_start_; | 834 int class_declaration_group_start_; |
847 }; | 835 }; |
848 | 836 |
849 } // namespace internal | 837 } // namespace internal |
850 } // namespace v8 | 838 } // namespace v8 |
851 | 839 |
852 #endif // V8_AST_SCOPES_H_ | 840 #endif // V8_AST_SCOPES_H_ |
OLD | NEW |