summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/emscripten-optimizer/simple_ast.h6
-rw-r--r--src/wasm2asm.h4
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);