summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-10-31 13:29:45 -0700
committerAlon Zakai <alonzakai@gmail.com>2015-10-31 13:29:45 -0700
commit81e35a5fdf894232e4167a9d66c7b93ecf31ea41 (patch)
tree4207dbfdd8649951735da8f5741690b2d588a8d9 /src
parentdcdf2e222f0b42c71ca41f7e37bc77decfef37f7 (diff)
downloadbinaryen-81e35a5fdf894232e4167a9d66c7b93ecf31ea41.tar.gz
binaryen-81e35a5fdf894232e4167a9d66c7b93ecf31ea41.tar.bz2
binaryen-81e35a5fdf894232e4167a9d66c7b93ecf31ea41.zip
progress on wasm.js communication
Diffstat (limited to 'src')
-rw-r--r--src/js/post.js30
-rw-r--r--src/wasm-js.cpp3
2 files changed, 33 insertions, 0 deletions
diff --git a/src/js/post.js b/src/js/post.js
new file mode 100644
index 000000000..571fca101
--- /dev/null
+++ b/src/js/post.js
@@ -0,0 +1,30 @@
+
+(function() {
+ // XXX don't be confused. Module here is in the outside program. WasmJS is the inner wasm-js.cpp.
+
+ // Generate a module instance of the asm.js converted into wasm.
+ var code = read(Module['asmjsCodeFile']);
+ var temp = WasmJS._malloc(code.length + 1);
+ WasmJS.writeAsciiToMemory(code, temp);
+ var instance = WasmJS.load_asm(temp);
+ WasmJS._free(temp);
+
+ // Generate memory XXX TODO get the right size
+ var theBuffer = Module['buffer'] = new ArrayBuffer(16*1024*1024);
+
+ // Information for the instance of the module.
+ var instance = WasmJS['instance'] = {
+ global: null,
+ env: null,
+ parent: Module // Module inside wasm-js.cpp refers to wasm-js.cpp; this allows access to the outside program.
+ };
+
+ // The asm.js function, called to "link" the asm.js module.
+ Module['asm'] = function(global, env, buffer) {
+ assert(buffer === theBuffer); // we should not even need to pass it as a 3rd arg for wasm, but that's the asm.js way.
+ // write the provided data to a location the wasm instance can get at it.
+ instance.global = global;
+ instance.env = env;
+ };
+})();
+
diff --git a/src/wasm-js.cpp b/src/wasm-js.cpp
index e2ef47bbb..2bea09a16 100644
--- a/src/wasm-js.cpp
+++ b/src/wasm-js.cpp
@@ -3,6 +3,9 @@
// wasm intepreter for asm2wasm output, in a js environment. receives asm.js,
// generates a runnable module suitable as a polyfill.
//
+// this polyfills an emscripten --separate-asm *.asm.js file, as a drop-in
+// replacement. it writes the wasm module to Module.asm, and sets Module.buffer.
+//
#include <emscripten.h>