| 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 |