| 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/base/hashmap.h" | 9 #include "src/base/hashmap.h" | 
| 10 #include "src/globals.h" | 10 #include "src/globals.h" | 
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 375 | 375 | 
| 376   // Determine if we can parse a function literal in this scope lazily. | 376   // Determine if we can parse a function literal in this scope lazily. | 
| 377   bool AllowsLazyParsing() const; | 377   bool AllowsLazyParsing() const; | 
| 378 | 378 | 
| 379   // Determine if we can use lazy compilation for this scope. | 379   // Determine if we can use lazy compilation for this scope. | 
| 380   bool AllowsLazyCompilation() const; | 380   bool AllowsLazyCompilation() const; | 
| 381 | 381 | 
| 382   // Determine if we can use lazy compilation for this scope without a context. | 382   // Determine if we can use lazy compilation for this scope without a context. | 
| 383   bool AllowsLazyCompilationWithoutContext() const; | 383   bool AllowsLazyCompilationWithoutContext() const; | 
| 384 | 384 | 
| 385   // True if the outer context of this scope is always the native context. |  | 
| 386   bool HasTrivialOuterContext() const; |  | 
| 387 |  | 
| 388   // The number of contexts between this and scope; zero if this == scope. | 385   // The number of contexts between this and scope; zero if this == scope. | 
| 389   int ContextChainLength(Scope* scope); | 386   int ContextChainLength(Scope* scope); | 
| 390 | 387 | 
| 391   // The maximum number of nested contexts required for this scope and any inner | 388   // The maximum number of nested contexts required for this scope and any inner | 
| 392   // scopes. | 389   // scopes. | 
| 393   int MaxNestedContextChainLength(); | 390   int MaxNestedContextChainLength(); | 
| 394 | 391 | 
| 395   // Find the first function, script, eval or (declaration) block scope. This is | 392   // Find the first function, script, eval or (declaration) block scope. This is | 
| 396   // the scope where var declarations will be hoisted to in the implementation. | 393   // the scope where var declarations will be hoisted to in the implementation. | 
| 397   DeclarationScope* GetDeclarationScope(); | 394   DeclarationScope* GetDeclarationScope(); | 
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 586                        AstNodeFactory* factory); | 583                        AstNodeFactory* factory); | 
| 587   void ResolveVariablesRecursively(ParseInfo* info, AstNodeFactory* factory); | 584   void ResolveVariablesRecursively(ParseInfo* info, AstNodeFactory* factory); | 
| 588 | 585 | 
| 589   // Finds free variables of this scope. This mutates the unresolved variables | 586   // Finds free variables of this scope. This mutates the unresolved variables | 
| 590   // list along the way, so full resolution cannot be done afterwards. | 587   // list along the way, so full resolution cannot be done afterwards. | 
| 591   // If a ParseInfo* is passed, non-free variables will be resolved. | 588   // If a ParseInfo* is passed, non-free variables will be resolved. | 
| 592   VariableProxy* FetchFreeVariables(DeclarationScope* max_outer_scope, | 589   VariableProxy* FetchFreeVariables(DeclarationScope* max_outer_scope, | 
| 593                                     ParseInfo* info = nullptr, | 590                                     ParseInfo* info = nullptr, | 
| 594                                     VariableProxy* stack = nullptr); | 591                                     VariableProxy* stack = nullptr); | 
| 595 | 592 | 
| 596   bool InsideWithScope() const { |  | 
| 597     for (const Scope* scope = this; scope != nullptr; |  | 
| 598          scope = scope->outer_scope()) { |  | 
| 599       if (scope->is_with_scope()) return true; |  | 
| 600     } |  | 
| 601     return false; |  | 
| 602   } |  | 
| 603 |  | 
| 604   // Scope analysis. | 593   // Scope analysis. | 
| 605   void PropagateScopeInfo(bool outer_scope_calls_sloppy_eval); | 594   void PropagateScopeInfo(bool outer_scope_calls_sloppy_eval); | 
| 606   bool HasTrivialContext() const; |  | 
| 607 | 595 | 
| 608   // Predicates. | 596   // Predicates. | 
| 609   bool MustAllocate(Variable* var); | 597   bool MustAllocate(Variable* var); | 
| 610   bool MustAllocateInContext(Variable* var); | 598   bool MustAllocateInContext(Variable* var); | 
| 611 | 599 | 
| 612   // Variable allocation. | 600   // Variable allocation. | 
| 613   void AllocateStackSlot(Variable* var); | 601   void AllocateStackSlot(Variable* var); | 
| 614   void AllocateHeapSlot(Variable* var); | 602   void AllocateHeapSlot(Variable* var); | 
| 615   void AllocateNonParameterLocal(Variable* var); | 603   void AllocateNonParameterLocal(Variable* var); | 
| 616   void AllocateDeclaredGlobal(Variable* var); | 604   void AllocateDeclaredGlobal(Variable* var); | 
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 905   void AllocateModuleVariables(); | 893   void AllocateModuleVariables(); | 
| 906 | 894 | 
| 907  private: | 895  private: | 
| 908   ModuleDescriptor* module_descriptor_; | 896   ModuleDescriptor* module_descriptor_; | 
| 909 }; | 897 }; | 
| 910 | 898 | 
| 911 }  // namespace internal | 899 }  // namespace internal | 
| 912 }  // namespace v8 | 900 }  // namespace v8 | 
| 913 | 901 | 
| 914 #endif  // V8_AST_SCOPES_H_ | 902 #endif  // V8_AST_SCOPES_H_ | 
| OLD | NEW | 
|---|