From 547867eb0e78cac6be7f35bbd80c6582224df807 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 31 Oct 2015 13:54:50 -0700 Subject: JSExternalInterface::callImport --- src/wasm-js.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src') diff --git a/src/wasm-js.cpp b/src/wasm-js.cpp index c0b2aadc2..8305cb4a9 100644 --- a/src/wasm-js.cpp +++ b/src/wasm-js.cpp @@ -56,6 +56,25 @@ extern "C" ModuleInstance* EMSCRIPTEN_KEEPALIVE load_asm(char *input) { struct JSExternalInterface : ModuleInstance::ExternalInterface { Literal callImport(Import *import, ModuleInstance::LiteralList& arguments) override { + EM_ASM({ + Module['tempArguments'] = []; + }); + for (auto& argument : arguments) { + if (argument.type == i32) { + EM_ASM({ Module['tempArguments'].push($0) }, argument.geti32()); + } else if (argument.type == f64) { + EM_ASM({ Module['tempArguments'].push($0) }, argument.getf64()); + } else { + abort(); + } + } + return Literal(EM_ASM_DOUBLE({ + var mod = Pointer_stringify($0); + var base = Pointer_stringify($1); + var tempArguments = Module['tempArguments']; + Module['tempArguments'] = null; + return Module['instance'][mod][base].apply(null, tempArguments); + }, import->module.str, import->base.str)); } Literal load(Load* load, Literal ptr) override { -- cgit v1.2.3