summaryrefslogtreecommitdiff
path: root/src/binary-reader-ir.cc
diff options
context:
space:
mode:
authorBen Smith <binjimin@gmail.com>2019-02-13 16:27:24 -0800
committerGitHub <noreply@github.com>2019-02-13 16:27:24 -0800
commit19191efaf1b5b92b0357b303be1b25cf439be9a2 (patch)
tree1bd4be08904c059f809a69fff660de3a3cc5321c /src/binary-reader-ir.cc
parente448ac7cbd74f7a048b1de15ce1a2716340a57c8 (diff)
downloadwabt-19191efaf1b5b92b0357b303be1b25cf439be9a2.tar.gz
wabt-19191efaf1b5b92b0357b303be1b25cf439be9a2.tar.bz2
wabt-19191efaf1b5b92b0357b303be1b25cf439be9a2.zip
Add br_on_exn instruction (#1016)
It takes two u32 immediates: the branch depth and an exception index. The stack signature is `[expect_ref] -> [except_ref]`, so the `except_ref` can be tested easily against multiple exception types.
Diffstat (limited to 'src/binary-reader-ir.cc')
-rw-r--r--src/binary-reader-ir.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc
index 4a5ce416..a60de398 100644
--- a/src/binary-reader-ir.cc
+++ b/src/binary-reader-ir.cc
@@ -137,6 +137,7 @@ class BinaryReaderIR : public BinaryReaderNop {
Result OnBlockExpr(Type sig_type) override;
Result OnBrExpr(Index depth) override;
Result OnBrIfExpr(Index depth) override;
+ Result OnBrOnExnExpr(Index depth, Index event_index) override;
Result OnBrTableExpr(Index num_targets,
Index* target_depths,
Index default_target_depth) override;
@@ -649,6 +650,13 @@ Result BinaryReaderIR::OnBrIfExpr(Index depth) {
return AppendExpr(MakeUnique<BrIfExpr>(Var(depth)));
}
+Result BinaryReaderIR::OnBrOnExnExpr(Index depth, Index event_index) {
+ auto expr = MakeUnique<BrOnExnExpr>();
+ expr->label_var = Var(depth);
+ expr->event_var = Var(event_index);
+ return AppendExpr(std::move(expr));
+}
+
Result BinaryReaderIR::OnBrTableExpr(Index num_targets,
Index* target_depths,
Index default_target_depth) {