diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2023-04-27 16:58:21 +0200 |
---|---|---|
committer | Sylvain Henry <sylvain@haskus.fr> | 2023-05-03 10:55:20 +0200 |
commit | eed582b504a14b307bef635b25a10e2ce2c9110e (patch) | |
tree | f252e1540d5d293d486d5993de9de7e264c86650 /rts/js/profiling.js | |
parent | 0646d828de9c45e2bd0b83cd5367798af4cdb8f2 (diff) | |
download | haskell-wip/js-boundsCheck.tar.gz |
Fix remaining issues with bound checking (#23123)wip/js-boundsCheck
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/profiling.js')
-rw-r--r-- | rts/js/profiling.js | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/rts/js/profiling.js b/rts/js/profiling.js index f972642658..e6433e36d6 100644 --- a/rts/js/profiling.js +++ b/rts/js/profiling.js @@ -302,10 +302,9 @@ function h$buildCCPtr(o) { #ifdef GHCJS_TRACE_PROF cc.myTag = "cc pointer"; #endif - cc.arr = []; - cc.arr[h$ccLabel_offset] = [h$encodeUtf8(o.label), 0]; - cc.arr[h$ccModule_offset] = [h$encodeUtf8(o.module), 0]; - cc.arr[h$ccsrcloc_offset] = [h$encodeUtf8(o.srcloc), 0]; + PUT_ADDR(cc, h$ccLabel_offset, h$encodeUtf8(o.label), 0); + PUT_ADDR(cc, h$ccModule_offset, h$encodeUtf8(o.module), 0); + PUT_ADDR(cc, h$ccsrcloc_offset, h$encodeUtf8(o.srcloc), 0); return cc; } |