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

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

Issue 2287173002: Replace CollectVariables with locals(), update callsites to walk locals instead (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: restore undefined handling Created 4 years, 3 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 | « src/ast/scopeinfo.cc ('k') | 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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 137
138 // Declare a local variable in this scope. If the variable has been 138 // Declare a local variable in this scope. If the variable has been
139 // declared before, the previously declared variable is returned. 139 // declared before, the previously declared variable is returned.
140 Variable* DeclareLocal(const AstRawString* name, VariableMode mode, 140 Variable* DeclareLocal(const AstRawString* name, VariableMode mode,
141 InitializationFlag init_flag, Variable::Kind kind, 141 InitializationFlag init_flag, Variable::Kind kind,
142 MaybeAssignedFlag maybe_assigned_flag = kNotAssigned); 142 MaybeAssignedFlag maybe_assigned_flag = kNotAssigned);
143 143
144 // Declarations list. 144 // Declarations list.
145 ZoneList<Declaration*>* declarations() { return &decls_; } 145 ZoneList<Declaration*>* declarations() { return &decls_; }
146 146
147 ZoneList<Variable*>* locals() { return &locals_; }
148
147 // Create a new unresolved variable. 149 // Create a new unresolved variable.
148 VariableProxy* NewUnresolved(AstNodeFactory* factory, 150 VariableProxy* NewUnresolved(AstNodeFactory* factory,
149 const AstRawString* name, 151 const AstRawString* name,
150 int start_position = kNoSourcePosition, 152 int start_position = kNoSourcePosition,
151 int end_position = kNoSourcePosition, 153 int end_position = kNoSourcePosition,
152 Variable::Kind kind = Variable::NORMAL) { 154 Variable::Kind kind = Variable::NORMAL) {
153 // Note that we must not share the unresolved variables with 155 // Note that we must not share the unresolved variables with
154 // the same name because they may be removed selectively via 156 // the same name because they may be removed selectively via
155 // RemoveUnresolved(). 157 // RemoveUnresolved().
156 DCHECK(!already_resolved_); 158 DCHECK(!already_resolved_);
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 335
334 const AstRawString* catch_variable_name() const { 336 const AstRawString* catch_variable_name() const {
335 DCHECK(is_catch_scope()); 337 DCHECK(is_catch_scope());
336 DCHECK_EQ(1, num_var()); 338 DCHECK_EQ(1, num_var());
337 return static_cast<AstRawString*>(variables_.Start()->key); 339 return static_cast<AstRawString*>(variables_.Start()->key);
338 } 340 }
339 341
340 // --------------------------------------------------------------------------- 342 // ---------------------------------------------------------------------------
341 // Variable allocation. 343 // Variable allocation.
342 344
343 // Collect variables in this scope. Note that the function variable - if
344 // present - is not collected and should be handled separately.
345 void CollectVariables(ZoneList<Variable*>* stack_locals,
346 ZoneList<Variable*>* context_locals,
347 ZoneList<Variable*>* context_globals);
348
349 // Result of variable allocation. 345 // Result of variable allocation.
350 int num_stack_slots() const { return num_stack_slots_; } 346 int num_stack_slots() const { return num_stack_slots_; }
351 int num_heap_slots() const { return num_heap_slots_; } 347 int num_heap_slots() const { return num_heap_slots_; }
352 int num_global_slots() const { return num_global_slots_; }
353 348
354 int StackLocalCount() const; 349 int StackLocalCount() const;
355 int ContextLocalCount() const; 350 int ContextLocalCount() const;
356 int ContextGlobalCount() const;
357 351
358 // Determine if we can parse a function literal in this scope lazily. 352 // Determine if we can parse a function literal in this scope lazily.
359 bool AllowsLazyParsing() const; 353 bool AllowsLazyParsing() const;
360 354
361 // The number of contexts between this and scope; zero if this == scope. 355 // The number of contexts between this and scope; zero if this == scope.
362 int ContextChainLength(Scope* scope) const; 356 int ContextChainLength(Scope* scope) const;
363 357
364 // The number of contexts between this and the outermost context that has a 358 // The number of contexts between this and the outermost context that has a
365 // sloppy eval call. One if this->calls_sloppy_eval(). 359 // sloppy eval call. One if this->calls_sloppy_eval().
366 int ContextChainLengthUntilOutermostSloppyEval() const; 360 int ContextChainLengthUntilOutermostSloppyEval() const;
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 bool already_resolved_ : 1; 470 bool already_resolved_ : 1;
477 #endif 471 #endif
478 472
479 // Source positions. 473 // Source positions.
480 int start_position_; 474 int start_position_;
481 int end_position_; 475 int end_position_;
482 476
483 // Computed via AllocateVariables. 477 // Computed via AllocateVariables.
484 int num_stack_slots_; 478 int num_stack_slots_;
485 int num_heap_slots_; 479 int num_heap_slots_;
486 int num_global_slots_;
487 480
488 // The scope type. 481 // The scope type.
489 const ScopeType scope_type_; 482 const ScopeType scope_type_;
490 483
491 // Scope-specific information computed during parsing. 484 // Scope-specific information computed during parsing.
492 // 485 //
493 // The language mode of this scope. 486 // The language mode of this scope.
494 STATIC_ASSERT(LANGUAGE_END == 2); 487 STATIC_ASSERT(LANGUAGE_END == 2);
495 bool is_strict_ : 1; 488 bool is_strict_ : 1;
496 // This scope or a nested catch scope or with scope contain an 'eval' call. At 489 // This scope or a nested catch scope or with scope contain an 'eval' call. At
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 void AllocateModuleVariables(); 841 void AllocateModuleVariables();
849 842
850 private: 843 private:
851 ModuleDescriptor* module_descriptor_; 844 ModuleDescriptor* module_descriptor_;
852 }; 845 };
853 846
854 } // namespace internal 847 } // namespace internal
855 } // namespace v8 848 } // namespace v8
856 849
857 #endif // V8_AST_SCOPES_H_ 850 #endif // V8_AST_SCOPES_H_
OLDNEW
« no previous file with comments | « src/ast/scopeinfo.cc ('k') | src/ast/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698