]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Rework the Emscripten-emitted module loader/init function such that it passes on...
authorstephan <stephan@noemail.net>
Thu, 29 Sep 2022 13:17:50 +0000 (13:17 +0000)
committerstephan <stephan@noemail.net>
Thu, 29 Sep 2022 13:17:50 +0000 (13:17 +0000)
FossilOrigin-Name: 0dbaa0e2b5abf5c23e2039ec90a3055ebb3c063aaf4e556c42546defe6fbb86d

17 files changed:
ext/wasm/GNUmakefile
ext/wasm/api/extern-post-js.js [new file with mode: 0644]
ext/wasm/api/sqlite3-api-prologue.js
ext/wasm/batch-runner.js
ext/wasm/common/SqliteTestUtil.js
ext/wasm/demo-123.js
ext/wasm/demo-kvvfs1.js
ext/wasm/scratchpad-wasmfs-main.js
ext/wasm/speedtest1-wasmfs.html
ext/wasm/speedtest1-worker.js
ext/wasm/speedtest1.html
ext/wasm/sqlite3-worker1.js
ext/wasm/test-opfs-vfs.js
ext/wasm/testing1.js
ext/wasm/wasmfs.make
manifest
manifest.uuid

index 0cb05580a7f0d5aefed93540e9593deee6e75e52..e9652e1da9e32b20e243715d7d62657f4a4a17bd 100644 (file)
@@ -152,7 +152,6 @@ post-jses := \
   $(dir.api)/post-js-header.js \
   $(sqlite3-api.js) \
   $(dir.api)/post-js-footer.js
-
 $(post-js.js): $(post-jses) $(MAKEFILE)
        @echo "Making $@..."
        @for i in $(post-jses); do \
@@ -160,7 +159,9 @@ $(post-js.js): $(post-jses) $(MAKEFILE)
                cat $$i; \
                echo "/* END FILE: $$i */"; \
        done > $@
-
+extern-post-js.js := $(dir.api)/extern-post-js.js
+sqlite3.js.flags.--post-js := --post-js=$(post-js.js) --extern-post-js=$(extern-post-js.js)
+post-jses.deps := $(post-js.js) $(extern-post-js.js)
 
 ########################################################################
 # emcc flags for .c/.o/.wasm/.js.
@@ -204,9 +205,12 @@ emcc.jsflags += -sINITIAL_MEMORY=13107200
 # ^^^^ 64MB is not enough for WASMFS/OPFS test runs using batch-runner.js
 emcc.jsflags += $(emcc.environment)
 #emcc.jsflags += -sTOTAL_STACK=4194304
-emcc.jsflags += -sEXPORT_NAME=sqlite3InitModule
+
+sqlite3.js.init-func := sqlite3InitModule
+# ^^^^ $(sqlite3.js.init-func) symbol name is hard-coded in $(extern-post-js.js)
+
+emcc.jsflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
 emcc.jsflags += -sGLOBAL_BASE=4096 # HYPOTHETICALLY keep func table indexes from overlapping w/ heap addr.
-emcc.jsflags += --post-js=$(post-js.js)
 #emcc.jsflags += -sSTRICT # fails due to missing __syscall_...()
 #emcc.jsflags += -sALLOW_UNIMPLEMENTED_SYSCALLS
 #emcc.jsflags += -sFILESYSTEM=0 # only for experimentation. sqlite3 needs the FS API
@@ -253,6 +257,7 @@ emcc.jsflags += -sWASM_BIGINT=$(emcc_enable_bigint)
 # code get confused and cannot load property (namely, the
 # sqlite3.worker.js generated in conjunction with -sWASMFS).
 sqlite3.js := sqlite3.js
+emcc.jsflags += $(sqlite3.js.flags.--post-js)
 sqlite3.wasm := sqlite3.wasm
 sqlite3-wasm.o := $(dir.api)/sqlite3-wasm.o
 $(sqlite3-wasm.o): emcc.cflags += $(SQLITE_OPT)
@@ -274,9 +279,9 @@ endef
 $(foreach c,$(sqlite3-wasm.c) $(jaccwabyt_test.c),$(eval $(call WASM_C_COMPILE,$(c))))
 $(sqlite3.js): $(MAKEFILE) $(sqlite3.wasm.obj) \
     EXPORTED_FUNCTIONS.api \
-    $(post-js.js)
+    $(post-jses.deps)
        @echo "Building $@ ..."
-       $(emcc.bin) -o $(sqlite3.js) $(emcc_opt) $(emcc.flags) $(emcc.jsflags) $(sqlite3.wasm.obj)
+       $(emcc.bin) -o $@ $(emcc_opt) $(emcc.flags) $(emcc.jsflags) $(sqlite3.wasm.obj)
        chmod -x $(sqlite3.wasm)
        $(maybe-wasm-strip) $(sqlite3.wasm)
        @ls -la $@ $(sqlite3.wasm)
@@ -329,8 +334,8 @@ speedtest1-common.eflags += $(emcc.exportedRuntimeMethods)
 speedtest1-common.eflags += -sALLOW_TABLE_GROWTH
 speedtest1-common.eflags += -sDYNAMIC_EXECUTION=0
 speedtest1-common.eflags += --minify 0
-speedtest1-common.eflags += -sEXPORT_NAME=sqlite3Speedtest1InitModule
-speedtest1-common.eflags += --post-js=$(post-js.js)
+speedtest1-common.eflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
+speedtest1-common.eflags += $(sqlite3.js.flags.--post-js)
 speedtest1-common.eflags += -sWASM_BIGINT=$(emcc_enable_bigint)
 speedtest1.exit-runtime0 := -sEXIT_RUNTIME=0
 speedtest1.exit-runtime1 := -sEXIT_RUNTIME=1
@@ -365,7 +370,7 @@ $(speedtest1.js): emcc.cflags+=
 # the latter (predictably) results in a slightly faster binary, but we're
 # close enough to the target speed requirements that the 500ms makes a
 # difference.
-$(speedtest1.js): $(MAKEFILE) $(speedtest1.cs) $(post-js.js) \
+$(speedtest1.js): $(MAKEFILE) $(speedtest1.cs) $(post-jses.deps) \
     EXPORTED_FUNCTIONS.speedtest1
        @echo "Building $@ ..."
        $(emcc.bin) \
diff --git a/ext/wasm/api/extern-post-js.js b/ext/wasm/api/extern-post-js.js
new file mode 100644 (file)
index 0000000..acb54c3
--- /dev/null
@@ -0,0 +1,41 @@
+/* emscripten-js-addenda.js must be appended to the resulting sqlite3.js
+   file. */
+(function(){
+  /**
+     In order to hide the sqlite3InitModule()'s resulting Emscripten
+     module from downstream clients (and simplify our documentation by
+     being able to elide those details), we rewrite
+     sqlite3InitModule() to return the sqlite3 object.
+
+     Unfortunately, we cannot modify the module-loader/exporter-based
+     impls which Emscripten installs at some point in the file above
+     this.
+  */
+  const originalInit = self.sqlite3InitModule;
+  if(!originalInit){
+    throw new Error("Expecting self.sqlite3InitModule to be defined by the Emscripten build.");
+  }
+  self.sqlite3InitModule.ready = originalInit.ready;
+  self.sqlite3InitModule = (...args)=>{
+    //console.warn("Using replaced sqlite3InitModule()",self.location);
+    return originalInit(...args).then((EmscriptenModule)=>{
+      if(self.window!==self &&
+         (EmscriptenModule['ENVIRONMENT_IS_PTHREAD']
+          || EmscriptenModule['_pthread_self']
+          || 'function'===typeof threadAlert
+          || self.location.pathname.endsWith('.worker.js')
+         )){
+        /** Workaround for wasmfs-generated worker, which calls this
+            routine from each individual thread and requires that its
+            argument be returned. All of the criteria above are fragile,
+            based solely on inspection of the offending code, not public
+            Emscripten details. */
+        return EmscriptenModule;
+      }
+      const f = EmscriptenModule.sqlite3.asyncPostInit;
+      delete EmscriptenModule.sqlite3.asyncPostInit;
+      return f();
+    });
+  };
+  //console.warn("Replaced sqlite3InitModule()");
+})();
index e0379a646b0aea15f1c0e445587c0a7e18346bd2..859c46bd4ba1b24526dc1a74d81e7ebbd74a8199 100644 (file)
@@ -924,6 +924,9 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
        Bug: if called while a prior call is still resolving, the 2nd
        call will resolve prematurely, before the 1st call has finished
        resolving.
+
+       In Emscripten-based builds, this function is called
+       automatically and deleted from this object.
     */
     asyncPostInit: async function(){
       let lip = sqlite3ApiBootstrap.initializersAsync;
index 3762998b69bd17984a98bd5d41eff0bb0649b2ec..ad281c2e9d3376c9a8aff9bb2ae3b4de8517a302 100644 (file)
     }/*run()*/
   }/*App*/;
 
-  self.sqlite3TestModule.initSqlite3().then(function(theEmccModule){
-    self._MODULE = theEmccModule /* this is only to facilitate testing from the console */;
-    sqlite3 = theEmccModule.sqlite3;
-    console.log("App",App);
-    self.App = App;
-    App.run(theEmccModule.sqlite3);
+  self.sqlite3TestModule.initSqlite3().then(function(sqlite3){
+    self.App = App /* only to facilitate dev console access */;
+    App.run(sqlite3);
   });
 })();
index 277ab55294ef5c73d3d2a7d19519417169eaa369..08688fd487211c0f68ec639be69d458a6fe82f2f 100644 (file)
        object, calls it sqlite3InitModule(), and removes
        self.sqlite3ApiConfig after initialization is done. Returns the
        promise from sqlite3InitModule(), and the next then() handler
-       will get the Emscripten module object as its argument. That
-       module has the sqlite3's main namespace object installed as its
-       `sqlite3` property.
+       will get the sqlite3 API object as its argument.
     */
     initSqlite3: function(){
       self.sqlite3ApiConfig = this.sqlite3ApiConfig;
index a08bffb64cefd4edd0e438d8292df4cb435980ae..00ea1f5bc0cddd65c5e498a71bcf1233408777b8 100644 (file)
     // like so...
     print: log,
     printErr: error
-  }).then(function(EmscriptenModule){
-    //console.log('EmscriptenModule.sqlite3 =',EmscriptenModule.sqlite3);
+  }).then(function(sqlite3){
+    //console.log('sqlite3 =',sqlite3);
     log("Done initializing. Running demo...");
     try {
-      demo1(EmscriptenModule.sqlite3);
+      demo1(sqlite3);
     }catch(e){
       error("Exception:",e.message);
     }
index a2cff8639d11bc06a4bd46ab693ee4e8e56595e5..b358694ce872bb92ec07135505e332eb5e6625e6 100644 (file)
     logHtml('error',...args);
   };
   
-  const runTests = function(Module){
-    //log("Module",Module);
-    const sqlite3 = Module.sqlite3,
-          capi = sqlite3.capi,
+  const runTests = function(sqlite3){
+    const capi = sqlite3.capi,
           oo = sqlite3.oo1,
           wasm = capi.wasm;
     log("Loaded module:",capi.sqlite3_libversion(), capi.sqlite3_sourceid());
     }
   };
 
-  sqlite3InitModule(self.sqlite3TestModule).then(function(theModule){
-    console.warn("Installing Emscripten module as global EM for dev console access.");
-    self.EM = theModule;
-    runTests(theModule);
+  sqlite3InitModule(self.sqlite3TestModule).then((sqlite3)=>{
+    runTests(sqlite3);
   });
 })();
index 764f72e6dfc4be2a94baddf920b5d66fa193f9ef..e76011274be05d570035fd7bb021eeb09c3364cb 100644 (file)
       });
   };
 
-  const runTests = function(Module){
-    //stdout("Module",Module);
-    self._MODULE = Module /* this is only to facilitate testing from the console */;
-    const sqlite3 = Module.sqlite3,
-          capi = sqlite3.capi,
+  const runTests = function(sqlite3){
+    const capi = sqlite3.capi,
           oo = sqlite3.oo1,
           wasm = capi.wasm;
     stdout("Loaded sqlite3:",capi.sqlite3_libversion(), capi.sqlite3_sourceid());
@@ -60,7 +57,7 @@
       ].forEach((f)=>{
         const n = performance.now();
         stdout(banner1,"Running",f.name+"()...");
-        f(db, sqlite3, Module);
+        f(db, sqlite3);
         stdout(banner2,f.name+"() took ",(performance.now() - n),"ms");
       });
     }finally{
index 6952fc1eeded50f2f1090f5ce147cdafeab973df..e35546702e2070366993700f135d2b56dba6cbf5 100644 (file)
 
     self.sqlite3TestModule.print = log;
     self.sqlite3TestModule.printErr = logErr;
-    sqlite3Speedtest1InitModule(self.sqlite3TestModule).then(function(M){
-        runTests(M.sqlite3);
-    });
+    sqlite3InitModule(self.sqlite3TestModule).then(runTests);
 })();</script>
   </body>
 </html>
index e6359966d5b692dd15e0f12154efe60fa9a63af6..1f421b0b869c9490b6dc0b5a7840eab5b1c3287b 100644 (file)
     printErr: logErr,
     setStatus: (text)=>mPost('load-status',text)
   };
-  self.sqlite3Speedtest1InitModule(EmscriptenModule).then(function(EModule){
-    log("Module inited.");
-    return EModule.sqlite3.asyncPostInit()
-      .then((sqlite3)=>{
-        const S = sqlite3;
-        const vfsUnlink = S.capi.wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]);
-        App.unlink = function(fname){
-          vfsUnlink(fname);
-          if(S.opfs) S.opfs.deleteEntry(fname);
-        };
-        App.pDir = wasmfsDir(S.wasm);
-        App.wasm = S.capi.wasm;
-        //if(App.pDir) log("Persistent storage:",pDir);
-        //else log("Using transient storage.");
-        mPost('ready',true);
-        log("Registered VFSes:", ...S.capi.sqlite3_web_vfs_list());
-      });
+  self.sqlite3InitModule(EmscriptenModule).then((sqlite3)=>{
+    const S = sqlite3;
+    const vfsUnlink = S.capi.wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]);
+    App.unlink = function(fname){
+      vfsUnlink(fname);
+      if(S.opfs) S.opfs.deleteEntry(fname);
+    };
+    App.pDir = wasmfsDir(S.wasm);
+    App.wasm = S.capi.wasm;
+    //if(App.pDir) log("Persistent storage:",pDir);
+    //else log("Using transient storage.");
+    mPost('ready',true);
+    log("Registered VFSes:", ...S.capi.sqlite3_web_vfs_list());
   });
 })();
index 6c2853a73afdf5ccb28b3a8e64b8bbd6eef2d46c..358d8ba79eb0d81c4d8b10807476a2840956e221 100644 (file)
 
     self.sqlite3TestModule.print = log;
     self.sqlite3TestModule.printErr = logErr;
-    sqlite3Speedtest1InitModule(self.sqlite3TestModule)
-        .then((EmscriptenModule)=>{
-            return EmscriptenModule.sqlite3.installOpfsVfs()
-                .catch((e)=>{console.warn(e.message)})
-                .then(()=>runTests(EmscriptenModule.sqlite3));
-        });
+    sqlite3InitModule(self.sqlite3TestModule).then(runTests);
 })();</script>
 </body>
 </html>
index 6de8facf90a3cb898b7ebd84ecd194c9d9c2d22c..7ccf79f010dee932ae74d3df2e68a8de9071c662 100644 (file)
@@ -28,9 +28,7 @@
 */
 "use strict";
 importScripts('sqlite3.js');
-sqlite3InitModule().then((EmscriptenModule)=>{
-  EmscriptenModule.sqlite3.asyncPostInit().then((sqlite3)=>{
-    sqlite3.capi.sqlite3_wasmfs_opfs_dir();
-    sqlite3.initWorker1API();
-  });
+sqlite3InitModule().then((sqlite3)=>{
+  sqlite3.capi.sqlite3_wasmfs_opfs_dir();
+  sqlite3.initWorker1API();
 });
index 93e9e0eb6436b3bda112c135e702b0eb0e58c7ef..78f86e380f0017ada795038b508f51ea19690996 100644 (file)
@@ -28,7 +28,13 @@ const tryOpfsVfs = function(sqlite3){
   const log = (...args)=>console.log(logPrefix,...args);
   const warn =  (...args)=>console.warn(logPrefix,...args);
   const error =  (...args)=>console.error(logPrefix,...args);
+  const opfs = sqlite3.opfs;
   log("tryOpfsVfs()");
+  if(!sqlite3.opfs){
+    const e = toss("OPFS is not available.");
+    error(e);
+    throw e;
+  }
   const capi = sqlite3.capi;
   const pVfs = capi.sqlite3_vfs_find("opfs") || toss("Missing 'opfs' VFS.");
   const oVfs = capi.sqlite3_vfs.instanceForPointer(pVfs) || toss("Unexpected instanceForPointer() result.");;
@@ -38,7 +44,6 @@ const tryOpfsVfs = function(sqlite3){
   const dbFile = "my-persistent.db";
   if(urlArgs.has('delete')) sqlite3.opfs.deleteEntry(dbFile);
 
-  const opfs = sqlite3.opfs;
   const db = new opfs.OpfsDb(dbFile);
   log("db file:",db.filename);
   try{
@@ -78,7 +83,6 @@ const tryOpfsVfs = function(sqlite3){
 
 importScripts('sqlite3.js');
 self.sqlite3InitModule()
-  .then((EmscriptenModule)=>EmscriptenModule.sqlite3.asyncPostInit())
   .then((sqlite3)=>tryOpfsVfs(sqlite3))
   .catch((e)=>{
     console.error("Error initializing module:",e);
index 9607e3f3795f1aeb484ac0639e17ce955423c9a4..5b3d6189db43746dbbe67c74750766abf6181b6c 100644 (file)
@@ -33,7 +33,7 @@
     return v1>=(v2-factor) && v1<=(v2+factor);
   };
 
-  let sqlite3;
+  let sqlite3 /* loaded later */;
   
   const testBasicSanity = function(db,sqlite3){
     const capi = sqlite3.capi;
     T.mustThrow(()=>db.exec("select * from foo.bar"));
   };
 
-  const testIntPtr = function(db,S,Module){
+  const testIntPtr = function(db,S){
     const w = S.capi.wasm;
     const stack = w.scopedAllocPush();
     let ptrInt;
         n,"entries totaling approximately",sz,"bytes.");
   };
 
-  const runTests = function(Module){
-    //log("Module",Module);
-    sqlite3 = Module.sqlite3;
+  const runTests = function(_sqlite3){
+    sqlite3 = _sqlite3;
     const capi = sqlite3.capi,
           oo = sqlite3.oo1,
           wasm = capi.wasm;
       ].forEach((f)=>{
         const t = T.counter, n = performance.now();
         logHtml(banner1,"Running",f.name+"()...");
-        f(db, sqlite3, Module);
+        f(db, sqlite3);
         logHtml(banner2,f.name+"():",T.counter - t,'tests in',(performance.now() - n),"ms");
       });
     }finally{
     log('capi.wasm.exports',capi.wasm.exports);
   };
 
-  self.sqlite3TestModule.initSqlite3().then(function(theModule){
-    self._MODULE = theModule /* this is only to facilitate testing from the console */
-    runTests(theModule);
+  self.sqlite3TestModule.initSqlite3().then((S)=>{
+    runTests(S);
   });
 })();
index daa074513d5a94941e005a4a2989a5a7021d00f4..20ddcdb9e295e78d25e114fdab57280c595b96aa 100644 (file)
@@ -55,9 +55,9 @@ sqlite3-wasmfs.jsflags += -sUSE_CLOSURE_COMPILER=0
 sqlite3-wasmfs.jsflags += -sIMPORTED_MEMORY
 #sqlite3-wasmfs.jsflags += -sINITIAL_MEMORY=13107200
 #sqlite3-wasmfs.jsflags += -sTOTAL_STACK=4194304
-sqlite3-wasmfs.jsflags += -sEXPORT_NAME=sqlite3InitModule
+sqlite3-wasmfs.jsflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
 sqlite3-wasmfs.jsflags += -sGLOBAL_BASE=4096 # HYPOTHETICALLY keep func table indexes from overlapping w/ heap addr.
-sqlite3-wasmfs.jsflags += --post-js=$(post-js.js)
+sqlite3-wasmfs.jsflags += $(sqlite3.js.flags.--post-js)
 #sqlite3-wasmfs.jsflags += -sFILESYSTEM=0 # only for experimentation. sqlite3 needs the FS API
 #                                Perhaps the wasmfs build doesn't?
 #sqlite3-wasmfs.jsflags += -sABORTING_MALLOC
@@ -80,7 +80,7 @@ sqlite3-wasmfs.jsflags += -sWASM_BIGINT=$(emcc_enable_bigint)
 
 $(sqlite3-wasmfs.js): $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasm.c) $(sqlite3-wasmfs.extra.c) \
     EXPORTED_FUNCTIONS.api $(sqlite3-wasm.js) $(MAKEFILE) $(MAKEFILE.wasmfs) \
-    $(post-js.js)
+    $(post-jses.deps)
        @echo "Building $@ ..."
        $(emcc.bin) -o $@ $(emcc_opt) $(emcc.flags) \
       $(sqlite3-wasmfs.cflags) $(sqlite3-wasmfs.jsflags) $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasmfs.extra.c)
index f00fee8550d06f834a011d0bab0127431f5f32b1..e54e9ea56dce9bb0d5767fe8f67b8931d714154f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Wasm:\sexpose\ssqlite3_exec()\sand\suse\sit\sto\ssimplify\sthe\sdb-reset\slogic\sin\sbatch-runner.js\sa\sbit.
-D 2022-09-28T18:10:50.148
+C Rework\sthe\sEmscripten-emitted\smodule\sloader/init\sfunction\ssuch\sthat\sit\spasses\son\sthe\ssqlite3\smodule,\sinstead\sof\sthe\sEmscripten\smodule,\sto\sthe\sfirst\sthen()\sof\ssqlite3InitModule()'s\sreturned\sPromise.\sThis\seliminates\sany\sneed\sto\smention\sthe\sEmscripten\smodule\sobject\sin\sclient-side\scode\sunless\sthey\swant\sto\sconfigure\sit\sin\sadvance\sfor\sloading-status\sreports.
+D 2022-09-29T13:17:50.536
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -474,32 +474,33 @@ F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
 F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
 F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
 F ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle 0e88c8cfc3719e4b7e74980d9da664c709e68acf863e48386cda376edfd3bfb0
-F ext/wasm/GNUmakefile 86ee7562063275779b108957db5bc7fdb18df4f6c506abbe28132b4fb071988e
+F ext/wasm/GNUmakefile 7cf6c4346edd6656d5b9f258049ca56af7d7b8b10da3d21edcc3717015bc6511
 F ext/wasm/README.md e1ee1e7c321c6a250bf78a84ca6f5882890a237a450ba5a0649c7a8399194c52
 F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 77a5ee8bd209b5e75dd0e822bc3f6e7319dc9b36431463d4175c775170f92126
 F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
 F ext/wasm/api/README.md f54102d74cfde01ebe242fa1411e126a9cda8f19b3ac378afd1103b21abfad05
+F ext/wasm/api/extern-post-js.js d29d5f615c887b356ff80a77a09a346339644c66d4fea79230d8378e2e2f4914
 F ext/wasm/api/post-js-footer.js b64319261d920211b8700004d08b956a6c285f3b0bba81456260a713ed04900c
 F ext/wasm/api/post-js-header.js 2e5c886398013ba2af88028ecbced1e4b22dc96a86467f1ecc5ba9e64ef90a8b
 F ext/wasm/api/sqlite3-api-cleanup.js 4bd28e61216690b12d6f77bfce71b011995c29496397cfa77e08198eb8d19aeb
 F ext/wasm/api/sqlite3-api-glue.js 3b164f0ef690a838da8613a2aaec4fc49d29ad5e8fe39c8cdc0f5281f08f9d0b
 F ext/wasm/api/sqlite3-api-oo1.js 97a786b366fcac442e1557c3eedef3afa96877411bd6239094d4db5fd5b3c353
 F ext/wasm/api/sqlite3-api-opfs.js af65e056b9f5bc6182499f7e7767e3d01abc3772a62c8abbcc04e4c7bb0affc6
-F ext/wasm/api/sqlite3-api-prologue.js ed850804d5cd7a976717e524d719b1f9743405226a879a5170f259dbee31d13c
+F ext/wasm/api/sqlite3-api-prologue.js 47245a1bb279f54c7c1d6b32f13222536ce0196ced9c2bda2d12a0b4ef8c136d
 F ext/wasm/api/sqlite3-api-worker1.js d5d5b7fac4c4731c38c7e03f4f404b2a95c388a2a1d8bcf361caada572f107e0
 F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
 F ext/wasm/api/sqlite3-wasm.c b756b9c1fee9d0598f715e6df6bf089b750da24aa91bb7ef9277a037d81e7612
 F ext/wasm/batch-runner.html c363032aba7a525920f61f8be112a29459f73f07e46f0ba3b7730081a617826e
-F ext/wasm/batch-runner.js 0d5517be51290098bf4a92754e25c552b7c1dc73bb3f2e2b18f16b1008df060f
-F ext/wasm/common/SqliteTestUtil.js c997c12188c97109f344701a58dd627b9c0f98f32cc6a88413f6171f2191531c
+F ext/wasm/batch-runner.js a94dd0005b34cb4e654a799fbe6357a66070510bbbe5d116cf1a8d4f9901bd80
+F ext/wasm/common/SqliteTestUtil.js 647bf014bd30bdd870a7e9001e251d12fc1c9ec9ce176a1004b838a4b33c5c05
 F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
 F ext/wasm/common/testing.css 3a5143699c2b73a85b962271e1a9b3241b30d90e30d895e4f55665e648572962
 F ext/wasm/common/whwasmutil.js 20291bbf4955358d0b5ead58db4c575be269b4976e39c43a93331547e3b86363
 F ext/wasm/demo-123-worker.html e419b66495d209b5211ec64903b4cfb3ca7df20d652b41fcd28bf018a773234f
 F ext/wasm/demo-123.html aa281d33b7eefa755f3122b7b5a18f39a42dc5fb69c8879171bf14b4c37c4ec4
-F ext/wasm/demo-123.js d8490189cd2f7a47940d42174fe562d8b6a5cbab521eec4c602dead055b12414
+F ext/wasm/demo-123.js 35de7c544b9190759fcbf4ca125a674d3f6db03614b9a2175efaa1fbf363ef6f
 F ext/wasm/demo-kvvfs1.html 7d4f28873de67f51ac18c584b7d920825139866a96049a49c424d6f5a0ea5e7f
-F ext/wasm/demo-kvvfs1.js e884ea35022d772c0d1dd884b40011413696438394f605c6cd4808cfb1642a4a
+F ext/wasm/demo-kvvfs1.js d1126c3b08099dc1279f353b298ee90f6d374ab6ca2b4cf412031fc992e51d35
 F ext/wasm/fiddle.make fd56fa21bada6ecbf860686a9a789ebda7cc3d9b60835927000fcb00246ea50f
 F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
 F ext/wasm/fiddle/fiddle-worker.js 425b75b1debe1108c10f1373fdd75994a18adbdc0a593e7ff0ecd91cc6498e89
@@ -511,26 +512,26 @@ F ext/wasm/jaccwabyt/jaccwabyt.md 9aa6951b529a8b29f578ec8f0355713c39584c92cf1708
 F ext/wasm/jaccwabyt/jaccwabyt_test.c 39e4b865a33548f943e2eb9dd0dc8d619a80de05d5300668e9960fff30d0d36f
 F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19
 F ext/wasm/scratchpad-wasmfs-main.html 20cf6f1a8f368e70d01e8c17200e3eaa90f1c8e1029186d836d14b83845fbe06
-F ext/wasm/scratchpad-wasmfs-main.js e713a3da53da9194a1cc35d060f0ee5cb0abe907dcbc864d3d6f76fa6eafedf1
-F ext/wasm/speedtest1-wasmfs.html 852504ccf9d095c8f57d4f4f9cc2f912b3b432e300c6b5ed8d6234a37eeb86a6
+F ext/wasm/scratchpad-wasmfs-main.js 1aa32c1035cf1440a226a28fefcbb5762fbbcb020ccbe5895f8736d701695c63
+F ext/wasm/speedtest1-wasmfs.html bc28eb29b69a73864b8d7aae428448f8b7e1de81d8bfb9bba99541322054dbd0
 F ext/wasm/speedtest1-worker.html 3780a29a6d0467dde34b61bf50a1b2e1a12a4e8498f4835b1293e79a3edcd675
-F ext/wasm/speedtest1-worker.js 65f50314cc56ebc03f7b5ea774e7d8386600e8a6f27cca02cb05e7e2eb7a0153
-F ext/wasm/speedtest1.html 4f4e26b634bb3288f2cad8cf4d458076b33d8bd0f3fd56e089a17bed32df6287
+F ext/wasm/speedtest1-worker.js a9e3d052dd1d8016d6e9a641e596e6d99aec04ef8995d7ee9a85a9964eed771a
+F ext/wasm/speedtest1.html e4cb5d722b494104fc1249e7c008ca018f820a784833c51004c958c71038c80f
 F ext/wasm/split-speedtest1-script.sh a3e271938d4d14ee49105eb05567c6a69ba4c1f1293583ad5af0cd3a3779e205 x
 F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d82675bd63d9c2d97a15f0
 F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
 F ext/wasm/sqlite3-opfs-async-proxy.js fe4b8268eea9acaec633ebd1dd3f85dae7c461c5c68985ab1075d9560b1db8e8
 F ext/wasm/sqlite3-worker1-promiser.js cca2b853692e4715b4761c46678f96d80819d4756de557922a815149fb93397e
-F ext/wasm/sqlite3-worker1.js b941db258fd26ae2c7398b640c1ca8d5abac8ec77e54ba5b9526af2297409626
+F ext/wasm/sqlite3-worker1.js 5266ebc4d709fe23d2d076ae44e6085fbc32b82f26ef514b947312f36b1206a9
 F ext/wasm/test-opfs-vfs.html eb69dda21eb414b8f5e3f7c1cc0f774103cc9c0f87b2d28a33419e778abfbab5
-F ext/wasm/test-opfs-vfs.js ba4c20085000b9f6195f62cf3abeeb0ae4703c3b34bc654afa806014a4f09e96
+F ext/wasm/test-opfs-vfs.js a59ff9210b17d46b0c6fbf6a0ba60143c033327865f2e556e14f06280cef62ac
 F ext/wasm/testing-worker1-promiser.html 6eaec6e04a56cf24cf4fa8ef49d78ce8905dde1354235c9125dca6885f7ce893
 F ext/wasm/testing-worker1-promiser.js ee1ac4950720c07541e791b7f35bdf420e8ab81a74049cc65394371b0c53c480
 F ext/wasm/testing1.html 50575755e43232dbe4c2f97c9086b3118eb91ec2ee1fae931e6d7669fb17fcae
-F ext/wasm/testing1.js 20b37766d29815180e2e932bfc6132b649403ece1f1bf612a4712db131287970
+F ext/wasm/testing1.js 06b9a439ada636c5478c581c86b2b968f799e0468eae54dc5a4565dfd7afbb88
 F ext/wasm/testing2.html a66951c38137ff1d687df79466351f3c734fa9c6d9cce71d3cf97c291b2167e3
 F ext/wasm/testing2.js 34737da985c4cbd4812b2e7f200942662cae991c5a58ffa5d0350be089d0d410
-F ext/wasm/wasmfs.make fb4d0b4a6596ec2ed7815508a43b77bd7d14d3910ac387eb795643e33f5a3652
+F ext/wasm/wasmfs.make d53146b062386b01f7b0b0d498335b33c11548cf3d1706cff472d6cbd42a9c95
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
@@ -2026,8 +2027,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3bd1bc240676e56da87fc49f3c67a1edc4fafcf2a2416298d19ae4f80b676a72
-R d0708515df8e5293032059e504723b7d
+P 2e2821f782511b9d2274a89a5a922582aba18c7e9dc7ce01080e713942a56d7d
+R 4702b024c44aa8b0e10da8a3cb6edeca
 U stephan
-Z 774d17030f6b3ac9dea357109e6b49c9
+Z 43dbf13bcecc8e2f4da632a6ad6ef70c
 # Remove this line to create a well-formed Fossil manifest.
index 5f8b8b779217bdaa83e26c8fd37d328060b12ed1..5e51671decafbf88ff7e7220542775a0115d4336 100644 (file)
@@ -1 +1 @@
-2e2821f782511b9d2274a89a5a922582aba18c7e9dc7ce01080e713942a56d7d
\ No newline at end of file
+0dbaa0e2b5abf5c23e2039ec90a3055ebb3c063aaf4e556c42546defe6fbb86d
\ No newline at end of file