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);
|
self.WhWasmUtilInstaller(wasm);
|
||||||
delete self.WhWasmUtilInstaller;
|
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
|
Find a mapping for SQLITE_WASM_DEALLOC, which the API
|
||||||
guarantees is a WASM pointer to the same underlying function as
|
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];
|
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);
|
const __rcMap = Object.create(null);
|
||||||
for(const t of ['resultCodes']){
|
for(const t of ['resultCodes']){
|
||||||
for(const e of Object.entries(wasm.ctype[t])){
|
for(const e of Object.entries(wasm.ctype[t])){
|
||||||
|
@ -463,7 +463,9 @@ const char * sqlite3_wasm_enum_json(void){
|
|||||||
DefGroup(blobFinalizers) {
|
DefGroup(blobFinalizers) {
|
||||||
/* SQLITE_STATIC/TRANSIENT need to be handled explicitly as
|
/* SQLITE_STATIC/TRANSIENT need to be handled explicitly as
|
||||||
** integers to avoid casting-related warnings. */
|
** 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;
|
||||||
|
|
||||||
DefGroup(changeset){
|
DefGroup(changeset){
|
||||||
|
@ -1 +1 @@
|
|||||||
2ffbf0c73c5a0f08717093cfaac99c4aedee506ec7b5a9a62c92168a2bcadc14
|
688c5c13d156f987b895df1d5a5b770616b0d9caec4726e03ba122eb8539e7b2
|
Reference in New Issue
Block a user