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 <set> | 7 #include <set> |
8 | 8 |
9 #include "src/accessors.h" | 9 #include "src/accessors.h" |
10 #include "src/ast/ast.h" | 10 #include "src/ast/ast.h" |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 : DeclarationScope(avfactory->zone(), MODULE_SCOPE, scope_info) { | 164 : DeclarationScope(avfactory->zone(), MODULE_SCOPE, scope_info) { |
165 Zone* zone = avfactory->zone(); | 165 Zone* zone = avfactory->zone(); |
166 ModuleInfo* module_info = scope_info->ModuleDescriptorInfo(); | 166 ModuleInfo* module_info = scope_info->ModuleDescriptorInfo(); |
167 | 167 |
168 set_language_mode(STRICT); | 168 set_language_mode(STRICT); |
169 module_descriptor_ = new (zone) ModuleDescriptor(zone); | 169 module_descriptor_ = new (zone) ModuleDescriptor(zone); |
170 | 170 |
171 // Deserialize special exports. | 171 // Deserialize special exports. |
172 Handle<FixedArray> special_exports = handle(module_info->special_exports()); | 172 Handle<FixedArray> special_exports = handle(module_info->special_exports()); |
173 for (int i = 0, n = special_exports->length(); i < n; ++i) { | 173 for (int i = 0, n = special_exports->length(); i < n; ++i) { |
174 Handle<ModuleInfoEntry> serialized_entry( | 174 Handle<FixedArray> serialized_entry( |
175 ModuleInfoEntry::cast(special_exports->get(i)), isolate); | 175 FixedArray::cast(special_exports->get(i)), isolate); |
176 module_descriptor_->AddSpecialExport( | 176 module_descriptor_->AddSpecialExport( |
177 ModuleDescriptor::Entry::Deserialize(isolate, avfactory, | 177 ModuleDescriptor::Entry::Deserialize(isolate, avfactory, |
178 serialized_entry), | 178 serialized_entry), |
179 avfactory->zone()); | 179 avfactory->zone()); |
180 } | 180 } |
181 | 181 |
182 // Deserialize regular exports. | 182 // Deserialize regular exports. |
183 Handle<FixedArray> regular_exports = handle(module_info->regular_exports()); | 183 Handle<FixedArray> regular_exports = handle(module_info->regular_exports()); |
184 for (int i = 0, n = regular_exports->length(); i < n; ++i) { | 184 for (int i = 0, n = regular_exports->length(); i < n; ++i) { |
185 Handle<ModuleInfoEntry> serialized_entry( | 185 Handle<FixedArray> serialized_entry( |
186 ModuleInfoEntry::cast(regular_exports->get(i)), isolate); | 186 FixedArray::cast(regular_exports->get(i)), isolate); |
187 module_descriptor_->AddRegularExport(ModuleDescriptor::Entry::Deserialize( | 187 module_descriptor_->AddRegularExport(ModuleDescriptor::Entry::Deserialize( |
188 isolate, avfactory, serialized_entry)); | 188 isolate, avfactory, serialized_entry)); |
189 } | 189 } |
190 } | 190 } |
191 | 191 |
192 Scope::Scope(Zone* zone, ScopeType scope_type, Handle<ScopeInfo> scope_info) | 192 Scope::Scope(Zone* zone, ScopeType scope_type, Handle<ScopeInfo> scope_info) |
193 : zone_(zone), | 193 : zone_(zone), |
194 outer_scope_(nullptr), | 194 outer_scope_(nullptr), |
195 variables_(zone), | 195 variables_(zone), |
196 locals_(0, zone), | 196 locals_(0, zone), |
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 Variable* var = scope->LookupLocal(name); | 822 Variable* var = scope->LookupLocal(name); |
823 if (var != NULL) return var; | 823 if (var != NULL) return var; |
824 } | 824 } |
825 return NULL; | 825 return NULL; |
826 } | 826 } |
827 | 827 |
828 Variable* DeclarationScope::DeclareParameter( | 828 Variable* DeclarationScope::DeclareParameter( |
829 const AstRawString* name, VariableMode mode, bool is_optional, bool is_rest, | 829 const AstRawString* name, VariableMode mode, bool is_optional, bool is_rest, |
830 bool* is_duplicate, AstValueFactory* ast_value_factory) { | 830 bool* is_duplicate, AstValueFactory* ast_value_factory) { |
831 DCHECK(!already_resolved_); | 831 DCHECK(!already_resolved_); |
832 DCHECK(is_function_scope() || is_module_scope()); | 832 DCHECK(is_function_scope()); |
833 DCHECK(!has_rest_); | 833 DCHECK(!has_rest_); |
834 DCHECK(!is_optional || !is_rest); | 834 DCHECK(!is_optional || !is_rest); |
835 Variable* var; | 835 Variable* var; |
836 if (mode == TEMPORARY) { | 836 if (mode == TEMPORARY) { |
837 var = NewTemporary(name); | 837 var = NewTemporary(name); |
838 } else { | 838 } else { |
839 var = | 839 var = |
840 Declare(zone(), this, name, mode, NORMAL_VARIABLE, kCreatedInitialized); | 840 Declare(zone(), this, name, mode, NORMAL_VARIABLE, kCreatedInitialized); |
841 // TODO(wingo): Avoid O(n^2) check. | 841 // TODO(wingo): Avoid O(n^2) check. |
842 *is_duplicate = IsDeclaredParameter(name); | 842 *is_duplicate = IsDeclaredParameter(name); |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1157 } | 1157 } |
1158 | 1158 |
1159 DeclarationScope* Scope::GetClosureScope() { | 1159 DeclarationScope* Scope::GetClosureScope() { |
1160 Scope* scope = this; | 1160 Scope* scope = this; |
1161 while (!scope->is_declaration_scope() || scope->is_block_scope()) { | 1161 while (!scope->is_declaration_scope() || scope->is_block_scope()) { |
1162 scope = scope->outer_scope(); | 1162 scope = scope->outer_scope(); |
1163 } | 1163 } |
1164 return scope->AsDeclarationScope(); | 1164 return scope->AsDeclarationScope(); |
1165 } | 1165 } |
1166 | 1166 |
1167 ModuleScope* Scope::GetModuleScope() { | |
1168 Scope* scope = this; | |
1169 DCHECK(!scope->is_script_scope()); | |
1170 while (!scope->is_module_scope()) { | |
1171 scope = scope->outer_scope(); | |
1172 DCHECK_NOT_NULL(scope); | |
1173 } | |
1174 return scope->AsModuleScope(); | |
1175 } | |
1176 | |
1177 DeclarationScope* Scope::GetReceiverScope() { | 1167 DeclarationScope* Scope::GetReceiverScope() { |
1178 Scope* scope = this; | 1168 Scope* scope = this; |
1179 while (!scope->is_script_scope() && | 1169 while (!scope->is_script_scope() && |
1180 (!scope->is_function_scope() || | 1170 (!scope->is_function_scope() || |
1181 scope->AsDeclarationScope()->is_arrow_scope())) { | 1171 scope->AsDeclarationScope()->is_arrow_scope())) { |
1182 scope = scope->outer_scope(); | 1172 scope = scope->outer_scope(); |
1183 } | 1173 } |
1184 return scope->AsDeclarationScope(); | 1174 return scope->AsDeclarationScope(); |
1185 } | 1175 } |
1186 | 1176 |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1855 Variable* function = | 1845 Variable* function = |
1856 is_function_scope() ? AsDeclarationScope()->function_var() : nullptr; | 1846 is_function_scope() ? AsDeclarationScope()->function_var() : nullptr; |
1857 bool is_function_var_in_context = | 1847 bool is_function_var_in_context = |
1858 function != nullptr && function->IsContextSlot(); | 1848 function != nullptr && function->IsContextSlot(); |
1859 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - | 1849 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - |
1860 (is_function_var_in_context ? 1 : 0); | 1850 (is_function_var_in_context ? 1 : 0); |
1861 } | 1851 } |
1862 | 1852 |
1863 } // namespace internal | 1853 } // namespace internal |
1864 } // namespace v8 | 1854 } // namespace v8 |
OLD | NEW |