summaryrefslogtreecommitdiff
path: root/src/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser')
-rw-r--r--src/parser/contexts.h5
-rw-r--r--src/parser/parsers.h4
2 files changed, 8 insertions, 1 deletions
diff --git a/src/parser/contexts.h b/src/parser/contexts.h
index 7ce5bbf96..15b82fe64 100644
--- a/src/parser/contexts.h
+++ b/src/parser/contexts.h
@@ -418,6 +418,7 @@ struct NullInstrParserCtx {
Result<> makeTableFill(Index, TableIdxT*) { return Ok{}; }
Result<> makeTableCopy(Index, TableIdxT*, TableIdxT*) { return Ok{}; }
Result<> makeThrow(Index, TagIdxT) { return Ok{}; }
+ Result<> makeRethrow(Index, LabelIdxT) { return Ok{}; }
template<typename HeapTypeT> Result<> makeCallRef(Index, HeapTypeT, bool) {
return Ok{};
}
@@ -1572,6 +1573,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeThrow(tag));
}
+ Result<> makeRethrow(Index pos, Index label) {
+ return withLoc(pos, irBuilder.makeRethrow(label));
+ }
+
Result<> makeCallRef(Index pos, HeapType type, bool isReturn) {
return withLoc(pos, irBuilder.makeCallRef(type, isReturn));
}
diff --git a/src/parser/parsers.h b/src/parser/parsers.h
index 67bd8bddd..be8db49a9 100644
--- a/src/parser/parsers.h
+++ b/src/parser/parsers.h
@@ -1480,7 +1480,9 @@ template<typename Ctx> Result<> makeThrow(Ctx& ctx, Index pos) {
}
template<typename Ctx> Result<> makeRethrow(Ctx& ctx, Index pos) {
- return ctx.in.err("unimplemented instruction");
+ auto label = labelidx(ctx);
+ CHECK_ERR(label);
+ return ctx.makeRethrow(pos, *label);
}
template<typename Ctx> Result<> makeTupleMake(Ctx& ctx, Index pos) {