__wasm_split.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // when running the harness we need to make sure to uncommon this out...
  2. export function makeLoad(url, deps, fusedImports, initIt) {
  3. let alreadyLoaded = false;
  4. return async (callbackIndex, callbackData) => {
  5. await Promise.all(deps.map((dep) => dep()));
  6. if (alreadyLoaded) return;
  7. try {
  8. const response = await fetch(url);
  9. const initSync = initIt || window.__wasm_split_main_initSync;
  10. const mainExports = initSync(undefined, undefined);
  11. let imports = {
  12. env: {
  13. memory: mainExports.memory,
  14. },
  15. __wasm_split: {
  16. __indirect_function_table: mainExports.__indirect_function_table,
  17. __stack_pointer: mainExports.__stack_pointer,
  18. __tls_base: mainExports.__tls_base,
  19. memory: mainExports.memory,
  20. },
  21. };
  22. for (let mainExport in mainExports) {
  23. imports["__wasm_split"][mainExport] = mainExports[mainExport];
  24. }
  25. for (let name in fusedImports) {
  26. imports["__wasm_split"][name] = fusedImports[name];
  27. }
  28. let new_exports = await WebAssembly.instantiateStreaming(
  29. response,
  30. imports
  31. );
  32. alreadyLoaded = true;
  33. for (let name in new_exports.instance.exports) {
  34. fusedImports[name] = new_exports.instance.exports[name];
  35. }
  36. if (callbackIndex !== undefined) {
  37. mainExports.__indirect_function_table.get(callbackIndex)(
  38. callbackData,
  39. true
  40. );
  41. }
  42. } catch (e) {
  43. console.error(
  44. "Failed to load wasm-split module",
  45. e,
  46. url,
  47. deps,
  48. fusedImports
  49. );
  50. return;
  51. }
  52. };
  53. }
  54. let fusedImports = {};