Lines Matching defs:module

5 #include "src/objects/module.h"
18 #include "src/objects/module-inl.h"
21 #include "src/objects/source-text-module.h"
22 #include "src/objects/synthetic-module-inl.h"
30 void PrintModuleName(Module module, std::ostream& os) {
31 if (module.IsSourceTextModule()) {
32 SourceTextModule::cast(module).GetScript().GetNameOrSourceURL().Print(os);
34 SyntheticModule::cast(module).name().Print(os);
41 void PrintStatusTransition(Module module, Module::Status old_status) {
44 os << "Changing module status from " << old_status << " to "
45 << module.status() << " for ";
46 PrintModuleName(module, os);
49 void PrintStatusMessage(Module module, const char* message) {
52 os << "Instantiating module ";
53 PrintModuleName(module, os);
57 void SetStatusInternal(Module module, Module::Status new_status) {
60 Module::Status old_status = static_cast<Module::Status>(module.status());
61 module.set_status(new_status);
62 PrintStatusTransition(module, old_status);
64 module.set_status(new_status);
79 Handle<Module> module) {
81 RecordError(isolate, module, the_exception);
85 void Module::RecordError(Isolate* isolate, Handle<Module> module,
88 DCHECK(module->exception().IsTheHole(isolate));
90 if (module->IsSourceTextModule()) {
93 auto self = SourceTextModule::cast(*module);
96 SetStatusInternal(*module, Module::kErrored);
98 module->set_exception(*error);
101 module->set_exception(*isolate->factory()->null_value());
105 void Module::ResetGraph(Isolate* isolate, Handle<Module> module) {
106 DCHECK_NE(module->status(), kEvaluating);
107 if (module->status() != kPreLinking && module->status() != kLinking) {
112 module->IsSourceTextModule()
114 SourceTextModule::cast(*module).requested_modules(), isolate)
116 Reset(isolate, module);
118 if (!module->IsSourceTextModule()) {
119 DCHECK(module->IsSyntheticModule());
132 void Module::Reset(Isolate* isolate, Handle<Module> module) {
133 DCHECK(module->status() == kPreLinking || module->status() == kLinking);
134 DCHECK(module->exception().IsTheHole(isolate));
136 // by RunInitializationCode, which is called only after this module's SCC
138 DCHECK(!module->module_namespace().IsJSModuleNamespace());
140 module->IsSourceTextModule()
141 ? SourceTextModule::cast(*module).regular_exports().length()
142 : SyntheticModule::cast(*module).export_names().length();
145 if (module->IsSourceTextModule()) {
146 SourceTextModule::Reset(isolate, Handle<SourceTextModule>::cast(module));
149 module->set_exports(*exports);
150 SetStatusInternal(*module, kUnlinked);
160 MaybeHandle<Cell> Module::ResolveExport(Isolate* isolate, Handle<Module> module,
165 DCHECK_GE(module->status(), kPreLinking);
166 DCHECK_NE(module->status(), kEvaluating);
168 if (module->IsSourceTextModule()) {
170 isolate, Handle<SourceTextModule>::cast(module), module_specifier,
174 isolate, Handle<SyntheticModule>::cast(module), module_specifier,
180 Isolate* isolate, Handle<Module> module, v8::Local<v8::Context> context,
184 PrintStatusMessage(*module, "Instantiating module ");
187 if (!PrepareInstantiate(isolate, module, context, callback,
189 ResetGraph(isolate, module);
190 DCHECK_EQ(module->status(), kUnlinked);
196 if (!FinishInstantiate(isolate, module, &stack, &dfs_index, &zone)) {
197 ResetGraph(isolate, module);
198 DCHECK_EQ(module->status(), kUnlinked);
201 DCHECK(module->status() == kLinked || module->status() == kEvaluated ||
202 module->status() == kErrored);
208 Isolate* isolate, Handle<Module> module, v8::Local<v8::Context> context,
211 DCHECK_NE(module->status(), kEvaluating);
212 DCHECK_NE(module->status(), kLinking);
213 if (module->status() >= kPreLinking) return true;
214 module->SetStatus(kPreLinking);
217 if (module->IsSourceTextModule()) {
219 isolate, Handle<SourceTextModule>::cast(module), context, callback,
223 isolate, Handle<SyntheticModule>::cast(module), context);
227 bool Module::FinishInstantiate(Isolate* isolate, Handle<Module> module,
230 DCHECK_NE(module->status(), kEvaluating);
231 if (module->status() >= kLinking) return true;
232 DCHECK_EQ(module->status(), kPreLinking);
235 if (module->IsSourceTextModule()) {
237 isolate, Handle<SourceTextModule>::cast(module), stack, dfs_index,
241 isolate, Handle<SyntheticModule>::cast(module));
245 MaybeHandle<Object> Module::Evaluate(Isolate* isolate, Handle<Module> module) {
247 PrintStatusMessage(*module, "Evaluating module ");
252 if (module->status() == kErrored) {
255 // reject it with the module's exception.
256 if (module->top_level_capability().IsJSPromise()) {
258 JSPromise::cast(module->top_level_capability()), isolate);
260 top_level_capability->result() == module->exception());
264 JSPromise::Reject(capability, handle(module->exception(), isolate));
269 // 2. Assert: module.[[Status]] is "linked" or "evaluated".
270 CHECK(module->status() == kLinked || module->status() == kEvaluated);
272 // 3. If module.[[Status]] is "evaluated", set module to
273 // module.[[CycleRoot]].
275 if (module->status() == kEvaluated && module->IsSourceTextModule()) {
276 module = Handle<SourceTextModule>::cast(module)->GetCycleRoot(isolate);
279 // 4. If module.[[TopLevelCapability]] is not undefined, then
280 // a. Return module.[[TopLevelCapability]].[[Promise]].
281 if (module->top_level_capability().IsJSPromise()) {
282 return handle(JSPromise::cast(module->top_level_capability()), isolate);
284 DCHECK(module->top_level_capability().IsUndefined());
286 if (module->IsSourceTextModule()) {
288 Handle<SourceTextModule>::cast(module));
291 Handle<SyntheticModule>::cast(module));
296 Handle<Module> module) {
297 Handle<HeapObject> object(module->module_namespace(), isolate);
308 if (module->IsSourceTextModule()) {
310 isolate, Handle<SourceTextModule>::cast(module), &zone, &visited);
313 Handle<ObjectHashTable> exports(module->exports(), isolate);
332 ns->set_module(*module);
333 module->set_module_namespace(*ns);
372 Handle<Object> object(module().exports().Lookup(name), isolate);
381 // https://tc39.es/ecma262/#sec-source-text-module-record-initialize-environment
383 // https://tc39.es/ecma262/#sec-module-namespace-exotic-objects-get-p-receiver,
402 Handle<Object> lookup(object->module().exports().Lookup(name), isolate);
416 // https://tc39.es/ecma262/#sec-module-namespace-exotic-objects-defineownproperty-p-desc