diff options
author | Alex Crichton <alex@alexcrichton.com> | 2019-02-14 11:07:03 -0600 |
---|---|---|
committer | Ben Smith <binjimin@gmail.com> | 2019-02-14 09:07:03 -0800 |
commit | 2b33a37dc49c033ba9b34f438233f204002415d9 (patch) | |
tree | c7c091542e4287b2e19dfb644e5186ce42235cf0 /src/expr-visitor.h | |
parent | 19191efaf1b5b92b0357b303be1b25cf439be9a2 (diff) | |
download | wabt-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.h | 12 |
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; } |