| 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 #include "src/ast/scopes.h" | 5 #include "src/ast/scopes.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/ast/scopeinfo.h" | 8 #include "src/ast/scopeinfo.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/messages.h" | 10 #include "src/messages.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 module_descriptor_( | 93 module_descriptor_( |
| 94 scope_type == MODULE_SCOPE ? ModuleDescriptor::New(zone) : NULL), | 94 scope_type == MODULE_SCOPE ? ModuleDescriptor::New(zone) : NULL), |
| 95 sloppy_block_function_map_(zone), | 95 sloppy_block_function_map_(zone), |
| 96 already_resolved_(false), | 96 already_resolved_(false), |
| 97 ast_value_factory_(ast_value_factory), | 97 ast_value_factory_(ast_value_factory), |
| 98 zone_(zone) { | 98 zone_(zone) { |
| 99 SetDefaults(scope_type, outer_scope, Handle<ScopeInfo>::null(), | 99 SetDefaults(scope_type, outer_scope, Handle<ScopeInfo>::null(), |
| 100 function_kind); | 100 function_kind); |
| 101 // The outermost scope must be a script scope. | 101 // The outermost scope must be a script scope. |
| 102 DCHECK(scope_type == SCRIPT_SCOPE || outer_scope != NULL); | 102 DCHECK(scope_type == SCRIPT_SCOPE || outer_scope != NULL); |
| 103 DCHECK(!HasIllegalRedeclaration()); | |
| 104 } | 103 } |
| 105 | 104 |
| 106 Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type, | 105 Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type, |
| 107 Handle<ScopeInfo> scope_info, AstValueFactory* value_factory) | 106 Handle<ScopeInfo> scope_info, AstValueFactory* value_factory) |
| 108 : inner_scopes_(4, zone), | 107 : inner_scopes_(4, zone), |
| 109 variables_(zone), | 108 variables_(zone), |
| 110 temps_(4, zone), | 109 temps_(4, zone), |
| 111 params_(4, zone), | 110 params_(4, zone), |
| 112 unresolved_(16, zone), | 111 unresolved_(16, zone), |
| 113 decls_(4, zone), | 112 decls_(4, zone), |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 is_eval_scope() || is_function_scope() || | 161 is_eval_scope() || is_function_scope() || |
| 163 is_module_scope() || is_script_scope(); | 162 is_module_scope() || is_script_scope(); |
| 164 function_kind_ = function_kind; | 163 function_kind_ = function_kind; |
| 165 scope_name_ = ast_value_factory_->empty_string(); | 164 scope_name_ = ast_value_factory_->empty_string(); |
| 166 dynamics_ = nullptr; | 165 dynamics_ = nullptr; |
| 167 receiver_ = nullptr; | 166 receiver_ = nullptr; |
| 168 new_target_ = nullptr; | 167 new_target_ = nullptr; |
| 169 function_ = nullptr; | 168 function_ = nullptr; |
| 170 arguments_ = nullptr; | 169 arguments_ = nullptr; |
| 171 this_function_ = nullptr; | 170 this_function_ = nullptr; |
| 172 illegal_redecl_ = nullptr; | |
| 173 scope_inside_with_ = false; | 171 scope_inside_with_ = false; |
| 174 scope_calls_eval_ = false; | 172 scope_calls_eval_ = false; |
| 175 scope_uses_arguments_ = false; | 173 scope_uses_arguments_ = false; |
| 176 scope_uses_super_property_ = false; | 174 scope_uses_super_property_ = false; |
| 177 asm_module_ = false; | 175 asm_module_ = false; |
| 178 asm_function_ = outer_scope != NULL && outer_scope->asm_module_; | 176 asm_function_ = outer_scope != NULL && outer_scope->asm_module_; |
| 179 // Inherit the language mode from the parent scope. | 177 // Inherit the language mode from the parent scope. |
| 180 language_mode_ = outer_scope != NULL ? outer_scope->language_mode_ : SLOPPY; | 178 language_mode_ = outer_scope != NULL ? outer_scope->language_mode_ : SLOPPY; |
| 181 outer_scope_calls_sloppy_eval_ = false; | 179 outer_scope_calls_sloppy_eval_ = false; |
| 182 inner_scope_calls_eval_ = false; | 180 inner_scope_calls_eval_ = false; |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 } | 564 } |
| 567 return false; | 565 return false; |
| 568 } | 566 } |
| 569 | 567 |
| 570 | 568 |
| 571 void Scope::AddDeclaration(Declaration* declaration) { | 569 void Scope::AddDeclaration(Declaration* declaration) { |
| 572 decls_.Add(declaration, zone()); | 570 decls_.Add(declaration, zone()); |
| 573 } | 571 } |
| 574 | 572 |
| 575 | 573 |
| 576 void Scope::SetIllegalRedeclaration(Expression* expression) { | |
| 577 // Record only the first illegal redeclaration. | |
| 578 if (!HasIllegalRedeclaration()) { | |
| 579 illegal_redecl_ = expression; | |
| 580 } | |
| 581 DCHECK(HasIllegalRedeclaration()); | |
| 582 } | |
| 583 | |
| 584 | |
| 585 Expression* Scope::GetIllegalRedeclaration() { | |
| 586 DCHECK(HasIllegalRedeclaration()); | |
| 587 return illegal_redecl_; | |
| 588 } | |
| 589 | |
| 590 | |
| 591 Declaration* Scope::CheckConflictingVarDeclarations() { | 574 Declaration* Scope::CheckConflictingVarDeclarations() { |
| 592 int length = decls_.length(); | 575 int length = decls_.length(); |
| 593 for (int i = 0; i < length; i++) { | 576 for (int i = 0; i < length; i++) { |
| 594 Declaration* decl = decls_[i]; | 577 Declaration* decl = decls_[i]; |
| 595 // We don't create a separate scope to hold the function name of a function | 578 // We don't create a separate scope to hold the function name of a function |
| 596 // expression, so we have to make sure not to consider it when checking for | 579 // expression, so we have to make sure not to consider it when checking for |
| 597 // conflicts (since it's conceptually "outside" the declaration scope). | 580 // conflicts (since it's conceptually "outside" the declaration scope). |
| 598 if (is_function_scope() && decl == function()) continue; | 581 if (is_function_scope() && decl == function()) continue; |
| 599 if (IsLexicalVariableMode(decl->mode()) && !is_block_scope()) continue; | 582 if (IsLexicalVariableMode(decl->mode()) && !is_block_scope()) continue; |
| 600 const AstRawString* name = decl->proxy()->raw_name(); | 583 const AstRawString* name = decl->proxy()->raw_name(); |
| (...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1517 function_ != NULL && function_->proxy()->var()->IsContextSlot(); | 1500 function_ != NULL && function_->proxy()->var()->IsContextSlot(); |
| 1518 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - num_global_slots() - | 1501 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - num_global_slots() - |
| 1519 (is_function_var_in_context ? 1 : 0); | 1502 (is_function_var_in_context ? 1 : 0); |
| 1520 } | 1503 } |
| 1521 | 1504 |
| 1522 | 1505 |
| 1523 int Scope::ContextGlobalCount() const { return num_global_slots(); } | 1506 int Scope::ContextGlobalCount() const { return num_global_slots(); } |
| 1524 | 1507 |
| 1525 } // namespace internal | 1508 } // namespace internal |
| 1526 } // namespace v8 | 1509 } // namespace v8 |
| OLD | NEW |