Lines Matching refs:module
5 #include "src/objects/source-text-module.h"
12 #include "src/objects/module-inl.h"
126 Isolate* isolate, Handle<SourceTextModule> module, Handle<String> name,
128 Handle<ObjectHashTable> exports(module->exports(), isolate);
131 module->set_exports(*exports);
135 Handle<SourceTextModule> module,
140 module->regular_exports().set(ExportIndex(cell_index), *cell);
142 Handle<ObjectHashTable> exports(module->exports(), isolate);
148 module->set_exports(*exports);
168 Handle<SourceTextModule> module,
170 return handle(module->GetCell(cell_index).value(), isolate);
173 void SourceTextModule::StoreVariable(Handle<SourceTextModule> module,
178 module->GetCell(cell_index).set_value(*value);
182 Isolate* isolate, Handle<SourceTextModule> module,
185 Handle<Object> object(module->exports().Lookup(export_name), isolate);
194 auto result = resolve_set->insert({module, nullptr});
197 // |module| wasn't in the map previously, so allocate a new name set.
219 Handle<Script> script(module->GetScript(), isolate);
223 if (!ResolveImport(isolate, module, import_name, entry->module_request(),
232 Handle<ObjectHashTable> exports(module->exports(), isolate);
236 module->set_exports(*exports);
242 isolate, module, module_specifier, export_name, loc, must_resolve,
247 Isolate* isolate, Handle<SourceTextModule> module, Handle<String> name,
251 Module::cast(module->requested_modules().get(module_request_index)),
255 module->info().module_requests().get(module_request_index)),
267 Isolate* isolate, Handle<SourceTextModule> module,
274 Handle<FixedArray> special_exports(module->info().special_exports(),
283 Handle<Script> script(module->GetScript(), isolate);
287 if (ResolveImport(isolate, module, export_name, entry->module_request(),
304 Handle<ObjectHashTable> exports(module->exports(), isolate);
307 module->set_exports(*exports);
323 Isolate* isolate, Handle<SourceTextModule> module,
328 Handle<SourceTextModuleInfo> module_info(module->info(), isolate);
330 Handle<FixedArray> requested_modules(module->requested_modules(), isolate);
341 v8::Utils::ToLocal(Handle<Module>::cast(module)))
349 v8::Utils::ToLocal(Handle<Module>::cast(module)))
376 CreateExport(isolate, module, cell_index, export_names);
382 // the correct Cell in the module that actually provides the value, we replace
390 CreateIndirectExport(isolate, module, Handle<String>::cast(export_name),
394 DCHECK_EQ(module->status(), kPreLinking);
399 Handle<SourceTextModule> module) {
400 DCHECK_EQ(module->status(), kLinking);
401 Handle<JSFunction> function(JSFunction::cast(module->code()), isolate);
407 module, isolate->native_context(), scope_info);
418 module->set_code(JSGeneratorObject::cast(*generator));
423 Isolate* isolate, Handle<SourceTextModule> module,
427 // {module} is on the {stack}.
429 [&](Handle<Module> m) { return *m == *module; }) == 1);
430 DCHECK_LE(module->dfs_ancestor_index(), module->dfs_index());
431 if (module->dfs_ancestor_index() == module->dfs_index()) {
433 Handle<SourceTextModule> cycle_root = module;
448 } while (*ancestor != *module);
454 Isolate* isolate, Handle<SourceTextModule> module,
457 // Instantiate SharedFunctionInfo and mark module as instantiating for
459 Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(module->code()),
464 module->set_code(*function);
465 module->SetStatus(kLinking);
466 module->set_dfs_index(*dfs_index);
467 module->set_dfs_ancestor_index(*dfs_index);
468 stack->push_front(module);
472 Handle<FixedArray> requested_modules(module->requested_modules(), isolate);
493 module->set_dfs_ancestor_index(std::min(
494 module->dfs_ancestor_index(),
499 Handle<Script> script(module->GetScript(), isolate);
500 Handle<SourceTextModuleInfo> module_info(module->info(), isolate);
511 if (!ResolveImport(isolate, module, name, entry->module_request(), loc,
516 module->regular_imports().set(ImportIndex(entry->cell_index()), *cell);
528 if (ResolveExport(isolate, module, Handle<String>(),
535 return MaybeTransitionComponent(isolate, module, stack, kLinked);
539 Handle<SourceTextModule> module,
542 DCHECK_GE(module->status(), Module::kLinking);
544 if (module->module_namespace().IsJSModuleNamespace()) return; // Shortcut.
546 bool cycle = !visited->insert(module).second;
548 Handle<ObjectHashTable> exports(module->exports(), isolate);
555 Handle<FixedArray> special_exports(module->info().special_exports(), isolate);
564 Module::cast(module->requested_modules().get(entry->module_request())),
574 // [module]'s exports (i.e. to [exports]). We record these in
611 module->set_exports(*exports);
623 Handle<SourceTextModule> module = worklist.top();
626 // 1. Assert: module.[[Status]] is evaluated.
627 DCHECK_EQ(module->status(), kEvaluated);
629 // 2. For each Module m of module.[[AsyncParentModules]], do
630 for (int i = module->AsyncParentModuleCount(); i-- > 0;) {
631 Handle<SourceTextModule> m = module->GetAsyncParentModule(isolate, i);
667 Isolate* isolate, Handle<SourceTextModule> module, int module_request) {
669 Module::cast(module->requested_modules().get(module_request)), isolate);
674 Isolate* isolate, Handle<SourceTextModule> module) {
675 Handle<HeapObject> import_meta(module->import_meta(kAcquireLoad), isolate);
677 if (!isolate->RunHostInitializeImportMetaObjectCallback(module).ToHandle(
681 module->set_import_meta(*import_meta, kReleaseStore);
687 Isolate* isolate, Handle<SourceTextModule> module) {
688 CHECK(module->status() == kLinked || module->status() == kEvaluated);
698 // 7. Set module.[[TopLevelCapability]] to capability.
699 module->set_top_level_capability(*capability);
700 DCHECK(module->top_level_capability().IsJSPromise());
702 // 8. Let result be InnerModuleEvaluation(module, stack, 0).
705 if (!InnerModuleEvaluation(isolate, module, &stack, &dfs_index)
718 // handle. The module's status should be set to kErrored and the
721 CHECK_EQ(module->status(), kErrored);
722 CHECK_EQ(module->exception(), *isolate->factory()->null_value());
725 CHECK_EQ(module->exception(), isolate->pending_exception());
730 JSPromise::Reject(capability, handle(module->exception(), isolate));
733 // a. Assert: module.[[Status]] is "evaluated"...
734 CHECK_EQ(module->status(), kEvaluated);
736 // b. If module.[[AsyncEvaluating]] is false, then
737 if (!module->IsAsyncEvaluating()) {
753 Isolate* isolate, Handle<SourceTextModule> module) {
754 // 1. If module.[[Status]] is evaluated, then
755 if (module->status() == kErrored) {
756 // a. Assert: module.[[EvaluationError]] is not empty.
757 DCHECK(!module->exception().IsTheHole(isolate));
761 // 3. Assert: module.[[AsyncEvaluating]] is true.
762 DCHECK(module->IsAsyncEvaluating());
763 // 4. Assert: module.[[EvaluationError]] is empty.
764 CHECK_EQ(module->status(), kEvaluated);
765 // 5. Set module.[[AsyncEvaluating]] to false.
766 isolate->DidFinishModuleAsyncEvaluation(module->async_evaluating_ordinal());
767 module->set_async_evaluating_ordinal(kAsyncEvaluateDidFinish);
769 // 7. If module.[[TopLevelCapability]] is not empty, then
770 if (!module->top_level_capability().IsUndefined(isolate)) {
771 // a. Assert: module.[[CycleRoot]] is equal to module.
772 DCHECK_EQ(*module->GetCycleRoot(isolate), *module);
773 // i. Perform ! Call(module.[[TopLevelCapability]].[[Resolve]], undefined,
776 JSPromise::cast(module->top_level_capability()), isolate);
785 // 9. Perform ! GatherAsyncParentCompletions(module, execList).
786 GatherAsyncParentCompletions(isolate, &zone, module, &exec_list);
855 Isolate* isolate, Handle<SourceTextModule> module,
857 // 1. If module.[[Status]] is evaluated, then
858 if (module->status() == kErrored) {
859 // a. Assert: module.[[EvaluationError]] is not empty.
860 DCHECK(!module->exception().IsTheHole(isolate));
867 // 1. Assert: module.[[Status]] is "evaluated".
868 CHECK(module->status() == kEvaluated || module->status() == kErrored);
869 // 2. If module.[[AsyncEvaluating]] is false,
870 if (!module->IsAsyncEvaluating()) {
871 // a. Assert: module.[[EvaluationError]] is not empty.
872 CHECK_EQ(module->status(), kErrored);
877 // 5. Set module.[[EvaluationError]] to ThrowCompletion(error).
878 Module::RecordError(isolate, module, exception);
880 // 6. Set module.[[AsyncEvaluating]] to false.
881 isolate->DidFinishModuleAsyncEvaluation(module->async_evaluating_ordinal());
882 module->set_async_evaluating_ordinal(kAsyncEvaluateDidFinish);
884 // 7. For each Module m of module.[[AsyncParentModules]], do
885 for (int i = 0; i < module->AsyncParentModuleCount(); i++) {
886 Handle<SourceTextModule> m = module->GetAsyncParentModule(isolate, i);
888 // a. If module.[[DFSIndex]] is not equal to module.[[DFSAncestorIndex]],
890 if (module->dfs_index() != module->dfs_ancestor_index()) {
892 // module.[[DFSAncestorIndex]].
893 DCHECK_EQ(m->dfs_ancestor_index(), module->dfs_ancestor_index());
899 // 8. If module.[[TopLevelCapability]] is not empty, then
900 if (!module->top_level_capability().IsUndefined(isolate)) {
901 // a. Assert: module.[[CycleRoot]] is equal to module.
902 DCHECK_EQ(*module->GetCycleRoot(isolate), *module);
903 // b. Perform ! Call(module.[[TopLevelCapability]].[[Reject]],
906 JSPromise::cast(module->top_level_capability()), isolate);
913 Isolate* isolate, Handle<SourceTextModule> module) {
914 // 1. Assert: module.[[Status]] is "evaluating" or "evaluated".
915 CHECK(module->status() == kEvaluating || module->status() == kEvaluated);
917 // 2. Assert: module.[[Async]] is true.
918 DCHECK(module->async());
920 // 3. Set module.[[AsyncEvaluating]] to true.
921 module->set_async_evaluating_ordinal(
935 // 7. Set onFulfilled.[[Module]] to module.
938 ->NewJSBoundFunction(steps_fulfilled, module, empty_argv)
946 // 10. Set onRejected.[[Module]] to module.
949 ->NewJSBoundFunction(steps_rejected, module, empty_argv)
959 // 12. Perform ! module.ExecuteModule(capability).
960 // Note: In V8 we have broken module.ExecuteModule into
961 // ExecuteModule for synchronous module execution and
964 InnerExecuteAsyncModule(isolate, module, capability);
966 // The evaluation of async module can not throwing a JavaScript observable
979 Isolate* isolate, Handle<SourceTextModule> module,
981 // If we have an async module, then it has an associated
985 JSAsyncFunctionObject::cast(module->code()), isolate);
1000 Isolate* isolate, Handle<SourceTextModule> module) {
1002 Handle<JSGeneratorObject> generator(JSGeneratorObject::cast(module->code()),
1019 Isolate* isolate, Handle<SourceTextModule> module,
1023 // InnerModuleEvaluation(module, stack, index)
1024 // 2. If module.[[Status]] is "evaluated", then
1025 // a. If module.[[EvaluationError]] is undefined, return index.
1027 if (module->status() == kEvaluated || module->status() == kEvaluating) {
1031 // b. Otherwise return module.[[EvaluationError]].
1034 if (module->status() == kErrored) {
1035 isolate->Throw(module->exception());
1039 // 4. Assert: module.[[Status]] is "linked".
1040 CHECK_EQ(module->status(), kLinked);
1042 // 5. Set module.[[Status]] to "evaluating".
1043 module->SetStatus(kEvaluating);
1045 // 6. Set module.[[DFSIndex]] to index.
1046 module->set_dfs_index(*dfs_index);
1048 // 7. Set module.[[DFSAncestorIndex]] to index.
1049 module->set_dfs_ancestor_index(*dfs_index);
1051 // 8. Set module.[[PendingAsyncDependencies]] to 0.
1052 DCHECK(!module->HasPendingAsyncDependencies());
1054 // 9. Set module.[[AsyncParentModules]] to a new empty List.
1055 module->set_async_parent_modules(ReadOnlyRoots(isolate).empty_array_list());
1060 // 11. Append module to stack.
1061 stack->push_front(module);
1064 Handle<FixedArray> requested_modules(module->requested_modules(), isolate);
1067 // module.[[RequestedModules]], do
1082 // (We also assert the module cannot be errored, because if it was
1097 // 1. Set module.[[DFSAncestorIndex]] to
1099 // module.[[DFSAncestorIndex]],
1101 module->set_dfs_ancestor_index(
1102 std::min(module->dfs_ancestor_index(),
1113 // return module.[[EvaluationError]].
1114 // (If there was an exception on the original required module
1126 // 1. Set module.[[PendingAsyncDependencies]] to
1127 // module.[[PendingAsyncDependencies]] + 1.
1128 module->IncrementPendingAsyncDependencies();
1130 // 2. Append module to requiredModule.[[AsyncParentModules]].
1131 AddAsyncParentModule(isolate, required_module, module);
1139 // The spec returns the module index for proper numbering of dependencies.
1140 // However, we pass the module index by pointer instead.
1143 // on the module's implicit iterator. We preserve this behavior for
1147 // 14. If module.[[PendingAsyncDependencies]] > 0 or module.[[Async]] is
1149 if (module->HasPendingAsyncDependencies() || module->async()) {
1150 // a. Assert: module.[[AsyncEvaluating]] is false and was never previously
1152 DCHECK_EQ(module->async_evaluating_ordinal(), kNotAsyncEvaluated);
1154 // b. Set module.[[AsyncEvaluating]] to true.
1157 module->set_async_evaluating_ordinal(
1160 // c. If module.[[PendingAsyncDependencies]] is 0,
1164 if (!module->HasPendingAsyncDependencies()) {
1165 MAYBE_RETURN(SourceTextModule::ExecuteAsyncModule(isolate, module),
1169 // 15. Otherwise, perform ? module.ExecuteModule().
1170 ASSIGN_RETURN_ON_EXCEPTION(isolate, result, ExecuteModule(isolate, module),
1174 CHECK(MaybeTransitionComponent(isolate, module, stack, kEvaluated));
1179 Handle<SourceTextModule> module) {
1182 DCHECK(module->import_meta(kAcquireLoad).IsTheHole(isolate));
1185 factory->NewFixedArray(module->regular_exports().length());
1187 factory->NewFixedArray(module->regular_imports().length());
1189 factory->NewFixedArray(module->requested_modules().length());
1191 if (module->status() == kLinking) {
1192 module->set_code(JSFunction::cast(module->code()).shared());
1194 module->set_regular_exports(*regular_exports);
1195 module->set_regular_imports(*regular_imports);
1196 module->set_requested_modules(*requested_modules);
1197 module->set_dfs_index(-1);
1198 module->set_dfs_ancestor_index(-1);