tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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