summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-19 21:00:20 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-19 21:00:20 -0800
commit9c55ad5d1c7c4110bab82e412a510ca39d58256f (patch)
tree5dc4e045a0b6379b3794ae7a4959cf76ccdbdb90 /src
parent58c138333ade389a592083b095093107d5e935f3 (diff)
downloadbinaryen-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.cpp16
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 {