diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2023-04-27 16:58:21 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-05-04 14:58:51 -0400 |
commit | 2d5c1ddecf195da9a8ee4f7b38fbb79d3b680aeb (patch) | |
tree | 6e9ac73ed4cc48a196f2eefb313ab7fcafd0e28b /rts/js/string.js | |
parent | 116d7312ec4c76f75a26bd0ad2b2815710049e0e (diff) | |
download | haskell-2d5c1ddecf195da9a8ee4f7b38fbb79d3b680aeb.tar.gz |
Fix remaining issues with bound checking (#23123)
While fixing these I've also changed the way we store addresses into
ByteArray#. Addr# are composed of two parts: a JavaScript array and an
offset (32-bit number).
Suppose we want to store an Addr# in a ByteArray# foo at offset i.
Before this patch, we were storing both fields as a tuple in the "arr"
array field:
foo.arr[i] = [addr_arr, addr_offset];
Now we only store the array part in the "arr" field and the offset
directly in the array:
foo.dv.setInt32(i, addr_offset):
foo.arr[i] = addr_arr;
It avoids wasting space for the tuple.
Diffstat (limited to 'rts/js/string.js')
-rw-r--r-- | rts/js/string.js | 41 |
1 files changed, 0 insertions, 41 deletions
diff --git a/rts/js/string.js b/rts/js/string.js index da5e0c610e..fd76e4405d 100644 --- a/rts/js/string.js +++ b/rts/js/string.js @@ -602,47 +602,6 @@ function h$hs_iconv_close(iconv) { return 0; } -// ptr* -> ptr (array) -function h$derefPtrA(ptr, ptr_off) { - return ptr.arr[ptr_off][0]; -} -// ptr* -> ptr (offset) -function h$derefPtrO(ptr, ptr_off) { - return ptr.arr[ptr_off][1]; -} - -// word** -> word ptr[x][y] -function h$readPtrPtrU32(ptr, ptr_off, x, y) { - x = x || 0; - y = y || 0; - var arr = ptr.arr[ptr_off + 4 * x]; - return arr[0].dv.getInt32(arr[1] + 4 * y, true); -} - -// char** -> char ptr[x][y] -function h$readPtrPtrU8(ptr, ptr_off, x, y) { - x = x || 0; - y = y || 0; - var arr = ptr.arr[ptr_off + 4 * x]; - return arr[0].dv.getUint8(arr[1] + y); -} - -// word** ptr[x][y] = v -function h$writePtrPtrU32(ptr, ptr_off, v, x, y) { - x = x || 0; - y = y || 0; - var arr = ptr.arr[ptr_off + 4 * x]; - arr[0].dv.putInt32(arr[1] + y, v); -} - -// unsigned char** ptr[x][y] = v -function h$writePtrPtrU8(ptr, ptr_off, v, x, y) { - x = x || 0; - y = y || 0; - var arr = ptr.arr[ptr_off+ 4 * x]; - arr[0].dv.putUint8(arr[1] + y, v); -} - // convert JavaScript String to a Haskell String #ifdef GHCJS_PROF function h$toHsString(str, cc) { |