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

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

Issue 2685683002: [async-await] (simpler) fix for Return in try/finally in async functions (Closed)
Patch Set: add some comments + cleanup using BuildHardReturn Created 3 years, 10 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
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/base/compiler-specific.h" 8 #include "src/base/compiler-specific.h"
9 #include "src/base/hashmap.h" 9 #include "src/base/hashmap.h"
10 #include "src/globals.h" 10 #include "src/globals.h"
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 // Declare the function variable for a function literal. This variable 673 // Declare the function variable for a function literal. This variable
674 // is in an intermediate scope between this function scope and the the 674 // is in an intermediate scope between this function scope and the the
675 // outer scope. Only possible for function scopes; at most one variable. 675 // outer scope. Only possible for function scopes; at most one variable.
676 // 676 //
677 // This function needs to be called after all other variables have been 677 // This function needs to be called after all other variables have been
678 // declared in the scope. It will add a variable for {name} to {variables_}; 678 // declared in the scope. It will add a variable for {name} to {variables_};
679 // either the function variable itself, or a non-local in case the function 679 // either the function variable itself, or a non-local in case the function
680 // calls sloppy eval. 680 // calls sloppy eval.
681 Variable* DeclareFunctionVar(const AstRawString* name); 681 Variable* DeclareFunctionVar(const AstRawString* name);
682 682
683 // Declare some special internal variables which must be accessible to
684 // Ignition without ScopeInfo.
685 Variable* DeclareGeneratorObjectVar(const AstRawString* name);
686 Variable* DeclarePromiseVar(const AstRawString* name);
687
683 // Declare a parameter in this scope. When there are duplicated 688 // Declare a parameter in this scope. When there are duplicated
684 // parameters the rightmost one 'wins'. However, the implementation 689 // parameters the rightmost one 'wins'. However, the implementation
685 // expects all parameters to be declared and from left to right. 690 // expects all parameters to be declared and from left to right.
686 Variable* DeclareParameter(const AstRawString* name, VariableMode mode, 691 Variable* DeclareParameter(const AstRawString* name, VariableMode mode,
687 bool is_optional, bool is_rest, bool* is_duplicate, 692 bool is_optional, bool is_rest, bool* is_duplicate,
688 AstValueFactory* ast_value_factory); 693 AstValueFactory* ast_value_factory);
689 694
690 // Declare an implicit global variable in this scope which must be a 695 // Declare an implicit global variable in this scope which must be a
691 // script scope. The variable was introduced (possibly from an inner 696 // script scope. The variable was introduced (possibly from an inner
692 // scope) by a reference to an unresolved variable with no intervening 697 // scope) by a reference to an unresolved variable with no intervening
(...skipping 18 matching lines...) Expand all
711 // The variable corresponding to the 'new.target' value. 716 // The variable corresponding to the 'new.target' value.
712 Variable* new_target_var() { return new_target_; } 717 Variable* new_target_var() { return new_target_; }
713 718
714 // The variable holding the function literal for named function 719 // The variable holding the function literal for named function
715 // literals, or NULL. Only valid for function scopes. 720 // literals, or NULL. Only valid for function scopes.
716 Variable* function_var() const { 721 Variable* function_var() const {
717 DCHECK(is_function_scope()); 722 DCHECK(is_function_scope());
718 return function_; 723 return function_;
719 } 724 }
720 725
726 Variable* generator_object_var() const {
727 DCHECK(is_function_scope() || is_module_scope());
728 return generator_object_;
729 }
730
731 Variable* promise_var() const {
732 DCHECK(is_function_scope());
733 DCHECK(IsAsyncFunction(function_kind_));
734 return promise_;
735 }
736
721 // Parameters. The left-most parameter has index 0. 737 // Parameters. The left-most parameter has index 0.
722 // Only valid for function and module scopes. 738 // Only valid for function and module scopes.
723 Variable* parameter(int index) const { 739 Variable* parameter(int index) const {
724 DCHECK(is_function_scope() || is_module_scope()); 740 DCHECK(is_function_scope() || is_module_scope());
725 return params_[index]; 741 return params_[index];
726 } 742 }
727 743
728 // Returns the number of formal parameters, excluding a possible rest 744 // Returns the number of formal parameters, excluding a possible rest
729 // parameter. Examples: 745 // parameter. Examples:
730 // function foo(a, b) {} ==> 2 746 // function foo(a, b) {} ==> 2
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 // Convenience variable. 883 // Convenience variable.
868 Variable* receiver_; 884 Variable* receiver_;
869 // Function variable, if any; function scopes only. 885 // Function variable, if any; function scopes only.
870 Variable* function_; 886 Variable* function_;
871 // new.target variable, function scopes only. 887 // new.target variable, function scopes only.
872 Variable* new_target_; 888 Variable* new_target_;
873 // Convenience variable; function scopes only. 889 // Convenience variable; function scopes only.
874 Variable* arguments_; 890 Variable* arguments_;
875 // Convenience variable; Subclass constructor only 891 // Convenience variable; Subclass constructor only
876 Variable* this_function_; 892 Variable* this_function_;
893
894 // Generator object, if any; generator function scopes and module scopes only.
895 Variable* generator_object_;
896 // Promise, if any; async function scopes only.
897 Variable* promise_;
Dan Ehrenberg 2017/02/08 21:12:56 Will there be more live DeclarationScopes than Fun
877 }; 898 };
878 899
879 class ModuleScope final : public DeclarationScope { 900 class ModuleScope final : public DeclarationScope {
880 public: 901 public:
881 ModuleScope(DeclarationScope* script_scope, 902 ModuleScope(DeclarationScope* script_scope,
882 AstValueFactory* ast_value_factory); 903 AstValueFactory* ast_value_factory);
883 904
884 // Deserialization. 905 // Deserialization.
885 // The generated ModuleDescriptor does not preserve all information. In 906 // The generated ModuleDescriptor does not preserve all information. In
886 // particular, its module_requests map will be empty because we no longer need 907 // particular, its module_requests map will be empty because we no longer need
(...skipping 11 matching lines...) Expand all
898 void AllocateModuleVariables(); 919 void AllocateModuleVariables();
899 920
900 private: 921 private:
901 ModuleDescriptor* module_descriptor_; 922 ModuleDescriptor* module_descriptor_;
902 }; 923 };
903 924
904 } // namespace internal 925 } // namespace internal
905 } // namespace v8 926 } // namespace v8
906 927
907 #endif // V8_AST_SCOPES_H_ 928 #endif // V8_AST_SCOPES_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698