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

Side by Side Diff: src/ast/scopes.h

Issue 2276923002: Remove the rest_parameter(int*) variant, use rest_parameter() instead. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Ports. Created 4 years, 4 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 | « src/ast/ast-numbering.cc ('k') | src/ast/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 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/base/hashmap.h" 9 #include "src/base/hashmap.h"
10 #include "src/globals.h" 10 #include "src/globals.h"
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 // Parameters. The left-most parameter has index 0. 675 // Parameters. The left-most parameter has index 0.
676 // Only valid for function scopes. 676 // Only valid for function scopes.
677 Variable* parameter(int index) const { 677 Variable* parameter(int index) const {
678 DCHECK(is_function_scope()); 678 DCHECK(is_function_scope());
679 return params_[index]; 679 return params_[index];
680 } 680 }
681 681
682 // Returns the default function arity excluding default or rest parameters. 682 // Returns the default function arity excluding default or rest parameters.
683 int default_function_length() const { return arity_; } 683 int default_function_length() const { return arity_; }
684 684
685 // Returns the number of formal parameters, up to but not including the 685 // Returns the number of formal parameters, excluding a possible rest
686 // rest parameter index (if the function has rest parameters), i.e. it 686 // parameter. Examples:
687 // says 2 for 687 // function foo(a, b) {} ==> 2
688 // 688 // function foo(a, b, ...c) {} ==> 2
689 // function foo(a, b) { ... } 689 // function foo(a, b, c = 1) {} ==> 3
690 //
691 // and
692 //
693 // function foo(a, b, ...c) { ... }
694 //
695 // but for
696 //
697 // function foo(a, b, c = 1) { ... }
698 //
699 // we return 3 here.
700 int num_parameters() const { 690 int num_parameters() const {
701 return has_rest_parameter() ? params_.length() - 1 : params_.length(); 691 return has_rest_ ? params_.length() - 1 : params_.length();
702 } 692 }
703 693
704 // A function can have at most one rest parameter. Returns Variable* or NULL. 694 // The function's rest parameter (nullptr if there is none).
705 Variable* rest_parameter(int* index) const { 695 Variable* rest_parameter() const {
706 if (!has_rest_parameter()) return nullptr; 696 return has_rest_ ? params_[params_.length() - 1] : nullptr;
707 *index = params_.length() - 1;
708 return rest_parameter();
709 } 697 }
710 Variable* rest_parameter() const {
711 DCHECK(has_rest_parameter());
712 return params_[params_.length() - 1];
713 }
714
715 bool has_rest_parameter() const { return has_rest_; }
716 698
717 bool has_simple_parameters() const { return has_simple_parameters_; } 699 bool has_simple_parameters() const { return has_simple_parameters_; }
718 700
719 // TODO(caitp): manage this state in a better way. PreParser must be able to 701 // TODO(caitp): manage this state in a better way. PreParser must be able to
720 // communicate that the scope is non-simple, without allocating any parameters 702 // communicate that the scope is non-simple, without allocating any parameters
721 // as the Parser does. This is necessary to ensure that TC39's proposed early 703 // as the Parser does. This is necessary to ensure that TC39's proposed early
722 // error can be reported consistently regardless of whether lazily parsed or 704 // error can be reported consistently regardless of whether lazily parsed or
723 // not. 705 // not.
724 void SetHasNonSimpleParameters() { 706 void SetHasNonSimpleParameters() {
725 DCHECK(is_function_scope()); 707 DCHECK(is_function_scope());
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 void AllocateModuleVariables(); 844 void AllocateModuleVariables();
863 845
864 private: 846 private:
865 ModuleDescriptor* module_descriptor_; 847 ModuleDescriptor* module_descriptor_;
866 }; 848 };
867 849
868 } // namespace internal 850 } // namespace internal
869 } // namespace v8 851 } // namespace v8
870 852
871 #endif // V8_AST_SCOPES_H_ 853 #endif // V8_AST_SCOPES_H_
OLDNEW
« no previous file with comments | « src/ast/ast-numbering.cc ('k') | src/ast/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698