diff options
-rw-r--r-- | src/s2wasm-main.cpp | 6 | ||||
-rw-r--r-- | src/s2wasm.h | 7 | ||||
-rw-r--r-- | test/dot_s/asm_const.wast | 2 |
3 files changed, 11 insertions, 4 deletions
diff --git a/src/s2wasm-main.cpp b/src/s2wasm-main.cpp index 694dc4a08..0df9b204a 100644 --- a/src/s2wasm-main.cpp +++ b/src/s2wasm-main.cpp @@ -35,9 +35,13 @@ int main(int argc, char **argv) { AllocatingModule wasm; S2WasmBuilder s2wasm(wasm, input); + if (debug) std::cerr << "emscripten gluing...\n"; + std::stringstream meta; + s2wasm.emscriptenGlue(meta); + if (debug) std::cerr << "printing...\n"; std::cout << wasm; - s2wasm.printMeta(std::cout); + std::cout << meta.str(); if (debug) std::cerr << "done.\n"; } diff --git a/src/s2wasm.h b/src/s2wasm.h index 6d821dc83..f7597b460 100644 --- a/src/s2wasm.h +++ b/src/s2wasm.h @@ -864,8 +864,8 @@ private: public: - // emit metadata for emscripten integration - void printMeta(std::ostream& o) { + // extra emscripten processing + void emscriptenGlue(std::ostream& o) { o << "; METADATA: { "; // find asmConst calls, and emit their metadata struct AsmConstWalker : public WasmWalker { @@ -888,6 +888,9 @@ public: } std::string sig = getSig(curr); sigsForCode[code].insert(sig); + std::string fixedTarget = EMSCRIPTEN_ASM_CONST.str; + fixedTarget += '_' + sig; + curr->target = cashew::IString(fixedTarget.c_str(), false); } } diff --git a/test/dot_s/asm_const.wast b/test/dot_s/asm_const.wast index 620606a58..55665533c 100644 --- a/test/dot_s/asm_const.wast +++ b/test/dot_s/asm_const.wast @@ -5,7 +5,7 @@ (func $main (result i32) (block $fake_return_waka123 (block - (call_import $emscripten_asm_const + (call_import $emscripten_asm_const_vi (i32.const 16) ) (br $fake_return_waka123 |