summaryrefslogtreecommitdiff
path: root/src/expr-visitor.h
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2019-02-14 11:07:03 -0600
committerBen Smith <binjimin@gmail.com>2019-02-14 09:07:03 -0800
commit2b33a37dc49c033ba9b34f438233f204002415d9 (patch)
treec7c091542e4287b2e19dfb644e5186ce42235cf0 /src/expr-visitor.h
parent19191efaf1b5b92b0357b303be1b25cf439be9a2 (diff)
downloadwabt-2b33a37dc49c033ba9b34f438233f204002415d9.tar.gz
wabt-2b33a37dc49c033ba9b34f438233f204002415d9.tar.bz2
wabt-2b33a37dc49c033ba9b34f438233f204002415d9.zip
Add support for the reference types proposal (#938)
* Add support for the reference types proposal This commit adds support for the reference types proposal to wabt. Namely it adds new opcodes like `table.{get,set,grow}` as well as adds a new `anyref` type. These are plumbed throughout for various operations in relatively simple fashions, no support was added for a subtyping relationship between `anyref` and `anyfunc` just yet. This also raises the restriction that multiple tables are disallowed, allowing multiple tables to exist when `--enable-reference-types` is passed. * Allow nonzero table indices in `call_indirect` Plumb support throughout for the `call_indirect` instruction (and `return_call_indirect`) to work with multi-table modules according to the reference types proposal.
Diffstat (limited to 'src/expr-visitor.h')
-rw-r--r--src/expr-visitor.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/expr-visitor.h b/src/expr-visitor.h
index e42c36ad..a27357ad 100644
--- a/src/expr-visitor.h
+++ b/src/expr-visitor.h
@@ -97,6 +97,12 @@ class ExprVisitor::Delegate {
virtual Result OnTableCopyExpr(TableCopyExpr*) = 0;
virtual Result OnElemDropExpr(ElemDropExpr*) = 0;
virtual Result OnTableInitExpr(TableInitExpr*) = 0;
+ virtual Result OnTableGetExpr(TableGetExpr*) = 0;
+ virtual Result OnTableSetExpr(TableSetExpr*) = 0;
+ virtual Result OnTableGrowExpr(TableGrowExpr*) = 0;
+ virtual Result OnTableSizeExpr(TableSizeExpr*) = 0;
+ virtual Result OnRefNullExpr(RefNullExpr*) = 0;
+ virtual Result OnRefIsNullExpr(RefIsNullExpr*) = 0;
virtual Result OnNopExpr(NopExpr*) = 0;
virtual Result OnReturnExpr(ReturnExpr*) = 0;
virtual Result OnReturnCallExpr(ReturnCallExpr*) = 0;
@@ -156,6 +162,12 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
Result OnTableCopyExpr(TableCopyExpr*) override { return Result::Ok; }
Result OnElemDropExpr(ElemDropExpr*) override { return Result::Ok; }
Result OnTableInitExpr(TableInitExpr*) override { return Result::Ok; }
+ Result OnTableGetExpr(TableGetExpr*) override { return Result::Ok; }
+ Result OnTableSetExpr(TableSetExpr*) override { return Result::Ok; }
+ Result OnTableGrowExpr(TableGrowExpr*) override { return Result::Ok; }
+ Result OnTableSizeExpr(TableSizeExpr*) override { return Result::Ok; }
+ Result OnRefNullExpr(RefNullExpr*) override { return Result::Ok; }
+ Result OnRefIsNullExpr(RefIsNullExpr*) override { return Result::Ok; }
Result OnNopExpr(NopExpr*) override { return Result::Ok; }
Result OnReturnExpr(ReturnExpr*) override { return Result::Ok; }
Result OnReturnCallExpr(ReturnCallExpr*) override { return Result::Ok; }