| 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 12 matching lines...) Expand all  Loading... | 
| 23   Variable* Declare(Zone* zone, Scope* scope, const AstRawString* name, | 23   Variable* Declare(Zone* zone, Scope* scope, const AstRawString* name, | 
| 24                     VariableMode mode, Variable::Kind kind, | 24                     VariableMode mode, Variable::Kind kind, | 
| 25                     InitializationFlag initialization_flag, | 25                     InitializationFlag initialization_flag, | 
| 26                     MaybeAssignedFlag maybe_assigned_flag = kNotAssigned, | 26                     MaybeAssignedFlag maybe_assigned_flag = kNotAssigned, | 
| 27                     bool* added = nullptr); | 27                     bool* added = nullptr); | 
| 28 | 28 | 
| 29   Variable* Lookup(const AstRawString* name); | 29   Variable* Lookup(const AstRawString* name); | 
| 30 }; | 30 }; | 
| 31 | 31 | 
| 32 | 32 | 
| 33 // The dynamic scope part holds hash maps for the variables that will |  | 
| 34 // be looked up dynamically from within eval and with scopes. The objects |  | 
| 35 // are allocated on-demand from Scope::NonLocal to avoid wasting memory |  | 
| 36 // and setup time for scopes that don't need them. |  | 
| 37 class DynamicScopePart : public ZoneObject { |  | 
| 38  public: |  | 
| 39   explicit DynamicScopePart(Zone* zone) { |  | 
| 40     for (int i = 0; i < 3; i++) |  | 
| 41       maps_[i] = new(zone->New(sizeof(VariableMap))) VariableMap(zone); |  | 
| 42   } |  | 
| 43 |  | 
| 44   VariableMap* GetMap(VariableMode mode) { |  | 
| 45     int index = mode - DYNAMIC; |  | 
| 46     DCHECK(index >= 0 && index < 3); |  | 
| 47     return maps_[index]; |  | 
| 48   } |  | 
| 49 |  | 
| 50  private: |  | 
| 51   VariableMap *maps_[3]; |  | 
| 52 }; |  | 
| 53 |  | 
| 54 |  | 
| 55 // Sloppy block-scoped function declarations to var-bind | 33 // Sloppy block-scoped function declarations to var-bind | 
| 56 class SloppyBlockFunctionMap : public ZoneHashMap { | 34 class SloppyBlockFunctionMap : public ZoneHashMap { | 
| 57  public: | 35  public: | 
| 58   explicit SloppyBlockFunctionMap(Zone* zone); | 36   explicit SloppyBlockFunctionMap(Zone* zone); | 
| 59   void Declare(Zone* zone, const AstRawString* name, | 37   void Declare(Zone* zone, const AstRawString* name, | 
| 60                SloppyBlockFunctionStatement* statement); | 38                SloppyBlockFunctionStatement* statement); | 
| 61 }; | 39 }; | 
| 62 | 40 | 
| 63 | 41 | 
| 64 // Global invariants after AST construction: Each reference (i.e. identifier) | 42 // Global invariants after AST construction: Each reference (i.e. identifier) | 
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 467   // The variables declared in this scope: | 445   // The variables declared in this scope: | 
| 468   // | 446   // | 
| 469   // All user-declared variables (incl. parameters).  For script scopes | 447   // All user-declared variables (incl. parameters).  For script scopes | 
| 470   // variables may be implicitly 'declared' by being used (possibly in | 448   // variables may be implicitly 'declared' by being used (possibly in | 
| 471   // an inner scope) with no intervening with statements or eval calls. | 449   // an inner scope) with no intervening with statements or eval calls. | 
| 472   VariableMap variables_; | 450   VariableMap variables_; | 
| 473   // In case of non-scopeinfo-backed scopes, this contains the variables of the | 451   // In case of non-scopeinfo-backed scopes, this contains the variables of the | 
| 474   // map above in order of addition. | 452   // map above in order of addition. | 
| 475   // TODO(verwaest): Thread through Variable. | 453   // TODO(verwaest): Thread through Variable. | 
| 476   ZoneList<Variable*> ordered_variables_; | 454   ZoneList<Variable*> ordered_variables_; | 
| 477   // Variables that must be looked up dynamically. |  | 
| 478   DynamicScopePart* dynamics_; |  | 
| 479   // Unresolved variables referred to from this scope. The proxies themselves | 455   // Unresolved variables referred to from this scope. The proxies themselves | 
| 480   // form a linked list of all unresolved proxies. | 456   // form a linked list of all unresolved proxies. | 
| 481   VariableProxy* unresolved_; | 457   VariableProxy* unresolved_; | 
| 482   // Declarations. | 458   // Declarations. | 
| 483   ZoneList<Declaration*> decls_; | 459   ZoneList<Declaration*> decls_; | 
| 484 | 460 | 
| 485   // Serialized scope info support. | 461   // Serialized scope info support. | 
| 486   Handle<ScopeInfo> scope_info_; | 462   Handle<ScopeInfo> scope_info_; | 
| 487 // Debugging support. | 463 // Debugging support. | 
| 488 #ifdef DEBUG | 464 #ifdef DEBUG | 
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 884   void AllocateModuleVariables(); | 860   void AllocateModuleVariables(); | 
| 885 | 861 | 
| 886  private: | 862  private: | 
| 887   ModuleDescriptor* module_descriptor_; | 863   ModuleDescriptor* module_descriptor_; | 
| 888 }; | 864 }; | 
| 889 | 865 | 
| 890 }  // namespace internal | 866 }  // namespace internal | 
| 891 }  // namespace v8 | 867 }  // namespace v8 | 
| 892 | 868 | 
| 893 #endif  // V8_AST_SCOPES_H_ | 869 #endif  // V8_AST_SCOPES_H_ | 
| OLD | NEW | 
|---|