Modules.h (2717B)
1 /* -*- Mode: javascript; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 2 * -*- */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef vm_Modules_h 8 #define vm_Modules_h 9 10 #include "NamespaceImports.h" 11 12 #include "builtin/ModuleObject.h" 13 #include "js/AllocPolicy.h" 14 #include "js/GCVector.h" 15 #include "js/RootingAPI.h" 16 17 struct JSContext; 18 19 namespace js { 20 21 using ModuleVector = GCVector<ModuleObject*, 0, SystemAllocPolicy>; 22 23 // A struct with detailed error information when import/export failed. 24 struct ModuleErrorInfo { 25 ModuleErrorInfo(uint32_t lineNumber_, JS::ColumnNumberOneOrigin columnNumber_) 26 : lineNumber(lineNumber_), columnNumber(columnNumber_) {} 27 28 void setImportedModule(JSContext* cx, ModuleObject* importedModule); 29 void setCircularImport(JSContext* cx, ModuleObject* importedModule); 30 void setForAmbiguousImport(JSContext* cx, ModuleObject* importedModule, 31 ModuleObject* module1, ModuleObject* module2); 32 33 uint32_t lineNumber; 34 JS::ColumnNumberOneOrigin columnNumber; 35 36 // The filename of the imported module. 37 const char* imported; 38 39 // The filenames of the ambiguous entries. 40 const char* entry1; 41 const char* entry2; 42 43 // A bool to indicate the error is a circular import when it's true. 44 bool isCircular = false; 45 }; 46 47 ModuleNamespaceObject* GetOrCreateModuleNamespace(JSContext* cx, 48 Handle<ModuleObject*> module); 49 50 void AsyncModuleExecutionFulfilled(JSContext* cx, Handle<ModuleObject*> module); 51 52 void AsyncModuleExecutionRejected(JSContext* cx, Handle<ModuleObject*> module, 53 HandleValue error); 54 55 bool OnModuleEvaluationFailure(JSContext* cx, HandleObject evaluationPromise, 56 JS::ModuleErrorBehaviour errorBehaviour); 57 58 bool LoadRequestedModules(JSContext* cx, Handle<ModuleObject*> module, 59 HandleValue hostDefined, 60 JS::LoadModuleResolvedCallback resolved, 61 JS::LoadModuleRejectedCallback rejected); 62 63 bool LoadRequestedModules(JSContext* cx, Handle<ModuleObject*> module, 64 HandleValue hostDefined, 65 MutableHandle<JSObject*> promiseOut); 66 67 bool HostLoadImportedModule( 68 JSContext* cx, Handle<JSScript*> referrer, Handle<JSObject*> moduleRequest, 69 Handle<Value> hostDefined, Handle<Value> payload, uint32_t lineNumber = 0, 70 JS::ColumnNumberOneOrigin columnNumber = JS::ColumnNumberOneOrigin()); 71 72 } // namespace js 73 74 #endif // vm_Modules_h