Rework the Emscripten-emitted module loader/init function such that it passes on the sqlite3 module, instead of the Emscripten module, to the first then() of sqlite3InitModule()'s returned Promise. This eliminates any need to mention the Emscripten module object in client-side code unless they want to configure it in advance for loading-status reports.

FossilOrigin-Name: 0dbaa0e2b5abf5c23e2039ec90a3055ebb3c063aaf4e556c42546defe6fbb86d
This commit is contained in:
stephan 2022-09-29 13:17:50 +00:00
parent 4b884bb4c7
commit b94a98607a
17 changed files with 127 additions and 100 deletions

View 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) \

View File

@ -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()");
})();

View 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;

View File

@ -604,11 +604,8 @@
}/*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);
});
})();

View File

@ -230,9 +230,7 @@
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;

View File

@ -256,11 +256,11 @@
// 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);
}

View File

@ -41,10 +41,8 @@
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());
@ -115,9 +113,7 @@
}
};
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);
});
})();

View File

@ -34,11 +34,8 @@
});
};
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{

View File

@ -143,9 +143,7 @@
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>

View File

@ -80,10 +80,7 @@
printErr: logErr,
setStatus: (text)=>mPost('load-status',text)
};
self.sqlite3Speedtest1InitModule(EmscriptenModule).then(function(EModule){
log("Module inited.");
return EModule.sqlite3.asyncPostInit()
.then((sqlite3)=>{
self.sqlite3InitModule(EmscriptenModule).then((sqlite3)=>{
const S = sqlite3;
const vfsUnlink = S.capi.wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]);
App.unlink = function(fname){
@ -97,5 +94,4 @@
mPost('ready',true);
log("Registered VFSes:", ...S.capi.sqlite3_web_vfs_list());
});
});
})();

View File

@ -163,12 +163,7 @@
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>

View File

@ -28,9 +28,7 @@
*/
"use strict";
importScripts('sqlite3.js');
sqlite3InitModule().then((EmscriptenModule)=>{
EmscriptenModule.sqlite3.asyncPostInit().then((sqlite3)=>{
sqlite3InitModule().then((sqlite3)=>{
sqlite3.capi.sqlite3_wasmfs_opfs_dir();
sqlite3.initWorker1API();
});
});

View 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);

View 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;
@ -270,7 +270,7 @@
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;
@ -1011,9 +1011,8 @@
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;
@ -1074,7 +1073,7 @@
].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{
@ -1085,8 +1084,7 @@
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);
});
})();

View 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)

View File

@ -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.

View File

@ -1 +1 @@
2e2821f782511b9d2274a89a5a922582aba18c7e9dc7ce01080e713942a56d7d
0dbaa0e2b5abf5c23e2039ec90a3055ebb3c063aaf4e556c42546defe6fbb86d