aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm/api
diff options
context:
space:
mode:
Diffstat (limited to 'ext/wasm/api')
-rw-r--r--ext/wasm/api/sqlite3-api-glue.js23
-rw-r--r--ext/wasm/api/sqlite3-wasm.c4
2 files changed, 25 insertions, 2 deletions
diff --git a/ext/wasm/api/sqlite3-api-glue.js b/ext/wasm/api/sqlite3-api-glue.js
index 8cb5dff8b..e88694fa3 100644
--- a/ext/wasm/api/sqlite3-api-glue.js
+++ b/ext/wasm/api/sqlite3-api-glue.js
@@ -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])){
diff --git a/ext/wasm/api/sqlite3-wasm.c b/ext/wasm/api/sqlite3-wasm.c
index b39e252b1..981fad92b 100644
--- a/ext/wasm/api/sqlite3-wasm.c
+++ b/ext/wasm/api/sqlite3-wasm.c
@@ -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){