diff --git a/std/portable/memory.js b/std/portable/memory.js index b693c038..3362a60f 100644 --- a/std/portable/memory.js +++ b/std/portable/memory.js @@ -3,16 +3,18 @@ module.exports = globalScope => { var HEAP_OFFSET = 0; globalScope["allocate_memory"] = function allocate_memory(size) { - if (!(size >>>= 0)) - return 0; + if (!(size >>>= 0)) return 0; + if (HEAP_OFFSET + size > HEAP.length) { var oldHeap = HEAP; HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2)); HEAP.set(oldHeap); } + var ptr = HEAP_OFFSET; if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1; + return ptr; }; @@ -20,19 +22,15 @@ module.exports = globalScope => { // TODO }; - globalScope["move_memory"] = function move_memory(dest, src, n) { - HEAP.copyWithin(dest, src, src + n); + globalScope["move_memory"] = function move_memory(dest, src, size) { + HEAP.copyWithin(dest, src, src + size); }; - globalScope["store"] = function store(ptr, val, off) { - if (typeof off === "number") - ptr += off; - HEAP[ptr] = val; + globalScope["store"] = function store(ptr, value, offset) { + HEAP[ptr + (offset | 0)] = value; }; - globalScope["load"] = function load(ptr) { - if (typeof off === "number") - ptr += off; - return HEAP[ptr]; + globalScope["load"] = function load(ptr, offset) { + return HEAP[ptr + (offset | 0)]; }; };