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

Add sqlite3.wasm.irSizeof() and extend certain allocation functions to make use of it.

FossilOrigin-Name: 1cbc7b1875e8611b9db7a747b4c9499501450deaf90c929d212511837d6f72b6
This commit is contained in:
stephan
2022-12-25 20:05:11 +00:00
parent 031ee6b9da
commit 7d59d90a5b
4 changed files with 42 additions and 10 deletions

View File

@ -1020,12 +1020,20 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
to the memory. On error, returns throws a WasmAllocError. The
memory must eventually be released using restore().
If n is a string, it must be a WASM "IR" value in the set
accepted by wasm.irSizeof(), which is mapped to the size of
that data type. If passed a string not in that set, it throws a
WasmAllocError.
This method always adjusts the given value to be a multiple
of 8 bytes because failing to do so can lead to incorrect
results when reading and writing 64-bit values from/to the WASM
heap. Similarly, the returned address is always 8-byte aligned.
*/
alloc: (n)=>{
alloc: function(n){
if('string'===typeof n && !(n = wasm.irSizeof(n))){
WasmAllocError.toss("Invalid value for pstack.alloc(",arguments[0],")");
}
return wasm.exports.sqlite3_wasm_pstack_alloc(n)
|| WasmAllocError.toss("Could not allocate",n,
"bytes from the pstack.");
@ -1035,6 +1043,8 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
returns the addresses as an array of n element, each holding
the address of one chunk.
sz may optionally be an IR string accepted by wasm.irSizeof().
Throws a WasmAllocError if allocation fails.
Example:
@ -1043,7 +1053,10 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
const [p1, p2, p3] = wasm.pstack.allocChunks(3,4);
```
*/
allocChunks: (n,sz)=>{
allocChunks: function(n,sz){
if('string'===typeof sz && !(sz = wasm.irSizeof(sz))){
WasmAllocError.toss("Invalid size value for allocChunks(",arguments[1],")");
}
const mem = wasm.pstack.alloc(n * sz);
const rc = [];
let i = 0, offset = 0;