| Index: src/scopes.h
|
| diff --git a/src/scopes.h b/src/scopes.h
|
| index 186530ceab2ef134b2384ef32e5b9b588ecc182e..284386d854749e375f2b5ad6751fe57ff6a8b73f 100644
|
| --- a/src/scopes.h
|
| +++ b/src/scopes.h
|
| @@ -73,7 +73,8 @@ class Scope: public ZoneObject {
|
| // Construction
|
|
|
| Scope(Zone* zone, Scope* outer_scope, ScopeType scope_type,
|
| - AstValueFactory* value_factory);
|
| + AstValueFactory* value_factory,
|
| + FunctionKind function_kind = kNormalFunction);
|
|
|
| // Compute top scope and allocate variables. For lazy compilation the top
|
| // scope only contains the single lazily compiled function, so this
|
| @@ -88,7 +89,7 @@ class Scope: public ZoneObject {
|
| scope_name_ = scope_name;
|
| }
|
|
|
| - void Initialize(bool subclass_constructor = false);
|
| + void Initialize();
|
|
|
| // Checks if the block scope is redundant, i.e. it does not contain any
|
| // block scoped declarations. In that case it is removed from the scope
|
| @@ -281,6 +282,13 @@ class Scope: public ZoneObject {
|
| bool is_block_scope() const { return scope_type_ == BLOCK_SCOPE; }
|
| bool is_with_scope() const { return scope_type_ == WITH_SCOPE; }
|
| bool is_arrow_scope() const { return scope_type_ == ARROW_SCOPE; }
|
| + void tag_as_class_scope() {
|
| + DCHECK(is_block_scope());
|
| + block_scope_is_class_scope_ = true;
|
| + }
|
| + bool is_class_scope() const {
|
| + return is_block_scope() && block_scope_is_class_scope_;
|
| + }
|
| bool is_declaration_scope() const {
|
| return is_eval_scope() || is_function_scope() ||
|
| is_module_scope() || is_script_scope();
|
| @@ -332,6 +340,8 @@ class Scope: public ZoneObject {
|
| // The type of this scope.
|
| ScopeType scope_type() const { return scope_type_; }
|
|
|
| + FunctionKind function_kind() const { return function_kind_; }
|
| +
|
| // The language mode of this scope.
|
| LanguageMode language_mode() const { return language_mode_; }
|
|
|
| @@ -501,6 +511,10 @@ class Scope: public ZoneObject {
|
|
|
| // The scope type.
|
| ScopeType scope_type_;
|
| + // Some block scopes are tagged as class scopes.
|
| + bool block_scope_is_class_scope_;
|
| + // If the scope is a function scope, this is the function kind.
|
| + FunctionKind function_kind_;
|
|
|
| // Debugging support.
|
| const AstRawString* scope_name_;
|
| @@ -658,6 +672,12 @@ class Scope: public ZoneObject {
|
| bool ResolveVariablesRecursively(CompilationInfo* info,
|
| AstNodeFactory* factory);
|
|
|
| + bool CheckStrongModeDeclaration(VariableProxy* proxy, Variable* var);
|
| +
|
| + // If this scope is a method scope of a class, return the corresponding
|
| + // class variable, otherwise nullptr.
|
| + Variable* ClassVariableForMethod() const;
|
| +
|
| // Scope analysis.
|
| void PropagateScopeInfo(bool outer_scope_calls_sloppy_eval);
|
| bool HasTrivialContext() const;
|
| @@ -703,9 +723,9 @@ class Scope: public ZoneObject {
|
| }
|
| }
|
|
|
| - void SetDefaults(ScopeType type,
|
| - Scope* outer_scope,
|
| - Handle<ScopeInfo> scope_info);
|
| + void SetDefaults(ScopeType type, Scope* outer_scope,
|
| + Handle<ScopeInfo> scope_info,
|
| + FunctionKind function_kind = kNormalFunction);
|
|
|
| AstValueFactory* ast_value_factory_;
|
| Zone* zone_;
|
|
|