diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/emscripten-optimizer/simple_ast.h | 6 | ||||
-rw-r--r-- | src/wasm2asm.h | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/emscripten-optimizer/simple_ast.h b/src/emscripten-optimizer/simple_ast.h index 2f585dfce..f2607315a 100644 --- a/src/emscripten-optimizer/simple_ast.h +++ b/src/emscripten-optimizer/simple_ast.h @@ -1336,6 +1336,12 @@ public: .push_back(target) .push_back(makeRawArray()); } + static Ref makeCall(IString target) { + Ref ret = &makeRawArray(3)->push_back(makeRawString(CALL)) + .push_back(makeName(target)) + .push_back(makeRawArray()); + return ret; + } static Ref makeCall(IString target, Ref arg) { Ref ret = &makeRawArray(3)->push_back(makeRawString(CALL)) .push_back(makeName(target)) diff --git a/src/wasm2asm.h b/src/wasm2asm.h index 86c1f465c..581dc4b62 100644 --- a/src/wasm2asm.h +++ b/src/wasm2asm.h @@ -13,6 +13,7 @@ namespace wasm { using namespace cashew; IString ASM_FUNC("asmFunc"), + ABORT_FUNC("abort"), NO_RESULT("wasm2asm$noresult"), // no result at all EXPRESSION_RESULT("wasm2asm$expresult"); // result in an expression, no temp var @@ -712,10 +713,13 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) { ); } void visitHost(Host *curr) override { + abort(); } void visitNop(Nop *curr) override { + return ValueBuilder::makeTopLevel() } void visitUnreachable(Unreachable *curr) override { + return ValueBuilder::makeCall(ABORT_FUNC); } }; return ExpressionProcessor(this).visit(curr, result); |