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

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

Issue 2270743002: Scopes: simplfy scope creation for with scopes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: leaner version 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 | « 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 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 431
432 // Check that all Scopes in the scope tree use the same Zone. 432 // Check that all Scopes in the scope tree use the same Zone.
433 void CheckZones(); 433 void CheckZones();
434 #endif 434 #endif
435 435
436 // Retrieve `IsSimpleParameterList` of current or outer function. 436 // Retrieve `IsSimpleParameterList` of current or outer function.
437 bool HasSimpleParameters(); 437 bool HasSimpleParameters();
438 void set_is_debug_evaluate_scope() { is_debug_evaluate_scope_ = true; } 438 void set_is_debug_evaluate_scope() { is_debug_evaluate_scope_ = true; }
439 439
440 protected: 440 protected:
441 // Creates a script scope. 441 explicit Scope(Zone* zone, ScopeType scope_type = SCRIPT_SCOPE);
442 explicit Scope(Zone* zone);
443 442
444 void set_language_mode(LanguageMode language_mode) { 443 void set_language_mode(LanguageMode language_mode) {
445 is_strict_ = is_strict(language_mode); 444 is_strict_ = is_strict(language_mode);
446 } 445 }
447 446
448 private: 447 private:
449 Variable* Declare(Zone* zone, Scope* scope, const AstRawString* name, 448 Variable* Declare(Zone* zone, Scope* scope, const AstRawString* name,
450 VariableMode mode, Variable::Kind kind, 449 VariableMode mode, Variable::Kind kind,
451 InitializationFlag initialization_flag, 450 InitializationFlag initialization_flag,
452 MaybeAssignedFlag maybe_assigned_flag = kNotAssigned) { 451 MaybeAssignedFlag maybe_assigned_flag = kNotAssigned) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 558
560 // Variable allocation. 559 // Variable allocation.
561 void AllocateStackSlot(Variable* var); 560 void AllocateStackSlot(Variable* var);
562 void AllocateHeapSlot(Variable* var); 561 void AllocateHeapSlot(Variable* var);
563 void AllocateNonParameterLocal(Variable* var); 562 void AllocateNonParameterLocal(Variable* var);
564 void AllocateDeclaredGlobal(Variable* var); 563 void AllocateDeclaredGlobal(Variable* var);
565 void AllocateNonParameterLocalsAndDeclaredGlobals(); 564 void AllocateNonParameterLocalsAndDeclaredGlobals();
566 void AllocateVariablesRecursively(); 565 void AllocateVariablesRecursively();
567 566
568 // Construct a scope based on the scope info. 567 // Construct a scope based on the scope info.
569 Scope(Zone* zone, Scope* inner_scope, ScopeType type, 568 Scope(Zone* zone, ScopeType type, Handle<ScopeInfo> scope_info);
570 Handle<ScopeInfo> scope_info);
571 569
572 // Construct a catch scope with a binding for the name. 570 // Construct a catch scope with a binding for the name.
573 Scope(Zone* zone, Scope* inner_scope, 571 Scope(Zone* zone, const AstRawString* catch_variable_name);
574 const AstRawString* catch_variable_name);
575 572
576 void AddInnerScope(Scope* inner_scope) { 573 void AddInnerScope(Scope* inner_scope) {
577 inner_scope->sibling_ = inner_scope_; 574 inner_scope->sibling_ = inner_scope_;
578 inner_scope_ = inner_scope; 575 inner_scope_ = inner_scope;
579 inner_scope->outer_scope_ = this; 576 inner_scope->outer_scope_ = this;
580 } 577 }
581 578
582 void RemoveInnerScope(Scope* inner_scope) { 579 void RemoveInnerScope(Scope* inner_scope) {
583 DCHECK_NOT_NULL(inner_scope); 580 DCHECK_NOT_NULL(inner_scope);
584 if (inner_scope == inner_scope_) { 581 if (inner_scope == inner_scope_) {
(...skipping 14 matching lines...) Expand all
599 void DeserializeScopeInfo(Isolate* isolate, 596 void DeserializeScopeInfo(Isolate* isolate,
600 AstValueFactory* ast_value_factory); 597 AstValueFactory* ast_value_factory);
601 598
602 friend class DeclarationScope; 599 friend class DeclarationScope;
603 }; 600 };
604 601
605 class DeclarationScope : public Scope { 602 class DeclarationScope : public Scope {
606 public: 603 public:
607 DeclarationScope(Zone* zone, Scope* outer_scope, ScopeType scope_type, 604 DeclarationScope(Zone* zone, Scope* outer_scope, ScopeType scope_type,
608 FunctionKind function_kind = kNormalFunction); 605 FunctionKind function_kind = kNormalFunction);
609 DeclarationScope(Zone* zone, Scope* inner_scope, ScopeType scope_type, 606 DeclarationScope(Zone* zone, ScopeType scope_type,
610 Handle<ScopeInfo> scope_info); 607 Handle<ScopeInfo> scope_info);
611 // Creates a script scope. 608 // Creates a script scope.
612 explicit DeclarationScope(Zone* zone); 609 explicit DeclarationScope(Zone* zone);
613 610
614 bool IsDeclaredParameter(const AstRawString* name) { 611 bool IsDeclaredParameter(const AstRawString* name) {
615 // If IsSimpleParameterList is false, duplicate parameters are not allowed, 612 // If IsSimpleParameterList is false, duplicate parameters are not allowed,
616 // however `arguments` may be allowed if function is not strict code. Thus, 613 // however `arguments` may be allowed if function is not strict code. Thus,
617 // the assumptions explained above do not hold. 614 // the assumptions explained above do not hold.
618 return params_.Contains(variables_.Lookup(name)); 615 return params_.Contains(variables_.Lookup(name));
619 } 616 }
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 void AllocateModuleVariables(); 881 void AllocateModuleVariables();
885 882
886 private: 883 private:
887 ModuleDescriptor* module_descriptor_; 884 ModuleDescriptor* module_descriptor_;
888 }; 885 };
889 886
890 } // namespace internal 887 } // namespace internal
891 } // namespace v8 888 } // namespace v8
892 889
893 #endif // V8_AST_SCOPES_H_ 890 #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