| 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/base/hashmap.h" | 8 #include "src/base/hashmap.h" |
| 9 #include "src/globals.h" | 9 #include "src/globals.h" |
| 10 #include "src/objects.h" | 10 #include "src/objects.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 void Reparent(DeclarationScope* new_parent) const; | 91 void Reparent(DeclarationScope* new_parent) const; |
| 92 | 92 |
| 93 private: | 93 private: |
| 94 Scope* outer_scope_; | 94 Scope* outer_scope_; |
| 95 Scope* top_inner_scope_; | 95 Scope* top_inner_scope_; |
| 96 VariableProxy* top_unresolved_; | 96 VariableProxy* top_unresolved_; |
| 97 int top_local_; | 97 int top_local_; |
| 98 int top_decl_; | 98 int top_decl_; |
| 99 }; | 99 }; |
| 100 | 100 |
| 101 enum class DeserializationMode { kDeserializeOffHeap, kKeepScopeInfo }; | 101 static Scope* DeserializeScopeChainForTesting( |
| 102 | 102 Isolate* isolate, Zone* zone, Context* context, |
| 103 static Scope* DeserializeScopeChain(Isolate* isolate, Zone* zone, | 103 DeclarationScope* script_scope, AstValueFactory* ast_value_factory); |
| 104 Context* context, | |
| 105 DeclarationScope* script_scope, | |
| 106 AstValueFactory* ast_value_factory, | |
| 107 DeserializationMode deserialization_mode); | |
| 108 | 104 |
| 109 // Checks if the block scope is redundant, i.e. it does not contain any | 105 // Checks if the block scope is redundant, i.e. it does not contain any |
| 110 // block scoped declarations. In that case it is removed from the scope | 106 // block scoped declarations. In that case it is removed from the scope |
| 111 // tree and its children are reparented. | 107 // tree and its children are reparented. |
| 112 Scope* FinalizeBlockScope(); | 108 Scope* FinalizeBlockScope(); |
| 113 | 109 |
| 114 // Inserts outer_scope into this scope's scope chain (and removes this | 110 // Inserts outer_scope into this scope's scope chain (and removes this |
| 115 // from the current outer_scope_'s inner scope list). | 111 // from the current outer_scope_'s inner scope list). |
| 116 // Assumes outer_scope_ is non-null. | 112 // Assumes outer_scope_ is non-null. |
| 117 void ReplaceOuterScope(Scope* outer_scope); | 113 void ReplaceOuterScope(Scope* outer_scope); |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 scope = scope->sibling_) { | 561 scope = scope->sibling_) { |
| 566 if (scope->sibling_ == inner_scope) { | 562 if (scope->sibling_ == inner_scope) { |
| 567 scope->sibling_ = scope->sibling_->sibling_; | 563 scope->sibling_ = scope->sibling_->sibling_; |
| 568 return; | 564 return; |
| 569 } | 565 } |
| 570 } | 566 } |
| 571 } | 567 } |
| 572 | 568 |
| 573 void SetDefaults(); | 569 void SetDefaults(); |
| 574 | 570 |
| 575 void DeserializeScopeInfo(Isolate* isolate, | 571 static Scope* DeserializeScopeChain(Isolate* isolate, Zone* zone, |
| 576 AstValueFactory* ast_value_factory); | 572 Context* context, |
| 573 DeclarationScope* script_scope, |
| 574 AstValueFactory* ast_value_factory); |
| 577 | 575 |
| 578 friend class DeclarationScope; | 576 friend class DeclarationScope; |
| 579 }; | 577 }; |
| 580 | 578 |
| 581 class DeclarationScope : public Scope { | 579 class DeclarationScope : public Scope { |
| 582 public: | 580 public: |
| 583 DeclarationScope(Zone* zone, Scope* outer_scope, ScopeType scope_type, | 581 DeclarationScope(Zone* zone, Scope* outer_scope, ScopeType scope_type, |
| 584 FunctionKind function_kind = kNormalFunction); | 582 FunctionKind function_kind = kNormalFunction); |
| 585 DeclarationScope(Zone* zone, ScopeType scope_type, | 583 DeclarationScope(Zone* zone, ScopeType scope_type, |
| 586 Handle<ScopeInfo> scope_info); | 584 Handle<ScopeInfo> scope_info); |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 797 // processed (parsed) to ensure that unresolved variables can be | 795 // processed (parsed) to ensure that unresolved variables can be |
| 798 // resolved properly. | 796 // resolved properly. |
| 799 // | 797 // |
| 800 // In the case of code compiled and run using 'eval', the context | 798 // In the case of code compiled and run using 'eval', the context |
| 801 // parameter is the context in which eval was called. In all other | 799 // parameter is the context in which eval was called. In all other |
| 802 // cases the context parameter is an empty handle. | 800 // cases the context parameter is an empty handle. |
| 803 void AllocateVariables(ParseInfo* info, AnalyzeMode mode); | 801 void AllocateVariables(ParseInfo* info, AnalyzeMode mode); |
| 804 | 802 |
| 805 void SetDefaults(); | 803 void SetDefaults(); |
| 806 | 804 |
| 805 void DeserializeScopeChain(ParseInfo* parse_info); |
| 806 |
| 807 void HoistSloppyBlockFunctionsInternal(AstNodeFactory* factory, bool* ok); |
| 808 |
| 807 // If the scope is a function scope, this is the function kind. | 809 // If the scope is a function scope, this is the function kind. |
| 808 const FunctionKind function_kind_; | 810 const FunctionKind function_kind_; |
| 809 | 811 |
| 810 bool has_simple_parameters_ : 1; | 812 bool has_simple_parameters_ : 1; |
| 811 // This scope contains an "use asm" annotation. | 813 // This scope contains an "use asm" annotation. |
| 812 bool asm_module_ : 1; | 814 bool asm_module_ : 1; |
| 813 // This scope's outer context is an asm module. | 815 // This scope's outer context is an asm module. |
| 814 bool asm_function_ : 1; | 816 bool asm_function_ : 1; |
| 815 bool force_eager_compilation_ : 1; | 817 bool force_eager_compilation_ : 1; |
| 816 // This function scope has a rest parameter. | 818 // This function scope has a rest parameter. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 void AllocateModuleVariables(); | 857 void AllocateModuleVariables(); |
| 856 | 858 |
| 857 private: | 859 private: |
| 858 ModuleDescriptor* module_descriptor_; | 860 ModuleDescriptor* module_descriptor_; |
| 859 }; | 861 }; |
| 860 | 862 |
| 861 } // namespace internal | 863 } // namespace internal |
| 862 } // namespace v8 | 864 } // namespace v8 |
| 863 | 865 |
| 864 #endif // V8_AST_SCOPES_H_ | 866 #endif // V8_AST_SCOPES_H_ |
| OLD | NEW |