diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-19 21:00:20 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-19 21:00:20 -0800 |
commit | 9c55ad5d1c7c4110bab82e412a510ca39d58256f (patch) | |
tree | 5dc4e045a0b6379b3794ae7a4959cf76ccdbdb90 /src | |
parent | 58c138333ade389a592083b095093107d5e935f3 (diff) | |
download | binaryen-9c55ad5d1c7c4110bab82e412a510ca39d58256f.tar.gz binaryen-9c55ad5d1c7c4110bab82e412a510ca39d58256f.tar.bz2 binaryen-9c55ad5d1c7c4110bab82e412a510ca39d58256f.zip |
implement growMemory in wasm.js
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-js.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/wasm-js.cpp b/src/wasm-js.cpp index 7d1120474..bd0ee51a7 100644 --- a/src/wasm-js.cpp +++ b/src/wasm-js.cpp @@ -228,8 +228,20 @@ extern "C" void EMSCRIPTEN_KEEPALIVE load_asm(char *input) { } void growMemory(size_t oldSize, size_t newSize) override { - // never called from compiled asm.js directly, we have special support for it as the request arrives from outside js - abort(); + EM_ASM_({ + var size = $0; + var buffer; + try { + buffer = new ArrayBuffer(size); + } catch(e) { + // fail to grow memory. post.js notices this since the buffer is unchanged + return; + } + var oldHEAP8 = Module['outside']['HEAP8']; + var temp = new Int8Array(buffer); + temp.set(oldHEAP8); + Module['outside']['buffer'] = buffer; + }, newSize); } void trap(const char* why) override { |