diff options
Diffstat (limited to 'src/parser')
-rw-r--r-- | src/parser/contexts.h | 5 | ||||
-rw-r--r-- | src/parser/parsers.h | 4 |
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) { |