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/hashmap.h" | 9 #include "src/hashmap.h" |
10 #include "src/pending-compilation-error-handler.h" | 10 #include "src/pending-compilation-error-handler.h" |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 // Parameters. The left-most parameter has index 0. | 421 // Parameters. The left-most parameter has index 0. |
422 // Only valid for function scopes. | 422 // Only valid for function scopes. |
423 Variable* parameter(int index) const { | 423 Variable* parameter(int index) const { |
424 DCHECK(is_function_scope()); | 424 DCHECK(is_function_scope()); |
425 return params_[index]; | 425 return params_[index]; |
426 } | 426 } |
427 | 427 |
428 // Returns the default function arity excluding default or rest parameters. | 428 // Returns the default function arity excluding default or rest parameters. |
429 int default_function_length() const { return arity_; } | 429 int default_function_length() const { return arity_; } |
430 | 430 |
431 int num_parameters() const { return params_.length(); } | 431 // Returns the number of formal parameters, up to but not including the |
| 432 // rest parameter index (if the function has rest parameters), i.e. it |
| 433 // says 2 for |
| 434 // |
| 435 // function foo(a, b) { ... } |
| 436 // |
| 437 // and |
| 438 // |
| 439 // function foo(a, b, ...c) { ... } |
| 440 // |
| 441 // but for |
| 442 // |
| 443 // function foo(a, b, c = 1) { ... } |
| 444 // |
| 445 // we return 3 here. |
| 446 int num_parameters() const { |
| 447 return has_rest_parameter() ? params_.length() - 1 : params_.length(); |
| 448 } |
432 | 449 |
433 // A function can have at most one rest parameter. Returns Variable* or NULL. | 450 // A function can have at most one rest parameter. Returns Variable* or NULL. |
434 Variable* rest_parameter(int* index) const { | 451 Variable* rest_parameter(int* index) const { |
435 *index = rest_index_; | 452 *index = rest_index_; |
436 if (rest_index_ < 0) return NULL; | 453 if (rest_index_ < 0) return NULL; |
437 return rest_parameter_; | 454 return rest_parameter_; |
438 } | 455 } |
439 | 456 |
440 bool has_rest_parameter() const { return rest_index_ >= 0; } | 457 bool has_rest_parameter() const { return rest_index_ >= 0; } |
441 | 458 |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
840 | 857 |
841 // For tracking which classes are declared consecutively. Needed for strong | 858 // For tracking which classes are declared consecutively. Needed for strong |
842 // mode. | 859 // mode. |
843 int class_declaration_group_start_; | 860 int class_declaration_group_start_; |
844 }; | 861 }; |
845 | 862 |
846 } // namespace internal | 863 } // namespace internal |
847 } // namespace v8 | 864 } // namespace v8 |
848 | 865 |
849 #endif // V8_AST_SCOPES_H_ | 866 #endif // V8_AST_SCOPES_H_ |
OLD | NEW |