Skip to content
Draft
Prev Previous commit
Next Next commit
wip
  • Loading branch information
MaxGraey committed Jun 26, 2022
commit c5c7de2cbda1c4e9d282969319ff4d7d4dde0570
10 changes: 5 additions & 5 deletions src/bindings/js.ts
Original file line number Diff line number Diff line change
Expand Up @@ -718,23 +718,23 @@ export class JSBuilder extends ExportsWalker {
const entriesCountOffset = 16; // TODO: removes hardcoded consts here
const entriesOffset = 8; // ^
const entryKeyOffset = 4; // ^
const entryTaggedNextOffset = 0; // ^
const entrySize = 4 + 4; // ^
const emptyMask = 1 << 0;
const pointerSize = 4; // TODO: depends of wasm64 or not

sb.push(` function __liftSet(liftElement, align, ptr) {
if (!ptr) return null;
const
mem32 = new Uint32Array(memory.buffer),
count = mem32[ptr + ${entriesCountOffset} >>> 2],
entriesPtr = mem32[ptr + ${entriesOffset} >>> 2],
entryAlign = Math.max(1 << align, 4) - 1,
entrySize = (${entrySize} + entryAlign) & ~entryAlign,
tagOffset = 1 << align,
entryAlign = Math.max(tagOffset, ${pointerSize}) - 1,
entrySize = (tagOffset + ${pointerSize} + entryAlign) & ~entryAlign,
res = new Set();
for (let i = 0; i < count; ++i) {
const
entryPtr = entriesPtr + i * entrySize,
tag = mem32[entryPtr + ${entryTaggedNextOffset} >>> 2];
tag = mem32[entryPtr + tagOffset >>> 2];
if (!(tag & ${emptyMask})) {
res.add(liftElement(entryPtr + ${entryKeyOffset} >>> 0));
}
Expand Down