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

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

Issue 2276483003: Store NonLocals in variables_ (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 4 years, 4 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
« no previous file with comments | « no previous file | src/ast/scopes.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | src/ast/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698