diff options
author | Ben Smith <binji@chromium.org> | 2020-05-28 11:30:38 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-28 11:30:38 -0700 |
commit | bf46c08b05fc6fcc457f1657e936fab24b4dceee (patch) | |
tree | f57a19c670a3e222896c252c829d5eb5ec4db6d2 /src/binary-reader-ir.cc | |
parent | 0630dc53755678239d7609b61776b125221eefb8 (diff) | |
download | wabt-bf46c08b05fc6fcc457f1657e936fab24b4dceee.tar.gz wabt-bf46c08b05fc6fcc457f1657e936fab24b4dceee.tar.bz2 wabt-bf46c08b05fc6fcc457f1657e936fab24b4dceee.zip |
Reference types changes to remove subtyping (#1407)
Main changes:
* Rename `anyref` -> `externref`
* Remove `nullref`
* Rename `hostref` -> `externref`
* `ref.null` and `ref.is_null` now have "ref kind" parameter
* Add ref kind keywords: `func`, `extern`, `exn`
Diffstat (limited to 'src/binary-reader-ir.cc')
-rw-r--r-- | src/binary-reader-ir.cc | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc index e1bac665..d1a4ecf2 100644 --- a/src/binary-reader-ir.cc +++ b/src/binary-reader-ir.cc @@ -184,8 +184,8 @@ class BinaryReaderIR : public BinaryReaderNop { Result OnTableSizeExpr(Index table_index) override; Result OnTableFillExpr(Index table_index) override; Result OnRefFuncExpr(Index func_index) override; - Result OnRefNullExpr() override; - Result OnRefIsNullExpr() override; + Result OnRefNullExpr(Type type) override; + Result OnRefIsNullExpr(Type type) override; Result OnNopExpr() override; Result OnRethrowExpr() override; Result OnReturnExpr() override; @@ -213,7 +213,7 @@ class BinaryReaderIR : public BinaryReaderNop { Result EndElemSegmentInitExpr(Index index) override; Result OnElemSegmentElemType(Index index, Type elem_type) override; Result OnElemSegmentElemExprCount(Index index, Index count) override; - Result OnElemSegmentElemExpr_RefNull(Index segment_index) override; + Result OnElemSegmentElemExpr_RefNull(Index segment_index, Type type) override; Result OnElemSegmentElemExpr_RefFunc(Index segment_index, Index func_index) override; @@ -247,7 +247,7 @@ class BinaryReaderIR : public BinaryReaderNop { Result OnInitExprGlobalGetExpr(Index index, Index global_index) override; Result OnInitExprI32ConstExpr(Index index, uint32_t value) override; Result OnInitExprI64ConstExpr(Index index, uint64_t value) override; - Result OnInitExprRefNull(Index index) override; + Result OnInitExprRefNull(Index index, Type type) override; Result OnInitExprRefFunc(Index index, Index func_index) override; Result OnDataSymbol(Index index, uint32_t flags, string_view name, @@ -914,12 +914,12 @@ Result BinaryReaderIR::OnRefFuncExpr(Index func_index) { return AppendExpr(MakeUnique<RefFuncExpr>(Var(func_index))); } -Result BinaryReaderIR::OnRefNullExpr() { - return AppendExpr(MakeUnique<RefNullExpr>()); +Result BinaryReaderIR::OnRefNullExpr(Type type) { + return AppendExpr(MakeUnique<RefNullExpr>(type)); } -Result BinaryReaderIR::OnRefIsNullExpr() { - return AppendExpr(MakeUnique<RefIsNullExpr>()); +Result BinaryReaderIR::OnRefIsNullExpr(Type type) { + return AppendExpr(MakeUnique<RefIsNullExpr>(type)); } Result BinaryReaderIR::OnNopExpr() { @@ -1073,10 +1073,11 @@ Result BinaryReaderIR::OnElemSegmentElemExprCount(Index index, Index count) { return Result::Ok; } -Result BinaryReaderIR::OnElemSegmentElemExpr_RefNull(Index segment_index) { +Result BinaryReaderIR::OnElemSegmentElemExpr_RefNull(Index segment_index, + Type type) { assert(segment_index == module_->elem_segments.size() - 1); ElemSegment* segment = module_->elem_segments[segment_index]; - segment->elem_exprs.emplace_back(); + segment->elem_exprs.emplace_back(type); return Result::Ok; } @@ -1226,9 +1227,9 @@ Result BinaryReaderIR::OnInitExprI64ConstExpr(Index index, uint64_t value) { return Result::Ok; } -Result BinaryReaderIR::OnInitExprRefNull(Index index) { +Result BinaryReaderIR::OnInitExprRefNull(Index index, Type type) { Location loc = GetLocation(); - current_init_expr_->push_back(MakeUnique<RefNullExpr>(loc)); + current_init_expr_->push_back(MakeUnique<RefNullExpr>(type, loc)); return Result::Ok; } |