Lines Matching full:module
8 #include "src/objects/module.h"
16 #include "src/objects/module-inl.h"
24 V8_INLINE size_t operator()(Handle<Module> module) const { in operator ()()
25 return module->hash(); in operator ()()
30 V8_INLINE bool operator()(Handle<Module> lhs, Handle<Module> rhs) const { in operator ()()
60 : public std::unordered_set<Handle<Module>, ModuleHandleHash,
62 ZoneAllocator<Handle<Module>>> {
65 : std::unordered_set<Handle<Module>, ModuleHandleHash, ModuleHandleEqual, in UnorderedModuleSet()
66 ZoneAllocator<Handle<Module>>>( in UnorderedModuleSet()
68 ZoneAllocator<Handle<Module>>(zone)) {} in UnorderedModuleSet()
87 class Module::ResolveSet
89 Handle<Module>, UnorderedStringSet*, ModuleHandleHash,
91 ZoneAllocator<std::pair<const Handle<Module>, UnorderedStringSet*>>> {
94 : std::unordered_map<Handle<Module>, UnorderedStringSet*, in ResolveSet()
96 ZoneAllocator<std::pair<const Handle<Module>, in ResolveSet()
99 ZoneAllocator<std::pair<const Handle<Module>, UnorderedStringSet*>>( in ResolveSet()
125 void Module::CreateIndirectExport(Isolate* isolate, Handle<Module> module, in CreateIndirectExport() argument
128 Handle<ObjectHashTable> exports(module->exports(), isolate); in CreateIndirectExport()
131 module->set_exports(*exports); in CreateIndirectExport()
134 void Module::CreateExport(Isolate* isolate, Handle<Module> module, in CreateExport() argument
139 module->regular_exports()->set(ExportIndex(cell_index), *cell); in CreateExport()
141 Handle<ObjectHashTable> exports(module->exports(), isolate); in CreateExport()
147 module->set_exports(*exports); in CreateExport()
150 Cell* Module::GetCell(int cell_index) { in GetCell()
167 Handle<Object> Module::LoadVariable(Isolate* isolate, Handle<Module> module, in LoadVariable() argument
169 return handle(module->GetCell(cell_index)->value(), isolate); in LoadVariable()
172 void Module::StoreVariable(Handle<Module> module, int cell_index, in StoreVariable() argument
176 module->GetCell(cell_index)->set_value(*value); in StoreVariable()
180 void Module::PrintStatusTransition(Status new_status) { in PrintStatusTransition()
183 os << "Changing module status from " << status() << " to " << new_status in PrintStatusTransition()
193 void Module::SetStatus(Status new_status) { in SetStatus()
196 DCHECK_NE(new_status, Module::kErrored); in SetStatus()
203 void Module::ResetGraph(Isolate* isolate, Handle<Module> module) { in ResetGraph() argument
204 DCHECK_NE(module->status(), kInstantiating); in ResetGraph()
205 DCHECK_NE(module->status(), kEvaluating); in ResetGraph()
206 if (module->status() != kPreInstantiating) return; in ResetGraph()
207 Handle<FixedArray> requested_modules(module->requested_modules(), isolate); in ResetGraph()
208 Reset(isolate, module); in ResetGraph()
212 ResetGraph(isolate, Handle<Module>::cast(descendant)); in ResetGraph()
219 void Module::Reset(Isolate* isolate, Handle<Module> module) { in Reset() argument
222 DCHECK(module->status() == kPreInstantiating || in Reset()
223 module->status() == kInstantiating); in Reset()
224 DCHECK(module->exception()->IsTheHole(isolate)); in Reset()
225 DCHECK(module->import_meta()->IsTheHole(isolate)); in Reset()
227 // by RunInitializationCode, which is called only after this module's SCC in Reset()
229 DCHECK(!module->module_namespace()->IsJSModuleNamespace()); in Reset()
232 ObjectHashTable::New(isolate, module->info()->RegularExportCount()); in Reset()
234 factory->NewFixedArray(module->regular_exports()->length()); in Reset()
236 factory->NewFixedArray(module->regular_imports()->length()); in Reset()
238 factory->NewFixedArray(module->requested_modules()->length()); in Reset()
240 if (module->status() == kInstantiating) { in Reset()
241 module->set_code(JSFunction::cast(module->code())->shared()); in Reset()
244 module->PrintStatusTransition(kUninstantiated); in Reset()
246 module->set_status(kUninstantiated); in Reset()
247 module->set_exports(*exports); in Reset()
248 module->set_regular_exports(*regular_exports); in Reset()
249 module->set_regular_imports(*regular_imports); in Reset()
250 module->set_requested_modules(*requested_modules); in Reset()
251 module->set_dfs_index(-1); in Reset()
252 module->set_dfs_ancestor_index(-1); in Reset()
255 void Module::RecordError(Isolate* isolate) { in RecordError()
263 PrintStatusTransition(Module::kErrored); in RecordError()
265 set_status(Module::kErrored); in RecordError()
269 Object* Module::GetException() { in GetException()
271 DCHECK_EQ(status(), Module::kErrored); in GetException()
276 SharedFunctionInfo* Module::GetSharedFunctionInfo() const { in GetSharedFunctionInfo()
278 DCHECK_NE(status(), Module::kEvaluating); in GetSharedFunctionInfo()
279 DCHECK_NE(status(), Module::kEvaluated); in GetSharedFunctionInfo()
300 MaybeHandle<Cell> Module::ResolveImport(Isolate* isolate, Handle<Module> module, in ResolveImport() argument
303 Module::ResolveSet* resolve_set) { in ResolveImport()
304 Handle<Module> requested_module( in ResolveImport()
305 Module::cast(module->requested_modules()->get(module_request)), isolate); in ResolveImport()
307 String::cast(module->info()->module_requests()->get(module_request)), in ResolveImport()
310 Module::ResolveExport(isolate, requested_module, specifier, name, loc, in ResolveImport()
316 MaybeHandle<Cell> Module::ResolveExport(Isolate* isolate, Handle<Module> module, in ResolveExport() argument
320 Module::ResolveSet* resolve_set) { in ResolveExport()
321 DCHECK_GE(module->status(), kPreInstantiating); in ResolveExport()
322 DCHECK_NE(module->status(), kEvaluating); in ResolveExport()
323 Handle<Object> object(module->exports()->Lookup(export_name), isolate); in ResolveExport()
332 auto result = resolve_set->insert({module, nullptr}); in ResolveExport()
335 // |module| wasn't in the map previously, so allocate a new name set. in ResolveExport()
357 Handle<Script> script(module->script(), isolate); in ResolveExport()
361 if (!ResolveImport(isolate, module, import_name, entry->module_request(), in ResolveExport()
370 Handle<ObjectHashTable> exports(module->exports(), isolate); in ResolveExport()
374 module->set_exports(*exports); in ResolveExport()
379 return Module::ResolveExportUsingStarExports(isolate, module, in ResolveExport()
384 MaybeHandle<Cell> Module::ResolveExportUsingStarExports( in ResolveExportUsingStarExports()
385 Isolate* isolate, Handle<Module> module, Handle<String> module_specifier, in ResolveExportUsingStarExports() argument
387 Module::ResolveSet* resolve_set) { in ResolveExportUsingStarExports()
392 Handle<FixedArray> special_exports(module->info()->special_exports(), in ResolveExportUsingStarExports()
401 Handle<Script> script(module->script(), isolate); in ResolveExportUsingStarExports()
405 if (ResolveImport(isolate, module, export_name, entry->module_request(), in ResolveExportUsingStarExports()
422 Handle<ObjectHashTable> exports(module->exports(), isolate); in ResolveExportUsingStarExports()
425 module->set_exports(*exports); in ResolveExportUsingStarExports()
440 bool Module::Instantiate(Isolate* isolate, Handle<Module> module, in Instantiate() argument
442 v8::Module::ResolveCallback callback) { in Instantiate()
446 os << "Instantiating module "; in Instantiate()
447 module->script()->GetNameOrSourceURL()->Print(os); in Instantiate()
454 if (!PrepareInstantiate(isolate, module, context, callback)) { in Instantiate()
455 ResetGraph(isolate, module); in Instantiate()
459 ZoneForwardList<Handle<Module>> stack(&zone); in Instantiate()
461 if (!FinishInstantiate(isolate, module, &stack, &dfs_index, &zone)) { in Instantiate()
465 DCHECK_EQ(module->status(), kUninstantiated); in Instantiate()
468 DCHECK(module->status() == kInstantiated || module->status() == kEvaluated || in Instantiate()
469 module->status() == kErrored); in Instantiate()
474 bool Module::PrepareInstantiate(Isolate* isolate, Handle<Module> module, in PrepareInstantiate() argument
476 v8::Module::ResolveCallback callback) { in PrepareInstantiate()
477 DCHECK_NE(module->status(), kEvaluating); in PrepareInstantiate()
478 DCHECK_NE(module->status(), kInstantiating); in PrepareInstantiate()
479 if (module->status() >= kPreInstantiating) return true; in PrepareInstantiate()
480 module->SetStatus(kPreInstantiating); in PrepareInstantiate()
484 Handle<ModuleInfo> module_info(module->info(), isolate); in PrepareInstantiate()
486 Handle<FixedArray> requested_modules(module->requested_modules(), isolate); in PrepareInstantiate()
489 v8::Local<v8::Module> api_requested_module; in PrepareInstantiate()
491 v8::Utils::ToLocal(module)) in PrepareInstantiate()
496 Handle<Module> requested_module = Utils::OpenHandle(*api_requested_module); in PrepareInstantiate()
502 Handle<Module> requested_module(Module::cast(requested_modules->get(i)), in PrepareInstantiate()
515 CreateExport(isolate, module, cell_index, export_names); in PrepareInstantiate()
521 // Cell in the module that actually provides the value, we replace the in PrepareInstantiate()
529 CreateIndirectExport(isolate, module, Handle<String>::cast(export_name), in PrepareInstantiate()
533 DCHECK_EQ(module->status(), kPreInstantiating); in PrepareInstantiate()
537 bool Module::RunInitializationCode(Isolate* isolate, Handle<Module> module) { in RunInitializationCode() argument
538 DCHECK_EQ(module->status(), kInstantiating); in RunInitializationCode()
539 Handle<JSFunction> function(JSFunction::cast(module->code()), isolate); in RunInitializationCode()
542 Handle<Object> argv[] = {module}; in RunInitializationCode()
551 module->set_code(*generator); in RunInitializationCode()
555 bool Module::MaybeTransitionComponent(Isolate* isolate, Handle<Module> module, in MaybeTransitionComponent() argument
556 ZoneForwardList<Handle<Module>>* stack, in MaybeTransitionComponent()
560 // {module} is on the {stack}. in MaybeTransitionComponent()
562 [&](Handle<Module> m) { return *m == *module; }) == 1); in MaybeTransitionComponent()
563 DCHECK_LE(module->dfs_ancestor_index(), module->dfs_index()); in MaybeTransitionComponent()
564 if (module->dfs_ancestor_index() == module->dfs_index()) { in MaybeTransitionComponent()
566 Handle<Module> ancestor; in MaybeTransitionComponent()
576 } while (*ancestor != *module); in MaybeTransitionComponent()
581 bool Module::FinishInstantiate(Isolate* isolate, Handle<Module> module, in FinishInstantiate() argument
582 ZoneForwardList<Handle<Module>>* stack, in FinishInstantiate()
584 DCHECK_NE(module->status(), kEvaluating); in FinishInstantiate()
585 if (module->status() >= kInstantiating) return true; in FinishInstantiate()
586 DCHECK_EQ(module->status(), kPreInstantiating); in FinishInstantiate()
589 // Instantiate SharedFunctionInfo and mark module as instantiating for in FinishInstantiate()
591 Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(module->code()), in FinishInstantiate()
596 module->set_code(*function); in FinishInstantiate()
597 module->SetStatus(kInstantiating); in FinishInstantiate()
598 module->set_dfs_index(*dfs_index); in FinishInstantiate()
599 module->set_dfs_ancestor_index(*dfs_index); in FinishInstantiate()
600 stack->push_front(module); in FinishInstantiate()
604 Handle<FixedArray> requested_modules(module->requested_modules(), isolate); in FinishInstantiate()
606 Handle<Module> requested_module(Module::cast(requested_modules->get(i)), in FinishInstantiate()
617 std::count_if(stack->begin(), stack->end(), [&](Handle<Module> m) { in FinishInstantiate()
622 module->set_dfs_ancestor_index( in FinishInstantiate()
623 std::min(module->dfs_ancestor_index(), in FinishInstantiate()
628 Handle<Script> script(module->script(), isolate); in FinishInstantiate()
629 Handle<ModuleInfo> module_info(module->info(), isolate); in FinishInstantiate()
640 if (!ResolveImport(isolate, module, name, entry->module_request(), loc, in FinishInstantiate()
645 module->regular_imports()->set(ImportIndex(entry->cell_index()), *cell); in FinishInstantiate()
657 if (ResolveExport(isolate, module, Handle<String>(), in FinishInstantiate()
664 return MaybeTransitionComponent(isolate, module, stack, kInstantiated); in FinishInstantiate()
667 MaybeHandle<Object> Module::Evaluate(Isolate* isolate, Handle<Module> module) { in Evaluate() argument
671 os << "Evaluating module "; in Evaluate()
672 module->script()->GetNameOrSourceURL()->Print(os); in Evaluate()
678 if (module->status() == kErrored) { in Evaluate()
679 isolate->Throw(module->GetException()); in Evaluate()
682 DCHECK_NE(module->status(), kEvaluating); in Evaluate()
683 DCHECK_GE(module->status(), kInstantiated); in Evaluate()
686 ZoneForwardList<Handle<Module>> stack(&zone); in Evaluate()
689 if (!Evaluate(isolate, module, &stack, &dfs_index).ToHandle(&result)) { in Evaluate()
694 DCHECK_EQ(module->GetException(), isolate->pending_exception()); in Evaluate()
697 DCHECK_EQ(module->status(), kEvaluated); in Evaluate()
702 MaybeHandle<Object> Module::Evaluate(Isolate* isolate, Handle<Module> module, in Evaluate() argument
703 ZoneForwardList<Handle<Module>>* stack, in Evaluate()
705 if (module->status() == kErrored) { in Evaluate()
706 isolate->Throw(module->GetException()); in Evaluate()
709 if (module->status() >= kEvaluating) { in Evaluate()
712 DCHECK_EQ(module->status(), kInstantiated); in Evaluate()
715 Handle<JSGeneratorObject> generator(JSGeneratorObject::cast(module->code()), in Evaluate()
717 module->set_code( in Evaluate()
719 module->SetStatus(kEvaluating); in Evaluate()
720 module->set_dfs_index(*dfs_index); in Evaluate()
721 module->set_dfs_ancestor_index(*dfs_index); in Evaluate()
722 stack->push_front(module); in Evaluate()
726 Handle<FixedArray> requested_modules(module->requested_modules(), isolate); in Evaluate()
728 Handle<Module> requested_module(Module::cast(requested_modules->get(i)), in Evaluate()
738 std::count_if(stack->begin(), stack->end(), [&](Handle<Module> m) { in Evaluate()
743 module->set_dfs_ancestor_index( in Evaluate()
744 std::min(module->dfs_ancestor_index(), in Evaluate()
749 // Evaluation of module body. in Evaluate()
760 CHECK(MaybeTransitionComponent(isolate, module, stack, kEvaluated)); in Evaluate()
768 void FetchStarExports(Isolate* isolate, Handle<Module> module, Zone* zone, in FetchStarExports() argument
770 DCHECK_GE(module->status(), Module::kInstantiating); in FetchStarExports()
772 if (module->module_namespace()->IsJSModuleNamespace()) return; // Shortcut. in FetchStarExports()
774 bool cycle = !visited->insert(module).second; in FetchStarExports()
776 Handle<ObjectHashTable> exports(module->exports(), isolate); in FetchStarExports()
783 Handle<FixedArray> special_exports(module->info()->special_exports(), in FetchStarExports()
792 Handle<Module> requested_module( in FetchStarExports()
793 Module::cast(module->requested_modules()->get(entry->module_request())), in FetchStarExports()
800 // [module]'s exports (i.e. to [exports]). We record these in in FetchStarExports()
837 module->set_exports(*exports); in FetchStarExports()
842 Handle<JSModuleNamespace> Module::GetModuleNamespace(Isolate* isolate, in GetModuleNamespace()
843 Handle<Module> module, in GetModuleNamespace() argument
845 Handle<Module> requested_module( in GetModuleNamespace()
846 Module::cast(module->requested_modules()->get(module_request)), isolate); in GetModuleNamespace()
847 return Module::GetModuleNamespace(isolate, requested_module); in GetModuleNamespace()
850 Handle<JSModuleNamespace> Module::GetModuleNamespace(Isolate* isolate, in GetModuleNamespace()
851 Handle<Module> module) { in GetModuleNamespace() argument
852 Handle<HeapObject> object(module->module_namespace(), isolate); in GetModuleNamespace()
862 FetchStarExports(isolate, module, &zone, &visited); in GetModuleNamespace()
863 Handle<ObjectHashTable> exports(module->exports(), isolate); in GetModuleNamespace()
882 ns->set_module(*module); in GetModuleNamespace()
883 module->set_module_namespace(*ns); in GetModuleNamespace()
912 Handle<Object> object(module()->exports()->Lookup(name), isolate); in GetExport()
934 Handle<Object> lookup(object->module()->exports()->Lookup(name), isolate); in GetPropertyAttributes()