1
0
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:
stephan
2023-01-01 12:22:16 +00:00
parent 206db97ddd
commit a347927d60
4 changed files with 2098 additions and 10 deletions

View File

@ -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])){

View File

@ -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){

2079
manifest

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
2ffbf0c73c5a0f08717093cfaac99c4aedee506ec7b5a9a62c92168a2bcadc14
688c5c13d156f987b895df1d5a5b770616b0d9caec4726e03ba122eb8539e7b2