mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
An alternative solution to mapping SQLITE_WASM_DEALLOC to the proper function pointer in JS, to account for a Safari-specific quirk reported in [forum:e5b20e1feb|forum post e5b20e1feb].
FossilOrigin-Name: 688c5c13d156f987b895df1d5a5b770616b0d9caec4726e03ba122eb8539e7b2
This commit is contained in:
@ -24,7 +24,20 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
self.WhWasmUtilInstaller(wasm);
|
||||
delete self.WhWasmUtilInstaller;
|
||||
|
||||
{
|
||||
if(0){
|
||||
/**
|
||||
This block inexplicably fails on Safari, per report at
|
||||
https://sqlite.org/forum/forumpost/e5b20e1feb. In its place,
|
||||
we instead add an unsightly snippet to
|
||||
sqlite3_wasm_enum_json() which emits the SQLITE_WASM_DEALLOC
|
||||
pointer as an integer.
|
||||
|
||||
"The problem" with that approach is that in order to honor
|
||||
sqlite3.config.deallocExportName, we have to have the
|
||||
following loop (or something equivalent). Because we cannot
|
||||
(for Safari) do so, we are currently implicitly hard-coded to
|
||||
using sqlite3.config.deallocExportName==='sqlite3_free'.
|
||||
*/
|
||||
/**
|
||||
Find a mapping for SQLITE_WASM_DEALLOC, which the API
|
||||
guarantees is a WASM pointer to the same underlying function as
|
||||
@ -796,6 +809,14 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
capi[e[0]] = e[1];
|
||||
}
|
||||
}
|
||||
if(wasm.exports[sqlite3.config.deallocExportName]
|
||||
!== wasm.functionEntry(capi.SQLITE_WASM_DEALLOC)){
|
||||
toss("Internal error: sqlite3.wasm.exports["+
|
||||
sqlite3.config.deallocExportName+"]",
|
||||
"is not the same pointer as SQLITE_WASM_DEALLOC.",
|
||||
"These must match in order to accommodate allocator-related",
|
||||
"API guarantees.");
|
||||
}
|
||||
const __rcMap = Object.create(null);
|
||||
for(const t of ['resultCodes']){
|
||||
for(const e of Object.entries(wasm.ctype[t])){
|
||||
|
@ -463,7 +463,9 @@ const char * sqlite3_wasm_enum_json(void){
|
||||
DefGroup(blobFinalizers) {
|
||||
/* SQLITE_STATIC/TRANSIENT need to be handled explicitly as
|
||||
** integers to avoid casting-related warnings. */
|
||||
out("\"SQLITE_STATIC\":0, \"SQLITE_TRANSIENT\":-1");
|
||||
out("\"SQLITE_STATIC\":0, \"SQLITE_TRANSIENT\":-1,");
|
||||
outf("\"SQLITE_WASM_DEALLOC\": %lld",
|
||||
(sqlite3_int64)(sqlite3_free));
|
||||
} _DefGroup;
|
||||
|
||||
DefGroup(changeset){
|
||||
|
@ -1 +1 @@
|
||||
2ffbf0c73c5a0f08717093cfaac99c4aedee506ec7b5a9a62c92168a2bcadc14
|
||||
688c5c13d156f987b895df1d5a5b770616b0d9caec4726e03ba122eb8539e7b2
|
Reference in New Issue
Block a user