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

Side by Side Diff: src/ast/scopeinfo.cc

Issue 2277253003: [modules] Partial scope info support of modules (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@modules-refactor
Patch Set: This is so much fun. 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.h » ('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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 <stdlib.h> 5 #include <stdlib.h>
6 6
7 #include "src/ast/context-slot-cache.h" 7 #include "src/ast/context-slot-cache.h"
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 13
14 // An entry in ModuleVariableEntries consists of several slots:
15 enum ModuleVariableEntryOffset {
16 kModuleVariableNameOffset,
17 kModuleVariableIndexOffset,
18 kModuleVariablePropertiesOffset,
19 kModuleVariableEntryLength // Sentinel value.
20 };
14 21
15 Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone, 22 Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
16 Scope* scope) { 23 Scope* scope) {
17 // Collect variables. 24 // Collect variables.
18 ZoneList<Variable*>* locals = scope->locals(); 25 ZoneList<Variable*>* locals = scope->locals();
19 int stack_local_count = 0; 26 int stack_local_count = 0;
20 int context_local_count = 0; 27 int context_local_count = 0;
28 int module_vars_count = 0;
21 // Stack allocated block scope variables are allocated in the parent 29 // Stack allocated block scope variables are allocated in the parent
22 // declaration scope, but are recorded in the block scope's scope info. First 30 // declaration scope, but are recorded in the block scope's scope info. First
23 // slot index indicates at which offset a particular scope starts in the 31 // slot index indicates at which offset a particular scope starts in the
24 // parent declaration scope. 32 // parent declaration scope.
25 int first_slot_index = 0; 33 int first_slot_index = 0;
26 for (int i = 0; i < locals->length(); i++) { 34 for (int i = 0; i < locals->length(); i++) {
27 Variable* var = locals->at(i); 35 Variable* var = locals->at(i);
28 if (var->IsStackLocal()) { 36 switch (var->location()) {
29 if (stack_local_count == 0) first_slot_index = var->index(); 37 case VariableLocation::LOCAL:
30 stack_local_count++; 38 if (stack_local_count == 0) first_slot_index = var->index();
31 } else if (var->IsContextSlot()) { 39 stack_local_count++;
32 context_local_count++; 40 break;
41 case VariableLocation::CONTEXT:
42 context_local_count++;
43 break;
44 case VariableLocation::MODULE:
45 module_vars_count++;
46 break;
47 default:
48 break;
33 } 49 }
34 } 50 }
51 DCHECK(module_vars_count == 0 || scope->is_module_scope());
35 52
36 // Make sure we allocate the correct amount. 53 // Make sure we allocate the correct amount.
37 DCHECK_EQ(scope->ContextLocalCount(), context_local_count); 54 DCHECK_EQ(scope->ContextLocalCount(), context_local_count);
38 55
39 // Determine use and location of the "this" binding if it is present. 56 // Determine use and location of the "this" binding if it is present.
40 VariableAllocationInfo receiver_info; 57 VariableAllocationInfo receiver_info;
41 if (scope->is_declaration_scope() && 58 if (scope->is_declaration_scope() &&
42 scope->AsDeclarationScope()->has_this_declaration()) { 59 scope->AsDeclarationScope()->has_this_declaration()) {
43 Variable* var = scope->AsDeclarationScope()->receiver(); 60 Variable* var = scope->AsDeclarationScope()->receiver();
44 if (!var->is_used()) { 61 if (!var->is_used()) {
(...skipping 30 matching lines...) Expand all
75 } else { 92 } else {
76 function_name_info = NONE; 93 function_name_info = NONE;
77 function_variable_mode = VAR; 94 function_variable_mode = VAR;
78 } 95 }
79 96
80 const bool has_function_name = function_name_info != NONE; 97 const bool has_function_name = function_name_info != NONE;
81 const bool has_receiver = receiver_info == STACK || receiver_info == CONTEXT; 98 const bool has_receiver = receiver_info == STACK || receiver_info == CONTEXT;
82 const int parameter_count = scope->num_parameters(); 99 const int parameter_count = scope->num_parameters();
83 const int length = kVariablePartIndex + parameter_count + 100 const int length = kVariablePartIndex + parameter_count +
84 (1 + stack_local_count) + 2 * context_local_count + 101 (1 + stack_local_count) + 2 * context_local_count +
85 (has_receiver ? 1 : 0) + (has_function_name ? 2 : 0); 102 (has_receiver ? 1 : 0) + (has_function_name ? 2 : 0) +
103 (scope->is_module_scope()
104 ? 2 + kModuleVariableEntryLength * module_vars_count
105 : 0);
86 106
87 Factory* factory = isolate->factory(); 107 Factory* factory = isolate->factory();
88 Handle<ScopeInfo> scope_info = factory->NewScopeInfo(length); 108 Handle<ScopeInfo> scope_info = factory->NewScopeInfo(length);
89 109
90 bool has_simple_parameters = false; 110 bool has_simple_parameters = false;
91 bool asm_module = false; 111 bool asm_module = false;
92 bool asm_function = false; 112 bool asm_function = false;
93 FunctionKind function_kind = kNormalFunction; 113 FunctionKind function_kind = kNormalFunction;
94 if (scope->is_function_scope()) { 114 if (scope->is_function_scope()) {
95 DeclarationScope* function_scope = scope->AsDeclarationScope(); 115 DeclarationScope* function_scope = scope->AsDeclarationScope();
(...skipping 10 matching lines...) Expand all
106 DeclarationScopeField::encode(scope->is_declaration_scope()) | 126 DeclarationScopeField::encode(scope->is_declaration_scope()) |
107 ReceiverVariableField::encode(receiver_info) | 127 ReceiverVariableField::encode(receiver_info) |
108 HasNewTargetField::encode(has_new_target) | 128 HasNewTargetField::encode(has_new_target) |
109 FunctionVariableField::encode(function_name_info) | 129 FunctionVariableField::encode(function_name_info) |
110 FunctionVariableMode::encode(function_variable_mode) | 130 FunctionVariableMode::encode(function_variable_mode) |
111 AsmModuleField::encode(asm_module) | 131 AsmModuleField::encode(asm_module) |
112 AsmFunctionField::encode(asm_function) | 132 AsmFunctionField::encode(asm_function) |
113 HasSimpleParametersField::encode(has_simple_parameters) | 133 HasSimpleParametersField::encode(has_simple_parameters) |
114 FunctionKindField::encode(function_kind); 134 FunctionKindField::encode(function_kind);
115 scope_info->SetFlags(flags); 135 scope_info->SetFlags(flags);
136
116 scope_info->SetParameterCount(parameter_count); 137 scope_info->SetParameterCount(parameter_count);
117 scope_info->SetStackLocalCount(stack_local_count); 138 scope_info->SetStackLocalCount(stack_local_count);
118 scope_info->SetContextLocalCount(context_local_count); 139 scope_info->SetContextLocalCount(context_local_count);
119 140
120 int index = kVariablePartIndex; 141 int index = kVariablePartIndex;
121 // Add parameters. 142 // Add parameters.
122 DCHECK_EQ(index, scope_info->ParameterEntriesIndex()); 143 DCHECK_EQ(index, scope_info->ParameterEntriesIndex());
123 if (scope->is_declaration_scope()) { 144 if (scope->is_declaration_scope()) {
124 for (int i = 0; i < parameter_count; ++i) { 145 for (int i = 0; i < parameter_count; ++i) {
125 scope_info->set(index++, 146 scope_info->set(index++,
126 *scope->AsDeclarationScope()->parameter(i)->name()); 147 *scope->AsDeclarationScope()->parameter(i)->name());
127 } 148 }
128 } 149 }
129 150
130 // Add stack locals' names, context locals' names and info. We are assuming 151 // Add stack locals' names, context locals' names and info, module variables'
131 // that the stack locals' slots are allocated in increasing order, so we can 152 // names and info. We are assuming that the stack locals' slots are allocated
132 // simply add them to the ScopeInfo object. Context locals are added using 153 // in increasing order, so we can simply add them to the ScopeInfo object.
133 // their index. 154 // Context locals are added using their index.
134 DCHECK_EQ(index, scope_info->StackLocalFirstSlotIndex()); 155 DCHECK_EQ(index, scope_info->StackLocalFirstSlotIndex());
135 scope_info->set(index++, Smi::FromInt(first_slot_index)); 156 scope_info->set(index++, Smi::FromInt(first_slot_index));
136 DCHECK_EQ(index, scope_info->StackLocalEntriesIndex()); 157 DCHECK_EQ(index, scope_info->StackLocalEntriesIndex());
137 158
138 int stack_local_base = index; 159 int stack_local_base = index;
139 int context_local_base = stack_local_base + stack_local_count; 160 int context_local_base = stack_local_base + stack_local_count;
140 int context_local_info_base = context_local_base + context_local_count; 161 int context_local_info_base = context_local_base + context_local_count;
162 int module_var_entry = scope_info->ModuleVariableEntriesIndex();
141 163
142 for (int i = 0; i < locals->length(); ++i) { 164 for (int i = 0; i < locals->length(); ++i) {
143 Variable* var = locals->at(i); 165 Variable* var = locals->at(i);
144 if (var->IsStackLocal()) { 166 switch (var->location()) {
145 int local_index = var->index() - first_slot_index; 167 case VariableLocation::LOCAL: {
146 DCHECK_LE(0, local_index); 168 int local_index = var->index() - first_slot_index;
147 DCHECK_LT(local_index, stack_local_count); 169 DCHECK_LE(0, local_index);
148 scope_info->set(stack_local_base + local_index, *var->name()); 170 DCHECK_LT(local_index, stack_local_count);
149 } else if (var->IsContextSlot()) { 171 scope_info->set(stack_local_base + local_index, *var->name());
150 // Due to duplicate parameters, context locals aren't guaranteed to come 172 break;
151 // in order. 173 }
152 int local_index = var->index() - Context::MIN_CONTEXT_SLOTS; 174 case VariableLocation::CONTEXT: {
153 DCHECK_LE(0, local_index); 175 // Due to duplicate parameters, context locals aren't guaranteed to come
154 DCHECK_LT(local_index, context_local_count); 176 // in order.
155 uint32_t info = VariableModeField::encode(var->mode()) | 177 int local_index = var->index() - Context::MIN_CONTEXT_SLOTS;
156 InitFlagField::encode(var->initialization_flag()) | 178 DCHECK_LE(0, local_index);
157 MaybeAssignedFlagField::encode(var->maybe_assigned()); 179 DCHECK_LT(local_index, context_local_count);
158 scope_info->set(context_local_base + local_index, *var->name()); 180 uint32_t info = VariableModeField::encode(var->mode()) |
159 scope_info->set(context_local_info_base + local_index, 181 InitFlagField::encode(var->initialization_flag()) |
160 Smi::FromInt(info)); 182 MaybeAssignedFlagField::encode(var->maybe_assigned());
183 scope_info->set(context_local_base + local_index, *var->name());
184 scope_info->set(context_local_info_base + local_index,
185 Smi::FromInt(info));
186 break;
187 }
188 case VariableLocation::MODULE: {
189 scope_info->set(module_var_entry + kModuleVariableNameOffset,
190 *var->name());
191 scope_info->set(module_var_entry + kModuleVariableIndexOffset,
192 Smi::FromInt(var->index()));
193 uint32_t properties =
194 VariableModeField::encode(var->mode()) |
195 InitFlagField::encode(var->initialization_flag()) |
196 MaybeAssignedFlagField::encode(var->maybe_assigned());
197 scope_info->set(module_var_entry + kModuleVariablePropertiesOffset,
198 Smi::FromInt(properties));
199 module_var_entry += kModuleVariableEntryLength;
200 break;
201 }
202 default:
203 break;
161 } 204 }
162 } 205 }
163 206
164 index += stack_local_count + 2 * context_local_count; 207 index += stack_local_count + 2 * context_local_count;
165 208
166 // If the receiver is allocated, add its index. 209 // If the receiver is allocated, add its index.
167 DCHECK_EQ(index, scope_info->ReceiverEntryIndex()); 210 DCHECK_EQ(index, scope_info->ReceiverEntryIndex());
168 if (has_receiver) { 211 if (has_receiver) {
169 int var_index = scope->AsDeclarationScope()->receiver()->index(); 212 int var_index = scope->AsDeclarationScope()->receiver()->index();
170 scope_info->set(index++, Smi::FromInt(var_index)); 213 scope_info->set(index++, Smi::FromInt(var_index));
171 // ?? DCHECK(receiver_info != CONTEXT || var_index == 214 // ?? DCHECK(receiver_info != CONTEXT || var_index ==
172 // scope_info->ContextLength() - 1); 215 // scope_info->ContextLength() - 1);
173 } 216 }
174 217
175 // If present, add the function variable name and its index. 218 // If present, add the function variable name and its index.
176 DCHECK_EQ(index, scope_info->FunctionNameEntryIndex()); 219 DCHECK_EQ(index, scope_info->FunctionNameEntryIndex());
177 if (has_function_name) { 220 if (has_function_name) {
178 int var_index = scope->AsDeclarationScope()->function_var()->index(); 221 int var_index = scope->AsDeclarationScope()->function_var()->index();
179 scope_info->set(index++, 222 scope_info->set(index++,
180 *scope->AsDeclarationScope()->function_var()->name()); 223 *scope->AsDeclarationScope()->function_var()->name());
181 scope_info->set(index++, Smi::FromInt(var_index)); 224 scope_info->set(index++, Smi::FromInt(var_index));
182 DCHECK(function_name_info != CONTEXT || 225 DCHECK(function_name_info != CONTEXT ||
183 var_index == scope_info->ContextLength() - 1); 226 var_index == scope_info->ContextLength() - 1);
184 } 227 }
185 228
229 // Module-specific information (only for module scopes).
230 if (scope->is_module_scope()) {
231 Handle<ModuleInfo> module_info =
232 ModuleInfo::New(isolate, scope->AsModuleScope()->module());
233 DCHECK_EQ(index, scope_info->ModuleInfoEntryIndex());
234 scope_info->set(index++, *module_info);
235 DCHECK_EQ(index, scope_info->ModuleVariableCountIndex());
236 scope_info->set(index++, Smi::FromInt(module_vars_count));
237 DCHECK_EQ(index, scope_info->ModuleVariableEntriesIndex());
238 // The variable entries themselves have already been written above.
239 index += kModuleVariableEntryLength * module_vars_count;
240 }
241
186 DCHECK_EQ(index, scope_info->length()); 242 DCHECK_EQ(index, scope_info->length());
187 DCHECK_EQ(scope->num_parameters(), scope_info->ParameterCount()); 243 DCHECK_EQ(scope->num_parameters(), scope_info->ParameterCount());
188 DCHECK_EQ(scope->num_heap_slots(), scope_info->ContextLength()); 244 DCHECK_EQ(scope->num_heap_slots(), scope_info->ContextLength());
189 return scope_info; 245 return scope_info;
190 } 246 }
191 247
192 248
193 Handle<ScopeInfo> ScopeInfo::CreateGlobalThisBinding(Isolate* isolate) { 249 Handle<ScopeInfo> ScopeInfo::CreateGlobalThisBinding(Isolate* isolate) {
194 DCHECK(isolate->bootstrapper()->IsActive()); 250 DCHECK(isolate->bootstrapper()->IsActive());
195 251
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 bool ScopeInfo::HasContext() { 416 bool ScopeInfo::HasContext() {
361 return ContextLength() > 0; 417 return ContextLength() > 0;
362 } 418 }
363 419
364 420
365 String* ScopeInfo::FunctionName() { 421 String* ScopeInfo::FunctionName() {
366 DCHECK(HasFunctionName()); 422 DCHECK(HasFunctionName());
367 return String::cast(get(FunctionNameEntryIndex())); 423 return String::cast(get(FunctionNameEntryIndex()));
368 } 424 }
369 425
426 ModuleInfo* ScopeInfo::ModuleDescriptorInfo() {
427 DCHECK(scope_type() == MODULE_SCOPE);
428 return static_cast<ModuleInfo*>(get(ModuleInfoEntryIndex()));
429 }
370 430
371 String* ScopeInfo::ParameterName(int var) { 431 String* ScopeInfo::ParameterName(int var) {
372 DCHECK_LE(0, var); 432 DCHECK_LE(0, var);
373 DCHECK_LT(var, ParameterCount()); 433 DCHECK_LT(var, ParameterCount());
374 int info_index = ParameterEntriesIndex() + var; 434 int info_index = ParameterEntriesIndex() + var;
375 return String::cast(get(info_index)); 435 return String::cast(get(info_index));
376 } 436 }
377 437
378 438
379 String* ScopeInfo::LocalName(int var) { 439 String* ScopeInfo::LocalName(int var) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 int end = start + StackLocalCount(); 514 int end = start + StackLocalCount();
455 for (int i = start; i < end; ++i) { 515 for (int i = start; i < end; ++i) {
456 if (name == get(i)) { 516 if (name == get(i)) {
457 return i - start + first_slot_index; 517 return i - start + first_slot_index;
458 } 518 }
459 } 519 }
460 } 520 }
461 return -1; 521 return -1;
462 } 522 }
463 523
524 int ScopeInfo::ModuleIndex(Handle<String> name, VariableMode* mode,
525 InitializationFlag* init_flag,
526 MaybeAssignedFlag* maybe_assigned_flag) {
527 DCHECK_EQ(scope_type(), MODULE_SCOPE);
528 DCHECK(name->IsInternalizedString());
529 DCHECK_NOT_NULL(mode);
530 DCHECK_NOT_NULL(init_flag);
531 DCHECK_NOT_NULL(maybe_assigned_flag);
532
533 int module_vars_count = Smi::cast(get(ModuleVariableCountIndex()))->value();
534 int entry = ModuleVariableEntriesIndex();
535 for (int i = 0; i < module_vars_count; ++i) {
536 if (*name == get(entry + kModuleVariableNameOffset)) {
537 int index = Smi::cast(get(entry + kModuleVariableIndexOffset))->value();
538 int properties =
539 Smi::cast(get(entry + kModuleVariablePropertiesOffset))->value();
540 *mode = VariableModeField::decode(properties);
541 *init_flag = InitFlagField::decode(properties);
542 *maybe_assigned_flag = MaybeAssignedFlagField::decode(properties);
543 return index;
544 }
545 entry += kModuleVariableEntryLength;
546 }
547
548 return -1;
549 }
464 550
465 int ScopeInfo::ContextSlotIndex(Handle<ScopeInfo> scope_info, 551 int ScopeInfo::ContextSlotIndex(Handle<ScopeInfo> scope_info,
466 Handle<String> name, VariableMode* mode, 552 Handle<String> name, VariableMode* mode,
467 InitializationFlag* init_flag, 553 InitializationFlag* init_flag,
468 MaybeAssignedFlag* maybe_assigned_flag) { 554 MaybeAssignedFlag* maybe_assigned_flag) {
469 DCHECK(name->IsInternalizedString()); 555 DCHECK(name->IsInternalizedString());
470 DCHECK_NOT_NULL(mode); 556 DCHECK_NOT_NULL(mode);
471 DCHECK_NOT_NULL(init_flag); 557 DCHECK_NOT_NULL(init_flag);
472 DCHECK_NOT_NULL(maybe_assigned_flag); 558 DCHECK_NOT_NULL(maybe_assigned_flag);
473 559
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 658
573 int ScopeInfo::StackLocalEntriesIndex() { 659 int ScopeInfo::StackLocalEntriesIndex() {
574 return StackLocalFirstSlotIndex() + 1; 660 return StackLocalFirstSlotIndex() + 1;
575 } 661 }
576 662
577 663
578 int ScopeInfo::ContextLocalNameEntriesIndex() { 664 int ScopeInfo::ContextLocalNameEntriesIndex() {
579 return StackLocalEntriesIndex() + StackLocalCount(); 665 return StackLocalEntriesIndex() + StackLocalCount();
580 } 666 }
581 667
582
583 int ScopeInfo::ContextLocalInfoEntriesIndex() { 668 int ScopeInfo::ContextLocalInfoEntriesIndex() {
584 return ContextLocalNameEntriesIndex() + ContextLocalCount(); 669 return ContextLocalNameEntriesIndex() + ContextLocalCount();
585 } 670 }
586 671
587
588 int ScopeInfo::ReceiverEntryIndex() { 672 int ScopeInfo::ReceiverEntryIndex() {
589 return ContextLocalInfoEntriesIndex() + ContextLocalCount(); 673 return ContextLocalInfoEntriesIndex() + ContextLocalCount();
590 } 674 }
591 675
592
593 int ScopeInfo::FunctionNameEntryIndex() { 676 int ScopeInfo::FunctionNameEntryIndex() {
594 return ReceiverEntryIndex() + (HasAllocatedReceiver() ? 1 : 0); 677 return ReceiverEntryIndex() + (HasAllocatedReceiver() ? 1 : 0);
595 } 678 }
596 679
680 int ScopeInfo::ModuleInfoEntryIndex() {
681 return FunctionNameEntryIndex() + (HasFunctionName() ? 2 : 0);
682 }
683
684 int ScopeInfo::ModuleVariableCountIndex() { return ModuleInfoEntryIndex() + 1; }
685
686 int ScopeInfo::ModuleVariableEntriesIndex() {
687 return ModuleVariableCountIndex() + 1;
688 }
689
597 #ifdef DEBUG 690 #ifdef DEBUG
598 691
599 static void PrintList(const char* list_name, 692 static void PrintList(const char* list_name,
600 int nof_internal_slots, 693 int nof_internal_slots,
601 int start, 694 int start,
602 int end, 695 int end,
603 ScopeInfo* scope_info) { 696 ScopeInfo* scope_info) {
604 if (start < end) { 697 if (start < end) {
605 PrintF("\n // %s\n", list_name); 698 PrintF("\n // %s\n", list_name);
606 if (nof_internal_slots > 0) { 699 if (nof_internal_slots > 0) {
(...skipping 24 matching lines...) Expand all
631 StackLocalEntriesIndex() + StackLocalCount(), this); 724 StackLocalEntriesIndex() + StackLocalCount(), this);
632 PrintList("context slots", Context::MIN_CONTEXT_SLOTS, 725 PrintList("context slots", Context::MIN_CONTEXT_SLOTS,
633 ContextLocalNameEntriesIndex(), 726 ContextLocalNameEntriesIndex(),
634 ContextLocalNameEntriesIndex() + ContextLocalCount(), this); 727 ContextLocalNameEntriesIndex() + ContextLocalCount(), this);
635 } 728 }
636 729
637 PrintF("}\n"); 730 PrintF("}\n");
638 } 731 }
639 #endif // DEBUG 732 #endif // DEBUG
640 733
734 Handle<ModuleInfo> ModuleInfo::New(Isolate* isolate, ModuleDescriptor* descr) {
735 // Serialize special exports.
736 Handle<FixedArray> special_exports =
737 isolate->factory()->NewFixedArray(descr->special_exports().length());
738 {
739 int i = 0;
740 for (auto entry : descr->special_exports()) {
741 special_exports->set(i++, *entry->Serialize(isolate));
742 }
743 }
744
745 // Serialize regular exports.
746 Handle<FixedArray> regular_exports = isolate->factory()->NewFixedArray(
747 static_cast<int>(descr->regular_exports().size()));
748 {
749 int i = 0;
750 for (const auto& it : descr->regular_exports()) {
751 regular_exports->set(i++, *it.second->Serialize(isolate));
752 }
753 }
754
755 Handle<ModuleInfo> result = isolate->factory()->NewModuleInfo();
756 result->set(kSpecialExportsIndex, *special_exports);
757 result->set(kRegularExportsIndex, *regular_exports);
758 return result;
759 }
641 760
642 } // namespace internal 761 } // namespace internal
643 } // namespace v8 762 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/ast/scopes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698