1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-27 20:41:58 +03:00

Minor JS API tweaks prompted by documenting them.

FossilOrigin-Name: a82e6faaa642b09d241232c4daa67134d4dfa24bf3ca3725740346ca5269b381
This commit is contained in:
stephan
2022-10-03 08:21:06 +00:00
parent 510a9d1c64
commit ef9cd12ec4
8 changed files with 76 additions and 65 deletions

View File

@ -50,7 +50,7 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
'flexible-string'-type arguments */ 'flexible-string'-type arguments */
const xString = wasm.xWrap.argAdapter('string'); const xString = wasm.xWrap.argAdapter('string');
wasm.xWrap.argAdapter( wasm.xWrap.argAdapter(
'flexible-string', (v)=>xString(util.arrayToString(v)) 'flexible-string', (v)=>xString(util.flexibleString(v))
); );
} }
@ -216,8 +216,8 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
"*"/*xInverse*/, "*"/*xDestroy*/] "*"/*xInverse*/, "*"/*xDestroy*/]
); );
const __setUdfResult = function(pCtx, val){ const __udfSetResult = function(pCtx, val){
//console.warn("setUdfResult",typeof val, val); //console.warn("udfSetResult",typeof val, val);
switch(typeof val) { switch(typeof val) {
case 'boolean': case 'boolean':
capi.sqlite3_result_int(pCtx, val ? 1 : 0); capi.sqlite3_result_int(pCtx, val ? 1 : 0);
@ -259,9 +259,9 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
default: default:
toss3("Don't not how to handle this UDF result value:",(typeof val), val); toss3("Don't not how to handle this UDF result value:",(typeof val), val);
}; };
}/*__setUdfResult()*/; }/*__udfSetResult()*/;
const __convertUdfArgs = function(argc, pArgv){ const __udfConvertArgs = function(argc, pArgv){
let i, pVal, valType, arg; let i, pVal, valType, arg;
const tgt = []; const tgt = [];
for(i = 0; i < argc; ++i){ for(i = 0; i < argc; ++i){
@ -307,9 +307,9 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
tgt.push(arg); tgt.push(arg);
} }
return tgt; return tgt;
}/*__convertUdfArgs()*/; }/*__udfConvertArgs()*/;
const __setUdfError = (pCtx, e)=>{ const __udfSetError = (pCtx, e)=>{
if(e instanceof sqlite3.WasmAllocError){ if(e instanceof sqlite3.WasmAllocError){
capi.sqlite3_result_error_nomem(pCtx); capi.sqlite3_result_error_nomem(pCtx);
}else{ }else{
@ -319,25 +319,25 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
const __xFunc = function(callback){ const __xFunc = function(callback){
return function(pCtx, argc, pArgv){ return function(pCtx, argc, pArgv){
try{ __setUdfResult(pCtx, callback(pCtx, ...__convertUdfArgs(argc, pArgv))) } try{ __udfSetResult(pCtx, callback(pCtx, ...__udfConvertArgs(argc, pArgv))) }
catch(e){ catch(e){
//console.error('xFunc() caught:',e); //console.error('xFunc() caught:',e);
__setUdfError(pCtx, e); __udfSetError(pCtx, e);
} }
}; };
}; };
const __xInverseAndStep = function(callback){ const __xInverseAndStep = function(callback){
return function(pCtx, argc, pArgv){ return function(pCtx, argc, pArgv){
try{ callback(pCtx, ...__convertUdfArgs(argc, pArgv)) } try{ callback(pCtx, ...__udfConvertArgs(argc, pArgv)) }
catch(e){ __setUdfError(pCtx, e) } catch(e){ __udfSetError(pCtx, e) }
}; };
}; };
const __xFinalAndValue = function(callback){ const __xFinalAndValue = function(callback){
return function(pCtx){ return function(pCtx){
try{ __setUdfResult(pCtx, callback(pCtx)) } try{ __udfSetResult(pCtx, callback(pCtx)) }
catch(e){ __setUdfError(pCtx, e) } catch(e){ __udfSetError(pCtx, e) }
}; };
}; };
@ -446,7 +446,7 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
}; };
/** /**
A helper for UDFs implemented in JS and bound to WASM by the A helper for UDFs implemented in JS and bound to WASM by the
client. Given a JS value, setUdfResult(pCtx,X) calls one of the client. Given a JS value, udfSetResult(pCtx,X) calls one of the
sqlite3_result_xyz(pCtx,...) routines, depending on X's data sqlite3_result_xyz(pCtx,...) routines, depending on X's data
type: type:
@ -458,9 +458,9 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
Anything else triggers sqlite3_result_error(). Anything else triggers sqlite3_result_error().
*/ */
capi.sqlite3_create_function_v2.setUdfResult = capi.sqlite3_create_function_v2.udfSetResult =
capi.sqlite3_create_function.setUdfResult = capi.sqlite3_create_function.udfSetResult =
capi.sqlite3_create_window_function.setUdfResult = __setUdfResult; capi.sqlite3_create_window_function.udfSetResult = __udfSetResult;
/** /**
A helper for UDFs implemented in JS and bound to WASM by the A helper for UDFs implemented in JS and bound to WASM by the
@ -480,9 +480,9 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
The conversion will throw only on allocation error or an internal The conversion will throw only on allocation error or an internal
error. error.
*/ */
capi.sqlite3_create_function_v2.convertUdfArgs = capi.sqlite3_create_function_v2.udfConvertArgs =
capi.sqlite3_create_function.convertUdfArgs = capi.sqlite3_create_function.udfConvertArgs =
capi.sqlite3_create_window_function.convertUdfArgs = __convertUdfArgs; capi.sqlite3_create_window_function.udfConvertArgs = __udfConvertArgs;
/** /**
A helper for UDFs implemented in JS and bound to WASM by the A helper for UDFs implemented in JS and bound to WASM by the
@ -492,9 +492,9 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
depending on whether the 2nd argument is a depending on whether the 2nd argument is a
sqlite3.WasmAllocError object or not. sqlite3.WasmAllocError object or not.
*/ */
capi.sqlite3_create_function_v2.setUdfError = capi.sqlite3_create_function_v2.udfSetError =
capi.sqlite3_create_function.setUdfError = capi.sqlite3_create_function.udfSetError =
capi.sqlite3_create_window_function.setUdfError = __setUdfError; capi.sqlite3_create_window_function.udfSetError = __udfSetError;
}/*sqlite3_create_function_v2() and sqlite3_create_window_function() proxies*/; }/*sqlite3_create_function_v2() and sqlite3_create_window_function() proxies*/;

View File

@ -260,10 +260,10 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
/** /**
If v is-a Array, its join('') result is returned. If If v is-a Array, its join('') result is returned. If
isSQLableTypedArray(v) then typedArrayToString(v) is isSQLableTypedArray(v) is true then typedArrayToString(v) is
returned. Else v is returned as-is. returned. Else v is returned as-is.
*/ */
const arrayToString = function(v){ const flexibleString = function(v){
if(isSQLableTypedArray(v)) return typedArrayToString(v); if(isSQLableTypedArray(v)) return typedArrayToString(v);
else if(Array.isArray(v)) return v.join(''); else if(Array.isArray(v)) return v.join('');
return v; return v;
@ -516,7 +516,7 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
removed. removed.
*/ */
util:{ util:{
affirmBindableTypedArray, arrayToString, affirmBindableTypedArray, flexibleString,
bigIntFits32, bigIntFits64, bigIntFitsDouble, bigIntFits32, bigIntFits64, bigIntFitsDouble,
isBindableTypedArray, isBindableTypedArray,
isInt32, isSQLableTypedArray, isTypedArray, isInt32, isSQLableTypedArray, isTypedArray,

View File

@ -615,9 +615,9 @@ const char * sqlite3_wasm_enum_json(void){
StructBinder { StructBinder {
M(iVersion,"i"); M(iVersion,"i");
M(xClose,"i(p)"); M(xClose,"i(p)");
M(xRead,"i(ppij)"); M(xRead,"i(ppiI)");
M(xWrite,"i(ppij)"); M(xWrite,"i(ppiI)");
M(xTruncate,"i(pj)"); M(xTruncate,"i(pI)");
M(xSync,"i(pi)"); M(xSync,"i(pi)");
M(xFileSize,"i(pp)"); M(xFileSize,"i(pp)");
M(xLock,"i(pi)"); M(xLock,"i(pi)");
@ -630,8 +630,8 @@ const char * sqlite3_wasm_enum_json(void){
M(xShmLock,"i(piii)"); M(xShmLock,"i(piii)");
M(xShmBarrier,"v(p)"); M(xShmBarrier,"v(p)");
M(xShmUnmap,"i(pi)"); M(xShmUnmap,"i(pi)");
M(xFetch,"i(pjip)"); M(xFetch,"i(pIip)");
M(xUnfetch,"i(pjp)"); M(xUnfetch,"i(pIp)");
} _StructBinder; } _StructBinder;
#undef CurrentStruct #undef CurrentStruct

View File

@ -377,17 +377,19 @@ self.WhWasmUtilInstaller = function(target){
- Emscripten: `x...`, where the first x is a letter representing - Emscripten: `x...`, where the first x is a letter representing
the result type and subsequent letters represent the argument the result type and subsequent letters represent the argument
types. See below. types. Functions with no arguments have only a single
letter. See below.
- Jaccwabyt: `x(...)` where `x` is the letter representing the - Jaccwabyt: `x(...)` where `x` is the letter representing the
result type and letters in the parens (if any) represent the result type and letters in the parens (if any) represent the
argument types. See below. argument types. Functions with no arguments use `x()`. See
below.
Supported letters: Supported letters:
- `i` = int32 - `i` = int32
- `p` = int32 ("pointer") - `p` = int32 ("pointer")
- `j` = int64 - `j` or `I` = int64
- `f` = float32 - `f` = float32
- `d` = float64 - `d` = float64
- `v` = void, only legal for use as the result type - `v` = void, only legal for use as the result type
@ -402,6 +404,9 @@ self.WhWasmUtilInstaller = function(target){
Sidebar: this code is developed together with Jaccwabyt, thus the Sidebar: this code is developed together with Jaccwabyt, thus the
support for its signature format. support for its signature format.
The arguments may be supplied in either order: (func,sig) or
(sig,func).
*/ */
target.jsFuncToWasm = function f(func, sig){ target.jsFuncToWasm = function f(func, sig){
/** Attribution: adapted up from Emscripten-generated glue code, /** Attribution: adapted up from Emscripten-generated glue code,
@ -410,9 +415,14 @@ self.WhWasmUtilInstaller = function(target){
if(!f._){/*static init...*/ if(!f._){/*static init...*/
f._ = { f._ = {
// Map of signature letters to type IR values // Map of signature letters to type IR values
sigTypes: Object.create(null), sigTypes: Object.assign(Object.create(null),{
i: 'i32', p: 'i32', P: 'i32', s: 'i32',
j: 'i64', I: 'i64', f: 'f32', d: 'f64'
}),
// Map of type IR values to WASM type code values // Map of type IR values to WASM type code values
typeCodes: Object.create(null), typeCodes: Object.assign(Object.create(null),{
f64: 0x7c, f32: 0x7d, i64: 0x7e, i32: 0x7f
}),
/** Encodes n, which must be <2^14 (16384), into target array /** Encodes n, which must be <2^14 (16384), into target array
tgt, as a little-endian value, using the given method tgt, as a little-endian value, using the given method
('push' or 'unshift'). */ ('push' or 'unshift'). */
@ -452,11 +462,12 @@ self.WhWasmUtilInstaller = function(target){
invalid. */ invalid. */
pushSigType: (dest, letter)=>dest.push(f._.typeCodes[f._.letterType(letter)]) pushSigType: (dest, letter)=>dest.push(f._.typeCodes[f._.letterType(letter)])
}; };
f._.sigTypes.i = f._.sigTypes.p = f._.sigTypes.P = f._.sigTypes.s = 'i32';
f._.sigTypes.j = 'i64'; f._.sigTypes.f = 'f32'; f._.sigTypes.d = 'f64';
f._.typeCodes['i32'] = 0x7f; f._.typeCodes['i64'] = 0x7e;
f._.typeCodes['f32'] = 0x7d; f._.typeCodes['f64'] = 0x7c;
}/*static init*/ }/*static init*/
if('string'===typeof func){
const x = sig;
sig = func;
func = x;
}
const sigParams = f._.sigParams(sig); const sigParams = f._.sigParams(sig);
const wasmCode = [0x01/*count: 1*/, 0x60/*function*/]; const wasmCode = [0x01/*count: 1*/, 0x60/*function*/];
f._.uleb128Encode(wasmCode, 'push', sigParams.length); f._.uleb128Encode(wasmCode, 'push', sigParams.length);

View File

@ -123,7 +123,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
switch(sigLetter(s)){ switch(sigLetter(s)){
case 'i': return 'i32'; case 'i': return 'i32';
case 'p': case 'P': case 's': return ptrIR; case 'p': case 'P': case 's': return ptrIR;
case 'j': return 'i64'; case 'j': case 'I': return 'i64';
case 'f': return 'float'; case 'f': return 'float';
case 'd': return 'double'; case 'd': return 'double';
} }
@ -135,7 +135,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
switch(sigLetter(s)){ switch(sigLetter(s)){
case 'i': return 4; case 'i': return 4;
case 'p': case 'P': case 's': return ptrSizeof; case 'p': case 'P': case 's': return ptrSizeof;
case 'j': return 8; case 'j': case 'I': return 8;
case 'f': return 4 /* C-side floats, not JS-side */; case 'f': return 4 /* C-side floats, not JS-side */;
case 'd': return 8; case 'd': return 8;
} }
@ -168,7 +168,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
break; break;
} }
case 'i': return 'getInt32'; case 'i': return 'getInt32';
case 'j': return affirmBigIntArray() && 'getBigInt64'; case 'j': case 'I': return affirmBigIntArray() && 'getBigInt64';
case 'f': return 'getFloat32'; case 'f': return 'getFloat32';
case 'd': return 'getFloat64'; case 'd': return 'getFloat64';
} }
@ -186,7 +186,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
break; break;
} }
case 'i': return 'setInt32'; case 'i': return 'setInt32';
case 'j': return affirmBigIntArray() && 'setBigInt64'; case 'j': case 'I': return affirmBigIntArray() && 'setBigInt64';
case 'f': return 'setFloat32'; case 'f': return 'setFloat32';
case 'd': return 'setFloat64'; case 'd': return 'setFloat64';
} }
@ -200,7 +200,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
const sigDVSetWrapper = function(s){ const sigDVSetWrapper = function(s){
switch(sigLetter(s)) { switch(sigLetter(s)) {
case 'i': case 'f': case 'd': return Number; case 'i': case 'f': case 'd': return Number;
case 'j': return affirmBigIntArray() && BigInt; case 'j': case 'I': return affirmBigIntArray() && BigInt;
case 'p': case 'P': case 's': case 'p': case 'P': case 's':
switch(ptrSizeof){ switch(ptrSizeof){
case 4: return Number; case 4: return Number;
@ -361,7 +361,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
framework's native format or in Emscripten format. framework's native format or in Emscripten format.
*/ */
const __memberSignature = function f(obj,memberName,emscriptenFormat=false){ const __memberSignature = function f(obj,memberName,emscriptenFormat=false){
if(!f._) f._ = (x)=>x.replace(/[^vipPsjrd]/g,'').replace(/[pPs]/g,'i'); if(!f._) f._ = (x)=>x.replace(/[^viIpPsjrd]/g,'').replace(/[pPs]/g,'i');
const m = __lookupMember(obj.structInfo, memberName, true); const m = __lookupMember(obj.structInfo, memberName, true);
return emscriptenFormat ? f._(m.signature) : m.signature; return emscriptenFormat ? f._(m.signature) : m.signature;
}; };
@ -571,7 +571,7 @@ self.Jaccwabyt = function StructBinderFactory(config){
direct reuse in each accessor function. */ direct reuse in each accessor function. */
f._ = {getters: {}, setters: {}, sw:{}}; f._ = {getters: {}, setters: {}, sw:{}};
const a = ['i','p','P','s','f','d','v()']; const a = ['i','p','P','s','f','d','v()'];
if(bigIntEnabled) a.push('j'); if(bigIntEnabled) a.push('j','I');
a.forEach(function(v){ a.forEach(function(v){
//const ir = sigIR(v); //const ir = sigIR(v);
f._.getters[v] = sigDVGetter(v) /* DataView[MethodName] values for GETTERS */; f._.getters[v] = sigDVGetter(v) /* DataView[MethodName] values for GETTERS */;
@ -579,8 +579,8 @@ self.Jaccwabyt = function StructBinderFactory(config){
f._.sw[v] = sigDVSetWrapper(v) /* BigInt or Number ctor to wrap around values f._.sw[v] = sigDVSetWrapper(v) /* BigInt or Number ctor to wrap around values
for conversion */; for conversion */;
}); });
const rxSig1 = /^[ipPsjfd]$/, const rxSig1 = /^[iIpPsjfd]$/,
rxSig2 = /^[vipPsjfd]\([ipPsjfd]*\)$/; rxSig2 = /^[viIpPsjfd]\([iIpPsjfd]*\)$/;
f.sigCheck = function(obj, name, key,sig){ f.sigCheck = function(obj, name, key,sig){
if(Object.prototype.hasOwnProperty.call(obj, key)){ if(Object.prototype.hasOwnProperty.call(obj, key)){
toss(obj.structName,'already has a property named',key+'.'); toss(obj.structName,'already has a property named',key+'.');

View File

@ -275,10 +275,10 @@ supported letters are:
- **`v`** = `void` (only used as return type for function pointer members) - **`v`** = `void` (only used as return type for function pointer members)
- **`i`** = `int32` (4 bytes) - **`i`** = `int32` (4 bytes)
- **`j`** = `int64` (8 bytes) is only really usable if this code is built - **`j`** or **`I`** = `int64` (8 bytes) is only really usable if this
with BigInt support (e.g. using the Emscripten `-sWASM_BIGINT` build code is built with BigInt support (e.g. using the Emscripten
flag). Without that, this API may throw when encountering the `j` `-sWASM_BIGINT` build flag). Without that, this API may throw when
signature entry. encountering this signature entry.
- **`f`** = `float` (4 bytes) - **`f`** = `float` (4 bytes)
- **`d`** = `double` (8 bytes) - **`d`** = `double` (8 bytes)
- **`p`** = `int32` (but see below!) - **`p`** = `int32` (but see below!)

View File

@ -1,5 +1,5 @@
C More\scleanups\sin\sthe\sUDF\sargument\sand\sresult\shandling,\sin\sparticular\sint64.\sConsolidate\ssome\sduplicate\sint64/bigint\srange\schecking\scode.\sExpose\sthe\sUDF\slow-level\sutilities\s(arg/result\sconversion)\sto\sclient\scode.\sAdd\sthe\ssqlite3_context\spointer\sto\sthe\sJS-side\sUDF\swrappers\sfor\sAPI\sconsistency. C Minor\sJS\sAPI\stweaks\sprompted\sby\sdocumenting\sthem.
D 2022-10-02T22:50:04.828 D 2022-10-03T08:21:06.951
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -485,19 +485,19 @@ F ext/wasm/api/post-js-footer.js b64319261d920211b8700004d08b956a6c285f3b0bba814
F ext/wasm/api/post-js-header.js 2e5c886398013ba2af88028ecbced1e4b22dc96a86467f1ecc5ba9e64ef90a8b F ext/wasm/api/post-js-header.js 2e5c886398013ba2af88028ecbced1e4b22dc96a86467f1ecc5ba9e64ef90a8b
F ext/wasm/api/pre-js.js 2db711eb637991b383fc6b5c0f3df65ec48a7201e5730e304beba8de2d3f9b0b F ext/wasm/api/pre-js.js 2db711eb637991b383fc6b5c0f3df65ec48a7201e5730e304beba8de2d3f9b0b
F ext/wasm/api/sqlite3-api-cleanup.js 5d22d1d3818ecacb23bfa223d5970cd0617d8cdbb48c8bc4bbd463f05b021a99 F ext/wasm/api/sqlite3-api-cleanup.js 5d22d1d3818ecacb23bfa223d5970cd0617d8cdbb48c8bc4bbd463f05b021a99
F ext/wasm/api/sqlite3-api-glue.js b962bad752b62366651dae26c0b969d297f81e17879685025fb12130786509cb F ext/wasm/api/sqlite3-api-glue.js df974b8a8374ec5f0e25b6a891401f07804471008a1a655717bb86cf7fc899ff
F ext/wasm/api/sqlite3-api-oo1.js 484f9ea5c7140d07745f4b534a1f6dd67120c65ef34abcf7cdb3a388d73f5ef4 F ext/wasm/api/sqlite3-api-oo1.js 484f9ea5c7140d07745f4b534a1f6dd67120c65ef34abcf7cdb3a388d73f5ef4
F ext/wasm/api/sqlite3-api-opfs.js 1b097808b7b081b0f0700cf97d49ef19760e401706168edff9cd45cf9169f541 F ext/wasm/api/sqlite3-api-opfs.js 1b097808b7b081b0f0700cf97d49ef19760e401706168edff9cd45cf9169f541
F ext/wasm/api/sqlite3-api-prologue.js bf270c17e759814decf57f6dd29fee9b5e44dd89a798a1ba9ba1e34d6f76ceaf F ext/wasm/api/sqlite3-api-prologue.js b827e2353799b54fffaa9577f51ebf08b8dedc58dcabe344c73be977235da227
F ext/wasm/api/sqlite3-api-worker1.js 7f4f46cb6b512a48572d7567233896e6a9c46570c44bdc3d13419730c7c221c8 F ext/wasm/api/sqlite3-api-worker1.js 7f4f46cb6b512a48572d7567233896e6a9c46570c44bdc3d13419730c7c221c8
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9 F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
F ext/wasm/api/sqlite3-wasm.c 2a0f9e4bf1b141a787918951360601128d6a0a190a31a8e5cfe237c99fa640c6 F ext/wasm/api/sqlite3-wasm.c 074c1c80b52bd808baf1228adc3336b3aeb2649579d041fc199ead747b5892aa
F ext/wasm/batch-runner.html c363032aba7a525920f61f8be112a29459f73f07e46f0ba3b7730081a617826e F ext/wasm/batch-runner.html c363032aba7a525920f61f8be112a29459f73f07e46f0ba3b7730081a617826e
F ext/wasm/batch-runner.js ce92650a6681586c89bef26ceae96674a55ca5a9727815202ca62e1a00ff5015 F ext/wasm/batch-runner.js ce92650a6681586c89bef26ceae96674a55ca5a9727815202ca62e1a00ff5015
F ext/wasm/common/SqliteTestUtil.js 647bf014bd30bdd870a7e9001e251d12fc1c9ec9ce176a1004b838a4b33c5c05 F ext/wasm/common/SqliteTestUtil.js 647bf014bd30bdd870a7e9001e251d12fc1c9ec9ce176a1004b838a4b33c5c05
F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
F ext/wasm/common/testing.css 3a5143699c2b73a85b962271e1a9b3241b30d90e30d895e4f55665e648572962 F ext/wasm/common/testing.css 3a5143699c2b73a85b962271e1a9b3241b30d90e30d895e4f55665e648572962
F ext/wasm/common/whwasmutil.js 427eb8b695bd5f38497601a6bda933e83d1a5900b75f5f1af8dbb381898d2ee4 F ext/wasm/common/whwasmutil.js 0ea155094dc9b18ee97a37b7b26e0601fee4822f5f1d2f5853a57542b45598d9
F ext/wasm/demo-123-worker.html e419b66495d209b5211ec64903b4cfb3ca7df20d652b41fcd28bf018a773234f F ext/wasm/demo-123-worker.html e419b66495d209b5211ec64903b4cfb3ca7df20d652b41fcd28bf018a773234f
F ext/wasm/demo-123.html aa281d33b7eefa755f3122b7b5a18f39a42dc5fb69c8879171bf14b4c37c4ec4 F ext/wasm/demo-123.html aa281d33b7eefa755f3122b7b5a18f39a42dc5fb69c8879171bf14b4c37c4ec4
F ext/wasm/demo-123.js 9fbc5cd3af842d361e9f8353ae4af9f471c2b2517e55446474406620485b9ee6 F ext/wasm/demo-123.js 9fbc5cd3af842d361e9f8353ae4af9f471c2b2517e55446474406620485b9ee6
@ -509,8 +509,8 @@ F ext/wasm/fiddle/fiddle-worker.js ebf6e95fe031738cd9f79d1ccdf6d80640a2884a43f70
F ext/wasm/fiddle/fiddle.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2 F ext/wasm/fiddle/fiddle.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2
F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715 F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715
F ext/wasm/index.html 63b370619e4f849ac76f1baed435c05edc29dbb6795bc7c1c935561ff667dd27 F ext/wasm/index.html 63b370619e4f849ac76f1baed435c05edc29dbb6795bc7c1c935561ff667dd27
F ext/wasm/jaccwabyt/jaccwabyt.js 0d7f32817456a0f3937fcfd934afeb32154ca33580ab264dab6c285e6dbbd215 F ext/wasm/jaccwabyt/jaccwabyt.js db2c75f12426760eb921c281eef7fd139f23cd61d16d8638689ee162e90ef2f6
F ext/wasm/jaccwabyt/jaccwabyt.md 9aa6951b529a8b29f578ec8f0355713c39584c92cf1708f63ba0cf917cb5b68e F ext/wasm/jaccwabyt/jaccwabyt.md 48088122e9d23b1b385bb7bcf48a2d83f926b470d6928b6b3f9b41c2de94830c
F ext/wasm/jaccwabyt/jaccwabyt_test.c 39e4b865a33548f943e2eb9dd0dc8d619a80de05d5300668e9960fff30d0d36f F ext/wasm/jaccwabyt/jaccwabyt_test.c 39e4b865a33548f943e2eb9dd0dc8d619a80de05d5300668e9960fff30d0d36f
F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19 F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19
F ext/wasm/scratchpad-wasmfs-main.html 20cf6f1a8f368e70d01e8c17200e3eaa90f1c8e1029186d836d14b83845fbe06 F ext/wasm/scratchpad-wasmfs-main.html 20cf6f1a8f368e70d01e8c17200e3eaa90f1c8e1029186d836d14b83845fbe06
@ -2029,8 +2029,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P d3bad9347c5423fa7f19ae729461636f1043c99a1f01f168efa10bebefb1cdd1 P 10ab77af952abf09f93f342a9d07a3b133f2c4c0a3588df3390cd3a923cafae4
R 46b070d886b6400d4ed82000c86b9d6e R 12182f4e06ca014e75dafbecebb22765
U stephan U stephan
Z fc77e81a038294d78aff4ec7221b0be3 Z 53ad4d279050a64639e6682eb9a83efd
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
10ab77af952abf09f93f342a9d07a3b133f2c4c0a3588df3390cd3a923cafae4 a82e6faaa642b09d241232c4daa67134d4dfa24bf3ca3725740346ca5269b381